滾動更新是一次只更新一小部分副本,成功後,再更新更多的副本,最終完成所有副本的更新。滾動更新的最大的好處是零停機,整個更新過程始終有副本在運行,從而保證了業務的連續性。
下面我們部署三副本應用,初始鏡像爲 httpd:2.2.31,然後將其更新到 httpd:2.2.32。
httpd:2.2.31 的配置文件如下:
通過 kubectl
apply
部署。
部署過程如下:
-
創建 Deployment
httpd
-
創建 ReplicaSet
httpd-551879778
-
創建三個 Pod
-
當前鏡像爲
httpd:2.2.31
將配置文件中 httpd:2.2.31
替換爲 httpd:2.2.32
,再次執行 kubectl
apply
。
我們發現瞭如下變化:
-
Deployment
httpd
的鏡像更新爲httpd:2.2.32
-
新創建了 ReplicaSet
httpd-1276601241
,鏡像爲httpd:2.2.32
,並且管理了三個新的 Pod。 -
之前的 ReplicaSet
httpd-551879778
裏面已經沒有任何 Pod。
結論是:ReplicaSet httpd-551879778
的三個 httpd:2.2.31
Pod
已經被 ReplicaSet httpd-1276601241
的三個 httpd:2.2.32
Pod
替換了。
具體過程可以通過 kubectl
describe deployment httpd
查看。
每次只更新替換一個 Pod:
-
ReplicaSet
httpd-1276601241
增加一個 Pod,總數爲 1。 -
ReplicaSet
httpd-551879778
減少一個 Pod,總數爲 2。 -
ReplicaSet
httpd-1276601241
增加一個 Pod,總數爲 2。 -
ReplicaSet
httpd-551879778
減少一個 Pod,總數爲 1。 -
ReplicaSet
httpd-1276601241
增加一個 Pod,總數爲 3。 -
ReplicaSet
httpd-551879778
減少一個 Pod,總數爲 0。
每次替換的 Pod 數量是可以定製的。Kubernetes 提供了兩個參數 maxSurge
和 maxUnavailable
來精細控制
Pod 的替換數量,我們將在後面結合 Health Check 特性一起討論。
下一節我們討論如何回滾。
書籍:
1.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
2.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html