本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes v1.30 搶先看

快速瀏覽:Kubernetes v1.30 中激動人心的變化

新的一年,新的 Kubernetes 釋出。我們正處於釋出週期的一半,v1.30 版本將帶來一些有趣且激動人心的增強功能。從 Alpha 階段的全新功能,到逐漸穩定的成熟功能,再到期待已久的改進,此版本中有值得每個人關注的內容!

在正式釋出之前,為了讓你提前解渴,我們先來一睹本週期中我們最興奮的增強功能!

Kubernetes v1.30 的主要變化

動態資源分配的結構化引數(KEP-4381

動態資源分配在 v1.26 中作為 Alpha 功能被新增到 Kubernetes 中。它定義了一種替代傳統裝置外掛 API 的方法來請求訪問第三方資源。按照設計,動態資源分配使用的資源引數對於 Kubernetes 核心是完全不透明的。這種方法給叢集自動擴縮器(CA)或任何需要為一組 Pod(例如作業排程器)做決策的高階控制器帶來了問題。它無法模擬隨時間分配或取消分配申領(Claim)的效果。只有第三方 DRA 驅動程式擁有執行此操作所需的資訊。

動態資源分配的結構化引數是對原始實現的一個擴充套件,它透過構建一個框架來支援使這些申領引數變得不那麼不透明,從而解決了這個問題。驅動程式不再需要自己處理所有申領引數的語義,而是可以管理資源並使用 Kubernetes 預定義的特定“結構化模型”來描述它們。這將允許瞭解此“結構化模型”的元件對這些資源做出決策,而無需將其外包給某些第三方控制器。例如,排程器可以快速分配申領,而無需與動態資源分配驅動程式進行來回通訊。此版本的工作重點在於定義啟用不同“結構化模型”所需的框架,並實現“命名資源”模型。該模型允許列出單個資源例項,與傳統的裝置外掛 API 相比,增加了透過屬性單獨選擇這些例項的能力。

節點記憶體交換支援(KEP-2400

在 Kubernetes v1.30 中,Linux 節點上的記憶體交換支援的工作方式發生了重大變化,重點在於提高系統穩定性。在之前的 Kubernetes 版本中,NodeSwap 特性門控預設是停用的,啟用後,它使用 UnlimitedSwap 作為預設行為。為了獲得更好的穩定性,UnlimitedSwap 行為(可能會損害節點穩定性)將在 v1.30 中被移除。

更新後的、仍處於 Beta 階段的 Linux 節點交換支援將預設可用。但是,預設行為是將節點設定為 NoSwap(而不是 UnlimitedSwap)模式。在 NoSwap 模式下,kubelet 支援在交換空間處於活動狀態的節點上執行,但 Pod 不使用任何頁面檔案。你仍然需要為 kubelet 設定 --fail-swap-on=false 才能在該節點上執行。然而,最大的變化是另一種模式:LimitedSwap。在此模式下,kubelet 實際上會使用該節點上的頁面檔案,並允許 Pod 的部分虛擬記憶體被換出。容器(及其父 Pod)不能使用超出其記憶體限制的交換空間,但系統仍然可以在可用時使用交換空間。

Kubernetes 的節點特別興趣小組(SIG Node)也將根據終端使用者、貢獻者和更廣泛的 Kubernetes 社群的反饋,更新文件,以幫助你理解如何使用修訂後的實現。

閱讀之前的部落格文章節點交換文件,瞭解有關 Kubernetes 中 Linux 節點交換支援的更多詳細資訊。

在 Pod 中支援使用者名稱空間(KEP-127

使用者名稱空間是僅限 Linux 的功能,可以更好地隔離 Pod,以防止或減輕多個被評為高/危急等級的 CVE,包括 2024 年 1 月釋出的 CVE-2024-21626。在 Kubernetes 1.30 中,對使用者名稱空間的支援正在遷移到 Beta 版,現在支援帶有和不帶卷的 Pod、自定義 UID/GID 範圍等等!

結構化授權配置(KEP-3221

結構化授權配置的支援正在進入 Beta 階段,並將預設啟用。此功能支援建立包含多個 Webhook 的授權鏈,這些 Webhook 具有明確定義的引數,按特定順序驗證請求,並允許細粒度控制——例如在失敗時明確拒絕。配置檔案方法甚至允許你指定 CEL 規則來在請求分派到 Webhook 之前進行預過濾,幫助你防止不必要的呼叫。當配置檔案被修改時,API 伺服器也會自動重新載入授權鏈。

你必須使用 --authorization-config 命令列引數指定該授權配置的路徑。如果你想繼續使用命令列標誌而不是配置檔案,這些標誌將繼續按原樣工作。要獲得新的授權 Webhook 功能,如多個 Webhook、失敗策略和預過濾規則,請切換到將選項放在 --authorization-config 檔案中。從 Kubernetes 1.30 開始,配置檔案格式為 Beta 級別,由於該特性門控預設啟用,因此只需要指定 --authorization-config。在授權文件中提供了一個包含所有可能值的示例配置。有關更多詳細資訊,請閱讀授權文件

基於容器資源的 Pod 自動擴縮(KEP-1610

基於 ContainerResource 指標的水平 Pod 自動擴縮將在 v1.30 中畢業到穩定版。HorizontalPodAutoscaler 的這一新行為允許你根據單個容器的資源使用情況來配置自動擴縮,而不是基於 Pod 的聚合資源使用情況。請參閱我們之前的文章以獲取更多詳細資訊,或閱讀容器資源指標

用於准入控制的 CEL(KEP-3488

將通用表示式語言(CEL)整合到 Kubernetes 的准入控制中,引入了一種更動態、更具表現力的評估准入請求的方式。此功能允許透過 Kubernetes API 直接定義和實施複雜的、細粒度的策略,從而在不影響效能或靈活性的情況下增強安全和治理能力。

將 CEL 新增到 Kubernetes 准入控制中,使叢集管理員能夠制定複雜的規則,這些規則可以根據叢集的期望狀態和策略來評估 API 請求的內容,而無需藉助基於 Webhook 的訪問控制器。這種級別的控制對於維護叢集操作的完整性、安全性和效率至關重要,使 Kubernetes 環境更加健壯,並能適應各種用例和需求。有關使用 CEL 進行准入控制的更多資訊,請參閱 ValidatingAdmissionPolicy 的 API 文件

我們希望你和我們一樣對這次釋出感到興奮。請留意幾周後釋出的官方部落格,以獲取更多亮點!