簡體   English   中英

如何更新在 kubernetes 中運行的一組 pod?

[英]How to update a set of pods running in kubernetes?

更新由 kubernetes 集群中的復制控制器控制的一組 pod(例如,在進行代碼更改並將底層 docker 鏡像推送到 docker hub 之后)的首選方式是什么?

我可以看到兩種方式:

  1. 手動刪除和重新創建復制控制器
  2. 使用kubectl rolling-update

通過rolling-update我必須更改復制控制器名稱。 由於我將復制控制器定義存儲在 YAML 文件中而不是手動生成,因此必須更改文件以推出代碼更新似乎會帶來壞習慣,例如在復制控制器的 2 個名稱(例如控制器 A 和控制器 B)之間交替避免名稱沖突。

什么是更好的方法?

更新: kubectl rolling-update已被棄用,替換命令為kubectl rollout 另請注意,由於我寫了原始答案,因此已添加部署資源,並且是比 ReplicaSets 更好的選擇,因為滾動更新是在服務器端而不是由客戶端執行的。


您應該使用kubectl rolling-update 我們最近添加了一個功能來執行“簡單滾動更新”,該功能將更新復制控制器中的圖像而無需重命名。 這是kubectl help rolling-update輸出中顯示的最后一個示例:

// Update the pods of frontend by just changing the image, and keeping the old name
$ kubectl rolling-update frontend --image=image:v2

此命令還支持恢復——如果您取消更新並稍后重新啟動,它將從停止的地方恢復。 盡管它在幕后創建了一個新的復制控制器,但在更新結束時,新的復制控制器采用舊復制控制器的名稱,因此它看起來是純粹的更新,而不是切換到一個全新的復制控制器。

到目前為止,我發現的最佳選擇是Skaffold ,它會自動構建映像,將其推送到映像注冊表並更新相應的 pod/控制器。 它甚至可以監視代碼更改並在使用skaffold dev命令保存更改后立即重建映像。 這只需要添加一個簡單的skaffold.yaml來指定注冊表上的圖像和 Kubernetes 清單的路徑。 入門指南中詳細介紹了此工作流程。

The following explanations are from Kubernetes In Action s book

手動刪除和重新創建復制控制器

手動進行滾動更新既laboriouserror-prone 根據副本的數量,您需要以正確的順序運行十幾個或更多的命令來執行更新過程。 幸運的是,Kubernetes 允許您使用單個命令執行滾動更新。

使用 kubectl滾動更新

您可以讓 kubectl 執行它們,而不是手動使用 ReplicationControllers 執行滾動更新。 使用 kubectl 執行更新使過程變得更容易,但是,這現在是一種過時的應用程序更新方式。

為什么執行這樣的更新不如預期的好是因為它是必要的 Kubernetes 如何讓你告訴它系統的期望狀態,並讓 Kubernetes 通過找出最好的方法來實現它自己的狀態。

使用部署以聲明方式更新應用程序--最佳替代方案--

Deployment 是一種更高級別的資源,用於部署應用程序並以聲明方式更新它們,而不是通過 ReplicationController 或 ReplicaSet 來完成,這兩者都被認為是較低級別的概念。

在此處輸入圖片說明

使用 Deployment 而不是較低級別的構造可以更輕松地更新應用程序,因為您通過單個 Deployment 資源定義所需的狀態,並讓 Kubernetes 處理其余的事情。

還有一件事,回滾部署是可能的,因為部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM