DevOps CICD K8s DockerCreate a deployment as follows:
Name:nginx-app
Using container nginx with version 1.11.0-alpine
The deployment should contain 3 replicas
Next, deploy the app with new version 1.11.3-alpine by performing a rolling update and record that update.
Finally, rollback that update to the previous version 1.11.0-alpine
這題的考點是rolling update和rollout,也就是K8s中重要的版本控制、版本升級與版本回滾。
這邊指的版本是指
image的版本
在K8s中有兩種版本升級的strategies,一種是recreate,一種為rolling update。recreate方法很直覺,就是直接將所有Pod一次升級,一次刪除所有舊版Pod,再一次創建所有新版Pod,缺點是更新過程會暫時中斷服務;而rolling update則是將舊版Pod一個一個刪除,再一個一個創建新的,可以保證更新期間提供的服務不會中斷。
創建
Deployment時不必特別指定update strategy type,K8s中default的策略就是RollingUpdate
可以用kubectl describe deploy命令查看

這題還包含了rollback的概念,即版本回滾。K8s中Deployment的升級機制其實是透過replicaSet物件完成。更新時會創建一個新的replicaSet,新舊版replicaSet透過rolling update機制更新完成。所以你可以在更新完成後查看replicaSet,其中一個沒有Pod運行(舊版replicaSet,裡面的Pod被刪除),另一個則有3個Pod(新版replicaSet)。
所以
K8s為甚麼可以實現版本回滾,就是因為它舊版的replicaSet其實還在,並沒有被刪除,只要重新將它run起來並刪除新replicaSet就可以實現回滾了。
有了這些概念後,我們就可以來解這道題目了。步驟如下:
Deployment
replicas設定為3image版本並記錄image版本創建Deployment
$ kubectl create deploy nginx-app --image=nginx:1.11.0-alpine
## 將replicas設定為3
$ kubectl edit deploy nginx-app
...
spec:
replicas: 3
...
將Deployment image update為1.11.3-alpine版本
## 升級image為1.11.3-alpine,並記錄此升級
## 不必特別指定update policy,因為default就是rolling update
## nginx=nginx:1.11.3-alpine的nginx是container name
$ kubectl set image deployment nginx-app nginx=nginx:1.11.3-alpine --record
deployment.apps/nginx-app image updated
## 查看升級紀錄
$ kubectl rollout history deploy nginx-app
deployment.apps/nginx-app
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deploy nginx-app nginx=nginx:1.11.3-alpine --record=true
## 檢查deployment的image版本,確定成功升級
$ kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-app 3/3 3 3 9m19s nginx nginx:1.11.3-alpine app=nginx-app
回滾為1.11.0-alpine版本
## 回滾上一個版本
$ kubectl rollout undo deployment nginx-app
deployment.apps/nginx-app rolled back
## 檢查deployment的image版本,確定成功回滾
$ kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-app 3/3 2 3 10m nginx nginx:1.11.0-alpine app=nginx-app
## 確認回滾狀態
$ kubectl rollout status deployment nginx-app
deployment "nginx-app" successfully rolled out
今天主要介紹K8s中的版本升級,這類考題還滿常見的,但是其實不難,步驟指令就是這幾個,忘記了也不要緊,到官網找資料就行了~ 好啦,今天就到這囉,謝謝大家~
Deployments
透過 Kubernetes Deployments 實現滾動升級
更新/回復系統別中斷服務行嗎:Rolling
You can find me on