生產環境
生產品質的 Kubernetes 叢集需要規劃和準備。如果您的 Kubernetes 叢集要執行關鍵工作負載,則必須將其配置為具有彈性。此頁面說明您可以採取哪些步驟來設定生產就緒的叢集,或將現有叢集升級以供生產使用。如果您已經熟悉生產設定並想要連結,請跳至下一步。
生產考量
通常,生產 Kubernetes 叢集環境比個人學習、開發或測試環境 Kubernetes 有更多要求。生產環境可能需要許多使用者安全存取、一致的可用性以及適應不斷變化的需求的資源。
當您決定希望生產 Kubernetes 環境在哪裡 (在本機部署或在雲端) 以及想要承擔或交給他人的管理量時,請考量以下問題如何影響您對 Kubernetes 叢集的需求
可用性:單機 Kubernetes 學習環境具有單點故障。建立高可用性叢集表示需要考量
- 將控制平面與工作節點分離。
- 在多個節點上複製控制平面元件。
- 將流量負載平衡到叢集的API 伺服器。
- 擁有足夠的工作節點可用,或能夠快速變得可用,以因應不斷變化的工作負載。
規模:如果您預期生產 Kubernetes 環境會收到穩定的需求量,您或許可以設定您需要的容量即可完成。但是,如果您預期需求會隨著時間增長或根據季節或特殊事件等因素而發生巨大變化,則需要規劃如何擴展以減輕來自控制平面和工作節點更多請求的增加壓力,或縮減以減少未使用的資源。
安全性和存取管理:您在自己的 Kubernetes 學習叢集上擁有完整管理員權限。但是,具有重要工作負載且有多個使用者的共用叢集,需要對誰以及什麼可以存取叢集資源採取更精細的方法。您可以使用基於角色的存取控制 (RBAC) 和其他安全機制,以確保使用者和工作負載可以存取他們需要的資源,同時保持工作負載和叢集本身的安全。您可以透過管理政策和容器資源來設定使用者和工作負載可以存取的資源限制。
在您自行建立 Kubernetes 生產環境之前,請考慮將部分或全部工作交給Turnkey Cloud Solutions供應商或其他Kubernetes 合作夥伴。選項包括
- 無伺服器:只需在協力廠商設備上執行工作負載,而無需管理叢集。您將需要為 CPU 使用率、記憶體和磁碟請求等項目付費。
- 託管控制平面:讓供應商管理叢集控制平面的規模和可用性,以及處理修補程式和升級。
- 託管工作節點:配置節點池以滿足您的需求,然後供應商確保這些節點可用並準備好在需要時實作升級。
- 整合:有些供應商將 Kubernetes 與您可能需要的其他服務整合,例如儲存、容器登錄檔、身分驗證方法和開發工具。
無論您是自行建立生產 Kubernetes 叢集還是與合作夥伴合作,請檢閱以下章節,以評估您與叢集控制平面、工作節點、使用者存取和工作負載資源相關的需求。
生產叢集設定
在生產品質的 Kubernetes 叢集中,控制平面從可以分佈在不同電腦中的服務管理叢集。但是,每個工作節點都代表一個配置為執行 Kubernetes Pod 的單一實體。
生產控制平面
最簡單的 Kubernetes 叢集在同一部機器上執行整個控制平面和工作節點服務。您可以透過新增工作節點來擴展該環境,如Kubernetes 元件中所示的圖表所示。如果叢集旨在短時間內可用,或者如果出現嚴重問題可以捨棄,則這可能會滿足您的需求。
但是,如果您需要更永久、高可用性的叢集,則應考慮擴展控制平面的方法。依照設計,在單一機器上執行的單機控制平面服務不具有高可用性。如果保持叢集正常執行並確保在出現問題時可以修復叢集很重要,請考慮以下步驟
- 選擇部署工具:您可以使用 kubeadm、kops 和 kubespray 等工具部署控制平面。請參閱使用部署工具安裝 Kubernetes,以了解使用這些部署方法進行生產品質部署的秘訣。不同的容器執行期可用於您的部署。
- 管理憑證:控制平面服務之間的安全通訊是使用憑證實作的。憑證會在部署期間自動產生,或者您可以使用自己的憑證授權單位產生憑證。請參閱PKI 憑證與需求以取得詳細資訊。
- 為 apiserver 設定負載平衡器:設定負載平衡器,將外部 API 請求分配到不同節點上執行的 apiserver 服務實例。請參閱建立外部負載平衡器以取得詳細資訊。
- 分離和備份 etcd 服務:etcd 服務可以與其他控制平面服務在相同的機器上執行,也可以在不同的機器上執行,以獲得額外的安全性和可用性。由於 etcd 儲存叢集組態資料,因此應定期備份 etcd 資料庫,以確保您可以在需要時修復該資料庫。請參閱etcd 常見問題解答以取得有關設定和使用 etcd 的詳細資訊。請參閱為 Kubernetes 運作 etcd 叢集和使用 kubeadm 設定高可用性 etcd 叢集以取得詳細資訊。
- 建立多個控制平面系統:為了實現高可用性,控制平面不應僅限於單一機器。如果控制平面服務由 init 服務(例如 systemd)執行,則每個服務應至少在三台機器上執行。但是,將控制平面服務作為 Pod 在 Kubernetes 中執行可確保您請求的服務副本數量始終可用。排程器應具備容錯能力,但不必是高可用性的。某些部署工具設定 Raft 共識演算法來執行 Kubernetes 服務的領導者選舉。如果主要服務消失,另一個服務會自行選出並接管。
- 跨越多個區域:如果保持叢集隨時可用至關重要,請考慮建立一個跨越多個資料中心的叢集,在雲端環境中稱為區域。區域群組稱為地區。透過將叢集分散在同一地區的多個區域中,即使一個區域變得不可用,也可以提高叢集繼續運作的可能性。請參閱在多個區域中執行以取得詳細資訊。
- 管理持續進行的功能:如果您計劃長期維護叢集,則需要執行一些任務來維護其健康和安全性。例如,如果您使用 kubeadm 安裝,則有說明可協助您進行憑證管理和升級 kubeadm 叢集。請參閱管理叢集以取得更長的 Kubernetes 管理任務列表。
若要了解執行控制平面服務時可用的選項,請參閱 kube-apiserver、kube-controller-manager 和 kube-scheduler 组件页面。如需高可用性控制平面範例,請參閱 高可用性拓撲選項、使用 kubeadm 建立高可用性叢集 和 為 Kubernetes 運作 etcd 叢集。請參閱 備份 etcd 叢集,以取得有關制定 etcd 備份計畫的資訊。
生產環境工作節點
生產品質的工作負載需要具備彈性,並且它們所依賴的任何事物(例如 CoreDNS)也需要具備彈性。無論您是管理自己的控制平面,還是由雲端供應商為您執行此操作,您仍然需要考慮如何管理您的工作節點(也簡稱為節點)。
- 設定節點:節點可以是實體或虛擬機器。如果您想建立和管理自己的節點,您可以安裝支援的作業系統,然後新增並執行適當的節點服務。請考慮
- 當您設定節點時,工作負載的需求,方法是提供適當的記憶體、CPU 以及磁碟速度和儲存容量。
- 通用電腦系統是否適用,或者您的工作負載是否需要 GPU 處理器、Windows 節點或 VM 隔離。
- 驗證節點:請參閱驗證節點設定,以取得有關如何確保節點符合加入 Kubernetes 叢集的要求的資訊。
- 將節點新增至叢集:如果您管理自己的叢集,您可以透過設定自己的機器並手動新增它們,或讓它們自行向叢集的 apiserver 註冊來新增節點。請參閱節點章節,以取得有關如何設定 Kubernetes 以透過這些方式新增節點的資訊。
- 擴展節點:制定擴展叢集最終所需容量的計畫。請參閱大型叢集的考量事項,以協助根據您需要執行的 Pod 和容器數量來判斷您需要的節點數量。如果您自行管理節點,這可能表示購買和安裝您自己的實體設備。
- 自動擴展節點:請閱讀叢集自動擴展,以了解可用於自動管理節點及其提供的容量的工具。
- 設定節點健康檢查:對於重要的工作負載,您需要確保節點和在這些節點上執行的 Pod 是健康的。使用 節點問題偵測器 常駐程式,您可以確保節點的健康狀態。
生產環境使用者管理
在生產環境中,您可能會從您或一小群人存取叢集的模型,轉變為可能有數十甚至數百人存取叢集的模型。在學習環境或平台原型中,您可能有一個單一的管理員帳戶來執行所有操作。在生產環境中,您會需要更多具有不同存取層級的帳戶來存取不同的命名空間。
採用生產品質的叢集意味著決定您要如何選擇性地允許其他使用者存取。特別是,您需要選擇策略來驗證嘗試存取您叢集的人員身分(身分驗證),並決定他們是否具有執行其要求操作的權限(授權)。
- 身分驗證:apiserver 可以使用用戶端憑證、持有者權杖、身分驗證 Proxy 或 HTTP 基本身分驗證來驗證使用者身分。您可以選擇要使用的身分驗證方法。透過外掛程式,apiserver 可以利用您組織現有的身分驗證方法,例如 LDAP 或 Kerberos。請參閱身分驗證以取得這些不同 Kubernetes 使用者身分驗證方法的說明。
- 授權:當您開始授權一般使用者時,您可能會在 RBAC 和 ABAC 授權之間做出選擇。請參閱授權概觀,以檢閱授權使用者帳戶(以及服務帳戶對叢集的存取權)的不同模式。
- 基於角色的存取控制 (RBAC):讓您可以透過允許特定使用者組對已通過身分驗證的使用者進行存取,來指派對叢集的存取權。可以為特定命名空間 (Role) 或整個叢集 (ClusterRole) 指派權限。然後,使用 RoleBinding 和 ClusterRoleBinding,可以將這些權限附加到特定使用者。
- 基於屬性的存取控制 (ABAC):讓您可以根據叢集中的資源屬性建立原則,並根據這些屬性允許或拒絕存取。原則檔案的每一行都識別版本控制屬性(apiVersion 和 kind)以及 spec 屬性的對應,以比對主體(使用者或群組)、資源屬性、非資源屬性(/version 或 /apis)和唯讀。請參閱範例以取得詳細資訊。
作為在生產環境 Kubernetes 叢集上設定身分驗證和授權的人員,以下是一些需要考量的事項
- 設定授權模式:當 Kubernetes API 伺服器 (kube-apiserver) 啟動時,必須使用 --authorization-config 檔案或 --authorization-mode 標記設定支援的授權模式。例如,kube-adminserver.yaml 檔案(位於 /etc/kubernetes/manifests 中)中的標記可以設定為 Node,RBAC。這將允許對已通過身分驗證的請求進行節點和 RBAC 授權。
- 建立使用者憑證和角色繫結 (RBAC):如果您使用 RBAC 授權,使用者可以建立 CertificateSigningRequest (CSR),該 CSR 可以由叢集 CA 簽署。然後,您可以將角色和 ClusterRole 繫結到每個使用者。請參閱憑證簽署請求以取得詳細資訊。
- 建立結合屬性的原則 (ABAC):如果您使用 ABAC 授權,您可以指派屬性組合以形成原則,以授權選定的使用者或群組存取特定資源(例如 Pod)、命名空間或 apiGroup。如需更多資訊,請參閱範例。
- 考量許可控制器:透過 API 伺服器傳入的請求的其他授權形式包括Webhook 權杖身分驗證。Webhook 和其他特殊授權類型需要透過將許可控制器新增至 API 伺服器來啟用。
設定工作負載資源限制
來自生產環境工作負載的需求可能會對 Kubernetes 控制平面內部和外部造成壓力。在設定叢集工作負載需求時,請考量以下項目
- 設定命名空間限制:設定每個命名空間的配額,例如記憶體和 CPU。請參閱管理記憶體、CPU 和 API 資源以取得詳細資訊。您也可以設定階層式命名空間以繼承限制。
- 為 DNS 需求做好準備:如果您預期工作負載會大規模擴展,您的 DNS 服務必須準備好也進行擴展。請參閱自動擴展叢集中的 DNS 服務。
- 建立額外的服務帳戶:使用者帳戶決定使用者可以在叢集上執行的操作,而服務帳戶定義特定命名空間內的 Pod 存取權。依預設,Pod 會採用其命名空間中的預設服務帳戶。請參閱管理服務帳戶以取得有關建立新服務帳戶的資訊。例如,您可能想要
- 新增 Pod 可以用來從特定容器登錄檔提取映像檔的密鑰。請參閱為 Pod 設定服務帳戶以取得範例。
- 將 RBAC 權限指派給服務帳戶。請參閱ServiceAccount 權限以取得詳細資訊。