天天看點

Rolling Update - 每天5分鐘玩轉 Docker 容器技術(140)

滾動更新是一次隻更新一小部分副本,成功後,再更新更多的副本,最終完成所有副本的更新。滾動更新的最大的好處是零停機,整個更新過程始終有副本在運作,進而保證了業務的連續性。

下面我們部署三副本應用,初始鏡像為 httpd:2.2.31,然後将其更新到 httpd:2.2.32。

httpd:2.2.31 的配置檔案如下:

Rolling Update - 每天5分鐘玩轉 Docker 容器技術(140)

通過 <code>kubectl apply</code> 部署。

Rolling Update - 每天5分鐘玩轉 Docker 容器技術(140)

部署過程如下:

建立 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>。

Rolling Update - 每天5分鐘玩轉 Docker 容器技術(140)

我們發現了如下變化:

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> 檢視。

Rolling Update - 每天5分鐘玩轉 Docker 容器技術(140)

每次隻更新替換一個 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>