滾動更新是一次隻更新一小部分副本,成功後,再更新更多的副本,最終完成所有副本的更新。滾動更新的最大的好處是零停機,整個更新過程始終有副本在運作,進而保證了業務的連續性。
下面我們部署三副本應用,初始鏡像為 httpd:2.2.31,然後将其更新到 httpd:2.2.32。
httpd:2.2.31 的配置檔案如下:
通過 <code>kubectl apply</code> 部署。
部署過程如下:
建立 Deployment <code>httpd</code>
建立 ReplicaSet <code>httpd-551879778</code>
建立三個 Pod
目前鏡像為 <code>httpd:2.2.31</code>
将配置檔案中 <code>httpd:2.2.31</code> 替換為 <code>httpd:2.2.32</code>,再次執行 <code>kubectl apply</code>。
我們發現了如下變化:
Deployment <code>httpd</code> 的鏡像更新為 <code>httpd:2.2.32</code>
新建立了 ReplicaSet <code>httpd-1276601241</code>,鏡像為 <code>httpd:2.2.32</code>,并且管理了三個新的 Pod。
之前的 ReplicaSet <code>httpd-551879778</code> 裡面已經沒有任何 Pod。
結論是:ReplicaSet <code>httpd-551879778</code> 的三個 <code>httpd:2.2.31</code> Pod 已經被 ReplicaSet <code>httpd-1276601241</code> 的三個 <code>httpd:2.2.32</code> Pod 替換了。
具體過程可以通過 <code>kubectl describe deployment httpd</code> 檢視。
每次隻更新替換一個 Pod:
ReplicaSet <code>httpd-1276601241</code> 增加一個 Pod,總數為 1。
ReplicaSet <code>httpd-551879778</code> 減少一個 Pod,總數為 2。
ReplicaSet <code>httpd-1276601241</code> 增加一個 Pod,總數為 2。
ReplicaSet <code>httpd-551879778</code> 減少一個 Pod,總數為 1。
ReplicaSet <code>httpd-1276601241</code> 增加一個 Pod,總數為 3。
ReplicaSet <code>httpd-551879778</code> 減少一個 Pod,總數為 0。
每次替換的 Pod 數量是可以定制的。Kubernetes 提供了兩個參數 <code>maxSurge</code> 和 <code>maxUnavailable</code> 來精細控制 Pod 的替換數量,我們将在後面結合 Health Check 特性一起讨論。
下一節我們讨論如何復原。
書籍:
1.《每天5分鐘玩轉Docker容器技術》
<a href="https://item.jd.com/16936307278.html" target="_blank">https://item.jd.com/16936307278.html</a>
2.《每天5分鐘玩轉OpenStack》
<a href="https://item.jd.com/12086376.html" target="_blank">https://item.jd.com/12086376.html</a>