k8s的Rolling Update(滾動更新)
滾動更新是一次只更新一小部分副本,成功後,再更新更多的副本,最終完成所有副本的更新。滾動更新的最大的好處是零停機,整個更新過程始終有副本在執行,從而保證了業務的連續性。
下面我們部署三副本應用:
初始映象為 httpd:2.2.31,然後將其更新到 httpd:2.2.32。
httpd:2.2.31 的配置檔案如下:
執行部署
部署過程如下:
-
建立 Deployment
httpd
-
建立 ReplicaSet httpd-5c44c97cb5 建立三個 Pod
-
當前映象為
httpd:2.2.31
將配置檔案中 httpd:2.2.31
替換為 httpd:2.2.32
,再次執行 kubectl apply
。
當前有4個pod,3個可用 1個pod已經更新。一段時間後全部更新完畢,前後有一樣是不變的 就是可用pod的數量一直維持為3個。
我們發現瞭如下變化:
-
Deployment
httpd
的映象更新為httpd:2.2.32
-
新建立了 ReplicaSet httpd-596db6fdc4,映象為
httpd:2.2.32
,並且管理了三個新的 Pod。 -
之前的 ReplicaSet httpd-5c44c97cb5 裡面已經沒有任何 Pod。
結論是:ReplicaSet httpd-5c44c97cb5 的三個 httpd:2.2.31
Pod 已經被ReplicaSet httpd-596db6fdc4 的三個 httpd:2.2.32
Pod 替換了。
具體過程可以通過 kubectl describe deployment httpd
檢視。
每次只更新替換一個 Pod:
每次只更新替換一個 Pod:
-
ReplicaSet httpd-596db6fdc4增加一個 Pod,總數為 1。
-
ReplicaSet httpd-5c44c97cb5 減少一個 Pod,總數為 2。
-
ReplicaSet httpd-596db6fdc4 增加一個 Pod,總數為 2。
-
ReplicaSet httpd-5c44c97cb5 減少一個 Pod,總數為 1。
-
ReplicaSet httpd-596db6fdc4 增加一個 Pod, 總數為 3。
-
ReplicaSet httpd-5c44c97cb5 減少一個 Pod,總數為 0。
每次替換的 Pod 數量是可以定製的。Kubernetes 提供了兩個引數 maxSurge
和 maxUnavailable
來精細控制 Pod 的替換數量。