apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: dev template: metadata: labels: app: myapp release: dev spec: containers: - name: myapp-rongqi image: ikubernetes/myapp:v1
vim de.yaml #修改yaml裏的鏡像版本
nginx
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 5 selector: matchLabels: app: myapp release: dev strategy: rollingUpdate: #設置策略爲滾動更新,還有一個重建更新,所有一塊兒結束一塊兒新建 不友好這裏就不介紹了 maxSurge: 1 #最大可超出預設值1個容器 maxUnavailable: 0 #最大可有0個容器不可用 ,總體表示更新時可同時可有6個容器,必須保證有5個容器可用 template: metadata: labels: app: myapp release: dev spec: containers: - name: myapp-rongqi image: ikubernetes/myapp:v1
kubectl apply -f de.yaml #用apply更新配置vim
[root@cs25 ~]# kubectl get pod -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-576d479bcc-bt7hz 1/1 Running 0 47m myapp-deploy-576d479bcc-bzqwv 1/1 Running 0 11m myapp-deploy-576d479bcc-hf6kb 1/1 Running 0 47m myapp-deploy-576d479bcc-hgb6w 1/1 Running 0 11m myapp-deploy-576d479bcc-vztqp 1/1 Running 0 11m myapp-deploy-7f969b64fb-2frdn 0/1 Pending 0 0s myapp-deploy-576d479bcc-vztqp 1/1 Terminating 0 12m myapp-deploy-7f969b64fb-6lhjw 0/1 Pending 0 0s myapp-deploy-7f969b64fb-2frdn 0/1 Pending 0 0s myapp-deploy-7f969b64fb-6lhjw 0/1 Pending 0 0s myapp-deploy-7f969b64fb-5ms8f 0/1 Pending 0 0s myapp-deploy-7f969b64fb-5ms8f 0/1 Pending 0 0s myapp-deploy-7f969b64fb-6lhjw 0/1 ContainerCreating 0 1s myapp-deploy-7f969b64fb-2frdn 0/1 ContainerCreating 0 1s myapp-deploy-7f969b64fb-5ms8f 0/1 ContainerCreating 0 0s myapp-deploy-7f969b64fb-2frdn 0/1 ContainerCreating 0 35s myapp-deploy-7f969b64fb-5ms8f 0/1 ContainerCreating 0 35s myapp-deploy-7f969b64fb-6lhjw 0/1 ContainerCreating 0 36s myapp-deploy-576d479bcc-vztqp 0/1 Terminating 0 12m myapp-deploy-576d479bcc-vztqp 0/1 Terminating 0 12m myapp-deploy-576d479bcc-vztqp 0/1 Terminating 0 12m myapp-deploy-7f969b64fb-5ms8f 1/1 Running 0 43s myapp-deploy-7f969b64fb-2frdn 1/1 Running 0 47s myapp-deploy-7f969b64fb-6lhjw 1/1 Running 0 51s myapp-deploy-576d479bcc-hgb6w 1/1 Terminating 0 13m myapp-deploy-576d479bcc-bzqwv 1/1 Terminating 0 13m myapp-deploy-576d479bcc-bt7hz 1/1 Terminating 0 49m myapp-deploy-7f969b64fb-gprvk 0/1 Pending 0 0s myapp-deploy-7f969b64fb-fwdbr 0/1 Pending 0 0s myapp-deploy-7f969b64fb-fwdbr 0/1 Pending 0 1s myapp-deploy-7f969b64fb-gprvk 0/1 Pending 0 1s myapp-deploy-7f969b64fb-fwdbr 0/1 ContainerCreating 0 1s myapp-deploy-7f969b64fb-gprvk 0/1 ContainerCreating 0 1s myapp-deploy-576d479bcc-hgb6w 0/1 Terminating 0 13m myapp-deploy-576d479bcc-bzqwv 0/1 Terminating 0 13m myapp-deploy-7f969b64fb-fwdbr 0/1 ContainerCreating 0 18s myapp-deploy-7f969b64fb-gprvk 0/1 ContainerCreating 0 19s myapp-deploy-576d479bcc-hgb6w 0/1 Terminating 0 13m myapp-deploy-576d479bcc-bt7hz 0/1 Terminating 0 49m myapp-deploy-576d479bcc-bzqwv 0/1 Terminating 0 13m myapp-deploy-7f969b64fb-gprvk 1/1 Running 0 20s myapp-deploy-7f969b64fb-fwdbr 1/1 Running 0 20s
kubectl get rs -o wide #使用命令查看
能夠看到當前鏡像版本已經換成了v2 且模板也變了,以前的v1版本還保這方便回滾,yaml文件內容修改一次就會當作一次更新,最後一串數字就是經過yaml文件計算出來的
注意: deployment的pod模板被更改時纔會建立新的修訂版本,例如更新模板標籤或者容器鏡像能夠觸發滾動更新, 其它操做例如擴展副本數將不會觸發deployment的更新操做api
kubectl set image deploy myapp-deploy myapp-rongqi=ikubernetes/myapp:v3 && kubectl rollout pause deploy myapp-deploy
#kubectl set image deploy "控制器Name" "容器name"=ikubernetes/myapp:v3 && kubectl rollout pause deploy "控制器Name"
#原理就是先升級一個容器的版本,執行pause 暫停升級任務,待升級的那個容器通過真實用戶測試後無錯後解除暫停
kubectl get rs -o wide #查看控制器能看到,有1個v3版,5個v2版本,出現6個的緣由是我滾動策略定義了升級可容許存在6個
kubectl rollout resume deploy myapp-deploy
#解除暫停
#解除暫停後能看到,v2版本在一點點的關閉向v3版轉移,最終v2所有關閉,v3版5個容器所有正常上線app
kubectl rollout history deployment/nginx-deployment #查看升級歷史記錄 kubectl rollout history deployment/nginx-deployment --revision=2 #查看某個升級歷史記錄的的詳細信息 kubectl rollout undo deployment/nginx-deployment #回滾到上一個版本 kubectl rollout undo deployment/nginx-deployment --to-revision=2 #回滾到指定版本