Kubernetes 1.29:雲端供應商整合現在是獨立組件

對於 Kubernetes v1.29,您需要使用額外的元件來將您的 Kubernetes 叢集與雲端基礎架構供應商整合。預設情況下,如果您嘗試使用任何舊版編譯內建的雲端供應商整合來指定與任何雲端供應商的整合,Kubernetes v1.29 元件會中止。如果您想使用舊版整合,您必須選擇重新加入 - 而未來的版本甚至會移除該選項。

在 2018 年,Kubernetes 社群同意成立雲端供應商特別興趣小組 (SIG),其任務是將所有雲端供應商整合外部化,並移除所有現有的樹狀結構內建雲端供應商整合。在 2019 年 1 月,Kubernetes 社群批准了 KEP-2395:移除樹狀結構內建雲端供應商程式碼 的初始草案。此 KEP 定義了一個流程,我們可以透過該流程從核心 Kubernetes 原始碼樹狀結構中移除雲端供應商特定的程式碼。從 KEP

此舉背後的動機 [原文如此] 是為了讓雲端供應商能夠獨立於核心 Kubernetes 發布週期進行開發和發布。雲端供應商程式碼的解耦允許「Kubernetes 核心」和生態系統中的雲端供應商之間關注點分離。此外,這確保了生態系統中的所有雲端供應商都以一致且可擴展的方式與 Kubernetes 整合。

經過多年來許多貢獻者的開發和協作,舊版雲端供應商整合的預設行為正在改變。這表示使用者將需要確認其 Kubernetes 組態,並且在某些情況下執行外部雲端控制器管理員。這些變更將在 Kubernetes 1.29 版本中生效;請繼續閱讀以了解您是否受到影響以及您需要進行哪些變更。

這些更新的預設設定會影響很大一部分 Kubernetes 使用者,並且將需要變更先前使用樹狀結構內建供應商整合的使用者。舊版整合提供與 Azure、AWS、GCE、OpenStack 和 vSphere 的相容性;然而,對於 AWS 和 OpenStack,編譯內建的整合已分別在 Kubernetes 1.27 和 1.26 版本中移除。

發生了什麼變化?

在最基本的層級上,有兩個功能閘道正在將其預設值從 false 變更為 true。這些功能閘道,DisableCloudProvidersDisableKubeletCloudCredentialProviders,控制 kube-apiserverkube-controller-managerkubelet 調用這些元件中包含的雲端供應商相關程式碼的方式。當這些功能閘道為 true (預設值) 時,--cloud-provider 命令列引數唯一可辨識的值是 external

讓我們看看 官方 Kubernetes 文件 對於這些功能閘道的說明

DisableCloudProviders:停用 kube-apiserverkube-controller-managerkubelet 中與 --cloud-provider 元件旗標相關的任何功能。

DisableKubeletCloudCredentialProviders:停用 kubelet 中用於向雲端供應商容器登錄檔驗證以取得映像檔提取憑證的樹狀結構內建功能。

超越 beta 版的下一個階段將是完全移除;從該版本開始,您將無法將這些功能閘道覆寫回 false。

您需要做什麼?

如果您是從 Kubernetes 1.28+ 升級,且未使用 Azure、GCE 或 vSphere,則您無需進行任何變更。如果您使用 Azure、GCE 或 vSphere,或者您是從低於 1.28 的版本升級,請繼續閱讀。

從歷史上看,Kubernetes 包含了針對一組雲端供應商 (包括 AWS、Azure、GCE、OpenStack 和 vSphere) 的程式碼。自 KEP-2395 啟動以來,社群一直朝著移除該雲端供應商程式碼的方向發展。OpenStack 供應商程式碼已在 1.26 版本中移除,而 AWS 供應商程式碼已在 1.27 版本中移除。這表示從受影響的雲端供應商和版本之一升級的使用者將需要修改其部署。

在 Azure、GCE 或 vSphere 上升級

在此組態中有兩個升級選項:遷移至外部雲端控制器管理員,或繼續使用樹狀結構內建供應商程式碼。雖然建議遷移至外部雲端控制器管理員,但在某些情況下,仍希望繼續使用目前的行為。請為您的需求選擇最佳選項。

遷移至外部雲端控制器管理員

在您的情況允許時,遷移至使用外部雲端控制器管理員是建議的升級路徑。若要執行此操作,您需要為 kube-apiserverkube-controller-managerkubelet 元件啟用 --cloud-provider=external 命令列旗標。此外,您需要為您的供應商部署雲端控制器管理員。

