kubectl apply
每次更新应用时 Kubernetes 都会记录下当前的配置,保存为一个 revision(版次),这样就可以回滚到某个特定 revision。
滚动更新是一次只更新一小部分,成功后再更新更多的副本,最终完成所有副本的更新。滚动更新最大的好处是零停机,整个更新过程始终有副本在运行,从而保证业务的连续性。
在Deployment 配置文件中通过revisionHistoryLimit 属性配置revison数量
下面实践回滚功
三个配置文件 httpd.v1.ym,httpd.v2.yml, httpd.v3.yml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: httpd annotations: kubernetes.io/change-cause: "httpd.v1" #记录到revision中的内容 spec: revisionHistoryLimit: 10 #保留最近10个revision replicas: 2 template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd ports: - containerPort: 80
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: httpd annotations: kubernetes.io/change-cause: "httpd.v2" spec: revisionHistoryLimit: 10 replicas: 2 template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd:2 ports: - containerPort: 80
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: httpd annotations: kubernetes.io/change-cause: "httpd.v3" #记录到revision中的内容 spec: revisionHistoryLimit: 10 #保留最近10个revision replicas: 2 template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd:2.4 ports: - containerPort: 80
更新应用
--record
的作用是将当前命令记录到 revision 记录中,这样我们就可以知道每个 revison 对应的是哪个配置文件。
不想在命令行加的话就要在配置文件中添加
annotations: kubernetes.io/change-cause: "httpd.v3" #记录到revision中的内容
通过 kubectl rollout history deployment httpd
查看 revison 历史记录。
CHANGE-CAUSE
就是 --record
的结果。
如果要回滚到某个版本,比如 revision 1,可以执行命令 :
kubectl rollout undo deployment httpd --to-revision=1
通过查看历史 revision 由3版本变成4版本 ,其实这个4版本对应的就是之前的1版本
参考