Kubernetes 部署策略
找出最適合應用程式的最佳 Kubernetes 推出策略。
認識 Kubernetes 部署選項
不論是要縮短上市時間、建立零停機時間的復原性部署、更快或更常推出應用程式與功能,或是在作業時享有更高的彈性,都需要選擇合適的 Kubernetes 部署來傳遞復原性應用程式與基礎結構。根據您的目標和需求,每個 Kubernetes 部署策略都有個別的優點。
Kubernetes 部署如何運作
在您實作 Kubernetes 部署策略之前,您必須了解 Kubernetes 部署的組成要素,以及這些要素配合運作的方式。
Kubernetes 部署所包含的項目
YAML 檔案
您為 Kubernetes 叢集 Pod 設定所描述的期望狀態,其代表著 Kubernetes 部署的基礎。
Pod
執行應用程式或工作流程所需的容器、共用資源和環境。
ReplicaSet
統一設定的一組 Pod 稱為 ReplicaSet,能針對 Kubernetes 部署確保 YAML 檔案中描述的 Pod 類型和數目能持續執行。如果有 Pod 失敗,就會建立新的 Pod。
Kube-controller-manager
建立新的 Pod 和 ReplicaSets 並更新或移除現有的 Pod 和 ReplicaSet,來將叢集目前的狀態變更至 YAML 中描述的期望狀態。
Kube-scheduler
決定 Pod 和 ReplicaSet 在背景工作節點中的部署方式,以及將流量散發至這些節點的方式。
推出
將叢集從目前的狀態重新設定至期望的狀態,這在大多數案例中均可在不發生停機的情況下達成。
Kubernetes 推出的運作方式
- 建立可描述叢集預期狀態設定的 YAML 檔案。
- 透過 Kubernetes 命令列介面 kubectl 來將 YAML 檔案套用至叢集。
- Kubectl 會將要求提交至 kube-apiserver,其會先對要求進行驗證和授權,再將變更記錄到資料庫或 etcd。
- kube-controller-manager 會持續監視系統是否有新的要求,並透過在程序中建立 ReplicaSet、部署和 Pod,來嘗試將系統狀態協調至期望的狀態。
- 所有控制器均執行完成後,kube-scheduler 會查看是否有任何 Pod 因為尚未排程在節點上執行而處於"「暫止」"狀態。排程器會為 Pod 尋找合適的節點,接著在各節點中透過 kubelet 通訊來接管並開始部署。
Kubernetes 部署使用案例
Create
推出全新的 Kubernetes Pod 和 ReplicaSet。
更新
宣告新的期望狀態,並以受控的方式推出新 Pod 和 ReplicaSet。
復原
將 Kubernetes 部署還原至先前的狀態,這在目前狀態不穩定的情形下很實用。
規模
不需要變更 Pod 或 ReplicaSet,就能在 Kubernetes 部署中增加兩者的數目。
Kubernetes 部署策略
對您案例而言最佳的 Kubernetes 部署策略將取決於許多因素:例如能夠容忍的停機時間 (如果有的話)、部署環境、新版本或平台穩定性的信任度、是否需要測試和希望學習的項目、資源成本和可用性,以及業務目標。以下有組織在生產階段常用的四種部署策略。
斜坡式 (Ramped)
Kubernetes 的預設推出方式為斜坡式或滾動 (Rolling) 部署。這種部署會慢慢地逐一取代 Pod 來避免發生停機。舊的 Pod 只會在新的 Pod 就緒後相應減少。如果部署發生問題,可以暫停或取消 Kubernetes 部署而不需要讓整個叢集離線。
藍色/綠色
在藍色/綠色部署中,您可在目前版本的應用程式或工作流程 (綠) 仍在執行的情況下,推出新的版本 (藍)。這能讓您在生產階段測試藍色版本,同時只需要向使用者公開綠色的穩定版本。測試完成後,藍色版本就會逐漸取代綠色版本。
Canary
向一部分客戶推出新的版本,讓客戶測試您的 Kubernetes 部署。您會同時執行新版本的 ReplicaSet 和目前的版本,如果在指定的期間內沒有發生任何錯誤,就能擴大新版本並移除舊版本。
A/B 測試
A/B 測試與 Canary Kubernetes 部署策略相當相似,策略的目標是特定群組的客戶。不過,A/B 測試部署所尋求的目標並不僅止於版本的穩定性,其也能用來測試達到商務目標的效率。新的版本會根據 Cookie、地理位置、作業系統和裝置類型等因素散發給使用者,且會經常與目前的版本一同執行,繼續相應增加直到新版本能夠應用為止。
Kubernetes 部署工具
您雖然可利用命令列或 YAML 檔案來執行所有 Kubernetes 部署策略,但也能透過實作這些 Kubernetes 部署工具和服務來充分利用叢集與部署。