安裝和執行雲端控制器管理員是一個比本文可以涵蓋的更大的主題;如果您想了解有關此流程的更多資訊,請閱讀 雲端控制器管理員管理遷移複寫的控制平面以使用雲端控制器管理員 的文件。請參閱下方的 雲端供應商整合 以取得特定雲端供應商實作的連結。

繼續使用樹狀結構內建供應商程式碼

如果您希望繼續將 Kubernetes 與樹狀結構內建雲端供應商程式碼搭配使用,您將需要修改 kube-apiserverkube-controller-managerkubelet 的命令列參數,以停用 DisableCloudProvidersDisableKubeletCloudCredentialProviders 的功能閘道。若要執行此操作,請將以下命令列旗標新增至先前列出的命令的引數

--feature-gates=DisableCloudProviders=false,DisableKubeletCloudCredentialProviders=false

請注意,如果您的命令列上有其他功能閘道修改,則它們將需要包含這 2 個功能閘道。

注意:這些功能閘道將在即將發布的版本中鎖定為 true。應將這些功能閘道設定為 false 作為最後手段。強烈建議遷移至外部雲端控制器管理員,因為樹狀結構內建供應商計劃最早在 Kubernetes 1.31 版本中移除。

在其他供應商上升級

對於 Azure、GCE 或 vSphere 以外的供應商,好消息是,外部雲端控制器管理員應已在使用中。您可以透過檢查叢集中 kubelet 的 --cloud-provider 旗標來確認這一點,如果使用外部供應商,它們將具有值 external。AWS 和 OpenStack 供應商的程式碼在 1.27 版本發布之前已從 Kubernetes 中移除。AWS、Azure、GCE、OpenStack 和 vSphere 以外的其他供應商從未包含在 Kubernetes 中,因此它們從一開始就是外部雲端控制器管理員。

從較舊的 Kubernetes 版本升級

如果您是從低於 1.26 的 Kubernetes 版本升級,並且您是使用 AWS、Azure、GCE、OpenStack 或 vSphere,則您將需要啟用 --cloud-provider=external 旗標,並遵循安裝和執行適用於您的供應商的雲端控制器管理員的建議。

請閱讀 雲端控制器管理員管理遷移複寫的控制平面以使用雲端控制器管理員 的文件。請參閱下方以取得特定雲端供應商實作的連結。

在哪裡可以找到雲端控制器管理員?

從核心上來說,此公告是關於先前包含在 Kubernetes 中的雲端供應商整合。由於這些元件移出核心 Kubernetes 程式碼並進入其自己的儲存庫,因此務必注意以下幾點

首先,SIG Cloud Provider 為希望為任何供應商建立雲端控制器管理員的開發人員提供參考框架。請參閱 cloud-provider 儲存庫,以取得有關這些控制器如何運作以及如何開始建立您自己的控制器的更多資訊。

其次,有許多適用於 Kubernetes 的雲端控制器管理員。本文討論的是歷史上包含在 Kubernetes 中但現在正在移除過程中的供應商整合。如果您需要適用於您的供應商的雲端控制器管理員,但在此處沒有看到列出,請聯絡您正在整合的雲端供應商或 Kubernetes SIG Cloud Provider 社群 以尋求協助和建議。值得注意的是,雖然大多數雲端控制器管理員目前都是開放原始碼,但情況可能並非總是如此。使用者應始終聯絡其雲端供應商,以了解是否有在他們的基礎架構上使用的首選解決方案。

Kubernetes 專案提供的雲端供應商整合

如果您正在尋找自動化方法在您的叢集中安裝雲端控制器管理員,則 kOps 專案提供了一個方便的解決方案來管理生產就緒的叢集。

想要了解更多資訊嗎?

雲端供應商和雲端控制器管理員在 Kubernetes 中發揮核心功能。雲端供應商通常是 Kubernetes 運作的基礎,而雲端控制器管理員則提供 Kubernetes 叢集與其物理基礎架構之間的基本生命線。

本文涵蓋了 Kubernetes 社群如何與雲端基礎架構供應商世界互動的一個面向。如果您對此主題感到好奇並想了解更多資訊,雲端供應商特別興趣小組 (SIG) 是您的最佳去處。SIG Cloud Provider 每週舉行兩次會議,討論與 Kubernetes 中的雲端供應商和雲端控制器管理員相關的所有主題。

SIG Cloud Provider