第 1 章:生產環境規劃和準備
安裝 Kubernetes 生產環境
生產環境考量
- 可用性:一個單機的 Kubernetes 具有單點失效特性。 建立高可用的叢集需要考慮
- 將 master node 與 worker node 分開
- 在多個節點上提供 Control plane 組件的副本
- 為針對叢集的 API 伺服器 的流量提供負載平衡
- 隨著負載的合理需要,提供足夠的可用的(或能夠迅速變為可用的)工作節點
- 規模:如果預期生產用 Kubernetes 環境要承受固定量的請求, 可以針對所需的容量來一次完成安裝。 不過,如果預期服務請求會隨著時間增長,需要規劃如何處理請求上升時對 Control plane 和工作節點的壓力,或者如何縮減集群規模以減少未使用資源的消耗
- 安全性與存取管理:在你自己的學習環境 Kubernetes 叢集上,你擁有完 全的管理員特權。 但對運行著重要工作負載的共享集群,用戶帳戶不只一兩個時, 就需要更細粒度的方案來確定或哪些主體可以存取集群資源。 你可以使用基於角色的存取控制(RBAC) 和其他安全機制來確保使用者和負載能夠存取所需的資源, 同時確保工作負載及叢集本身仍然是安全的。 你可以透過管理策略和容器資源來針對使用者和工作負載所可存取的資源設定約束
在自行建置 Kubernetes 生產環境之前, 請考慮將此任務的部分或全部交給雲端方案承包服務提供者或其他 Kubernetes 合作夥伴。 選項有:
- 無伺服器服務:僅在第三方設備上運行負載,完全不必管理叢集本身。 你需要為 CPU 用量、記憶體和磁碟請求等付費。
- 託管 Control plane:決定叢集 Control plane 的規模和可用性,並負責打補丁和升級等操作
- 託管 Control plane :配置一個節點池來滿足你的需要,由供應商確保節點始終可用,並在需要的時候完成升級
- 集成:有一些供應商能夠將 Kubernetes 與一些你可能需要的其他服務集成, 這類服務包括存儲、容器鏡像倉庫、身份認證方法以及開發工具等
生產用 Control plane
最簡單的 Kubernetes 叢集中,整個 Control plane 和工作節點服務都運行在同一台機器上。 你可以透過加入工作節點來提升環境運算能力,如 Kubernetes 元件示意圖所示。 如果只需要叢集在很短的一段時間內可用,或者可以在某些事物出現嚴重問題時直接丟棄, 這種配置可能符合你的需要。
如果你需要一個更持久的、高可用的集群,那 麼就需要考慮擴展 Control plane 的方式。 根據設計,運行在一台機器上的單機 Control plane 服務不是高可用的。
- 選擇部署工具:使用類似 kubeadm、kops 和 kubespray 這類工具來部署 Control plane
- 管理憑證:Control plane 服務之間的安全通訊是透過憑證來完成的。 憑證是在部署期間自動產生的
- 為 API 伺服器設定負載平衡:設定負載平衡器來將外部的 API 請求散佈給執行在不同節點上的 API 服務實例
- 分離並備份 etcd 服務:etcd 服務可以運行於其他 Control plane 服務所在的機器上, 也可以運行在不同的機器上以獲得更好的安全性和可用性。 因為 etcd 儲存著叢集的配置數據
- 建立多 Control plane 系統:為了實現高可用性,Control plane不應被限制在一台機器上。 如果Control plane 服務是使用某 init 服務(例如 systemd)來運作的,則每個服務應該至少運作在三台機器上。 不過,將 Control plane 作為服務運行在 Kubernetes Pod 中可以確保你所要求的數量的服務始終保持可用
- 跨多個可用區:如果保持你的叢集一直可用這一點非常重要,可以考慮建立一個跨多個資料中心的叢集; 在雲端環境中,這些資料中心被視為可用區。 若干個可用區在一起可構成地理區域。
- 管理演進中的特性:如果你打算長時間保留你的集群,就需要執行一些維護其健康和安全的任務。 例如,如果你採用 kubeadm 安裝的集群, 則有一些可以幫助你完成 憑證管理 和升級 kubeadm 集群 的指令
生產用工作節點
生產品質的工作負載需要是彈性的;它們所依賴的其他元件(例如 CoreDNS)也需要是彈性的。 無論你是自行管理 Control plane 還是讓雲端供應商來管理,你都需要考慮如何管理工作節點 (有時也簡稱為節點)。
- 配置節點:節點可以是實體機器或虛擬機器。 如果你希望自行建立和管理節點, 你可以安裝一個受支援的作業系統,之後新增並執行適當的節點服務。 考慮:安裝節點時要透過配置適當的記憶體、CPU 和磁碟讀寫速率、儲存容量來滿足你的負載的需求。
- 驗證節點:參閱驗證節點配置以了解如何確保節點滿足加入 Kubernetes 叢集的需求。 將節點新增至集群:如果你自行管理你的集群,你可以透過安裝配置你的機器, 之後或手動加入集群,或者讓它們自動註冊到集群的API 伺服器。 請參閱節點節,了解如何設定 Kubernetes 以便以這些方式來新增節點
- 擴充節點:制定一個擴充叢集容量的規劃,你的叢集最終會需要這項能力。 請參閱大規模叢集考察事項 以確定你所需的節點數; 這一規模是基於你要執行的 Pod 和容器個數來決定的。 如果你自行管理叢集節點,這可能意味著要購買和安裝你自己的實體設備
- 節點自動擴縮容:大多數雲端供應商支援 叢集自動擴縮器(Cluster Autoscaler) 以便取代不健康的節點、根據需求來增加或縮減節點個數。 請參閱常見問題 了解自動擴縮器的工作方式,並參閱 Deployment 以了解不同雲端供應商是如何實作叢集自動擴縮器的。 對於本地集群,有一些虛擬化平台可以透過腳本來控制按需啟動新節點。
- 安裝節點健康檢查:對於重要的工作負載,你會希望確保節點以及在節點上運行的 Pod 處於健康狀態。 透過使用 Node Problem Detector, 你可以確保你的節點是健康的。