假設現在有業務需求,計划將所有的nginx 從鏡像版本1.14更新到1.15,這一次發布不緊需要平滑發布,還需要
金絲雀發布,及確認其中一個Pod沒有問題后在進行剩余的更新。
暫停與恢復也可以使用yml文件來實現,但是相對比較復雜,這里用比較簡單的命令進行說明
暫停與恢復的命令如下所示:
kubectl rollout pause deploy {Deployment 名稱}
kubectl rollout resume deploy {Deployment 名稱}
第一步, 新建一個deployment實例
[root@master01]# kubectl apply -f deployment-nginx.yaml --record
deployment.apps/mynginxdeployment created
[root@master01]# cat deployment-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mynginxdeployment
spec:
selector:
matchLabels:
apps: nginx
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
template:
metadata:
labels:
apps: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
imagePullPolicy: Always
ports:
- name: mynginxports
containerPort: 80
[root@master01]#
第二步, 把新建的deployment 鏡像設置為 nginx:1.16
連續執行以下命令
kubectl set image deployment mynginxdeployment nginx=nginx:1.16 --record
kubectl rollout pause deployment mynginxdeployment
第三部,驗證更新后的pod是否正常
如果正常,那么就繼續更新剩余的pod
kubectl rollout resume deployment mynginxdeployment
Deployment控制器的回滾
例如,發現新版本的Pod有嚴重的問題,需要回滾到之前的版本
1) 使用以下命令查看歷史變更記錄
kubectl rollout history deployment mynginxdeployment
提示 發布deployment的時候一定要加上--record
保留歷史記錄的本質是保留每次修改所創建的ReplicaSet 控制器,而回滾的本質其實是
切換到對應版本的ReplicaSet控制器
Deployment控制器是通過ReplicaSet控制器來管理Pod的
- 架設我們根據deployment的歷史記錄,回滾到某個版本號
例如退回到版本8:
kubectl rollout undo deployment mynginxdeployment --to-verision=8