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

Kubernetes v1.30: Uwubernetes

編輯: Amit Dsouza、Frederick Kautz、Kristin Martin、Abigail McCarthy、Natali Vlatko

宣佈 Kubernetes v1.30 釋出:Uwubernetes,最可愛的版本!

與之前的版本類似,Kubernetes v1.30 的釋出引入了新的穩定、Beta 和 Alpha 功能。持續交付高質量的版本突顯了我們開發週期的強大以及社群的鼎力支援。

此版本包含 45 項增強功能。在這些增強功能中,17 項已畢業為穩定版,18 項進入 Beta 階段,10 項畢業為 Alpha 階段。

Kubernetes v1.30:Uwubernetes

Kubernetes v1.30 讓你的叢集更可愛!

Kubernetes 由來自世界各地、各行各業的數千人構建和釋出。大多數貢獻者並不是為此獲得報酬的;我們構建它,或是出於樂趣,或是為了解決問題,或是為了學習新知,或是純粹出於對社群的熱愛。我們中的許多人在這裡找到了歸屬、朋友和事業。釋出團隊很榮幸能成為 Kubernetes 持續發展的一部分。

為了那些構建它的人,為了那些釋出它的人,也為了那些讓我們的所有叢集保持線上的獸迷(furries),我們向您呈現 Kubernetes v1.30:Uwubernetes,迄今為止最可愛的版本。這個名字是“kubernetes”和“UwU”的合成詞,UwU 是一個用來表示開心或可愛的表情符號。我們在這裡找到了快樂,也從我們的外部生活中帶來了快樂,這有助於使這個社群像它一樣奇特、精彩和熱情。我們很高興與您分享我們的工作。

UwU ♥️

在 Kubernetes v1.30 中畢業為穩定的改進

以下是 v1.30 釋出後一些已進入穩定階段的改進的精選。

kubelet 重啟後穩健的 VolumeManager 重建(SIG Storage

這是一個卷管理器重構,允許 kubelet 在啟動期間填充有關現有卷如何掛載的附加資訊。總的來說,這使得 kubelet 重啟或機器重啟後的卷清理更加穩健。

這不會給使用者或叢集管理員帶來任何變化。我們使用了特性流程和特性門控 NewVolumeManagerReconstruction,以便在出現問題時能夠回退到以前的行為。現在該特性已穩定,特性門控已被鎖定,無法停用。

防止在卷恢復期間未經授權的卷模式轉換(SIG Storage

對於 Kubernetes v1.30,控制平面在將快照恢復到 PersistentVolume 時始終防止未經授權地更改卷模式。作為叢集管理員,如果你需要在恢復時允許這種更改,你需要向適當的身份主體(例如:代表儲存整合的 ServiceAccounts)授予許可權。

有關此功能的更多資訊,另請參閱轉換快照的卷模式

Pod 排程就緒(SIG Scheduling

Pod 排程就緒在本版本中畢業為穩定版,此前在 Kubernetes v1.27 中提升為 Beta 版。

這個現已穩定的功能讓 Kubernetes 能夠避免嘗試排程一個已定義但叢集尚未配置好資源以允許將該 Pod 實際繫結到節點的 Pod。這並非唯一的用例;對 Pod 是否可以被允許排程的自定義控制還允許你實現配額機制、安全控制等。

至關重要的是,將這些 Pod 標記為免於排程,可以減少排程器本會做的工作,即不斷處理那些無法或不會排程到叢集當前節點的 Pod。如果你激活了叢集自動擴縮,使用排程門控不僅可以減少排程器的負載,還可以節省成本。沒有排程門控,自動擴縮器可能會啟動一個本不需要啟動的節點。

在 Kubernetes v1.30 中,透過指定(或移除)Pod 的 .spec.schedulingGates,你可以控制 Pod 何時準備好被考慮進行排程。這是一個穩定的特性,現在已正式成為 Pod 的 Kubernetes API 定義的一部分。

PodTopologySpread 中的最小域(SIG Scheduling

PodTopologySpread 約束的 minDomains 引數在本版本中畢業為穩定版,它允許你定義最小域數。此功能設計用於與叢集自動擴縮器(Cluster Autoscaler)一起使用。

如果你之前嘗試使用但沒有足夠的域存在,Pod 會被標記為不可排程。然後,叢集自動擴縮器會在新的域中配置節點,你最終會得到分佈在足夠多域上的 Pod。

k/k 的 Go 工作空間(SIG Architecture

Kubernetes 倉庫現在使用 Go 工作空間。這應該不會對終端使用者產生任何影響,但對下游專案的開發者有影響。切換到工作空間導致了各種 k8s.io/code-generator 工具的標誌出現了一些破壞性變化。下游消費者應檢視 staging/src/k8s.io/code-generator/kube_codegen.sh 來了解這些變化。

有關更改的完整細節以及引入 Go 工作空間的原因,請閱讀在 Kubernetes 中使用 Go 工作空間

在 Kubernetes v1.30 中畢業為 Beta 的改進

以下是 v1.30 釋出後一些已進入 Beta 階段的改進的精選。

節點日誌查詢(SIG Windows

為了幫助除錯節點上的問題,Kubernetes v1.27 引入了一項功能,允許獲取節點上執行的服務的日誌。要使用此功能,請確保該節點的 NodeLogQuery 特性門控已啟用,並且 kubelet 配置選項 enableSystemLogHandlerenableSystemLogQuery 都設定為 true。

在 v1.30 釋出後,此功能現在是 Beta 版(不過,你仍然需要啟用該功能才能使用它)。

在 Linux 上,假設服務日誌可透過 journald 獲取。在 Windows 上,假設服務日誌在應用程式日誌提供程式中可用。也可以透過讀取 /var/log/ (Linux) 或 C:\var\log\ (Windows) 內的檔案來獲取日誌。更多資訊,請參閱日誌查詢文件。

CRD 驗證棘輪機制(SIG API Machinery

你需要啟用 CRDValidationRatcheting 特性門控才能使用此行為,該行為隨後將應用於叢集中的所有 CustomResourceDefinition。

只要你啟用了該特性門控,Kubernetes 就會為 CustomResourceDefinition 實現*驗證棘輪機制*。API 伺服器願意接受更新後無效的資源更新,前提是資源中每個驗證失敗的部分在更新操作中都沒有被更改。換句話說,任何仍然無效的資源無效部分必須是之前就已經錯誤的。你不能使用此機制將一個有效的資源更新為無效。

此功能允許 CRD 的作者在某些條件下自信地向 OpenAPIV3 模式新增新的驗證。使用者可以安全地更新到新模式,而無需提升物件的版本或破壞工作流程。

上下文日誌(SIG Instrumentation

上下文日誌記錄在本版本中進入 Beta 階段,使開發人員和運維人員能夠透過 WithValuesWithName 將可定製、可關聯的上下文細節(如服務名稱和事務 ID)注入到日誌中。此增強功能簡化了跨分散式系統日誌資料的關聯和分析,顯著提高了故障排查的效率。透過提供對 Kubernetes 環境執行情況的更清晰洞察,上下文日誌記錄確保了運維挑戰更易於管理,標誌著 Kubernetes 可觀測性的顯著進步。

讓 Kubernetes 瞭解 LoadBalancer 行為(SIG Network

LoadBalancerIPMode 特性門控現在是 Beta 版,並且預設啟用。此功能允許你為型別為 LoadBalancer 的 Service 設定 .status.loadBalancer.ingress.ipMode.status.loadBalancer.ingress.ipMode 指定了負載均衡器 IP 的行為方式。它只能在 .status.loadBalancer.ingress.ip 欄位也被指定時指定。有關指定負載均衡器狀態的 IPMode 的更多詳細資訊。

結構化身份驗證配置(SIG Auth

結構化身份驗證配置在本版本中畢業為 Beta 版。

Kubernetes 長期以來一直需要一個更靈活、可擴充套件的身份驗證系統。當前的系統雖然強大,但在某些場景下存在一些限制,使其難以使用。例如,無法使用多個相同型別的身份驗證器(例如,多個 JWT 身份驗證器),或者在不重啟 API 伺服器的情況下更改配置。結構化身份驗證配置功能是解決這些限制並提供一種更靈活、可擴充套件的方式來配置 Kubernetes 身份驗證的第一步。有關結構化身份驗證配置的更多詳細資訊。

結構化授權配置(SIG Auth

結構化授權配置在本版本中畢業為 Beta 版。

Kubernetes 不斷發展以滿足系統管理員和開發人員的複雜需求。確保叢集安全和完整性的一個關鍵方面是 API 伺服器授權。直到最近,kube-apiserver 中授權鏈的配置還相當僵化,僅限於一組命令列標誌,並只允許授權鏈中有一個 webhook。這種方法雖然可行,但限制了叢集管理員定義複雜、細粒度授權策略所需的靈活性。最新的結構化授權配置功能旨在透過引入一種更結構化、更通用的方式來配置授權鏈,從而徹底改變這一方面,重點是啟用多個 webhook 並提供明確的控制機制。有關結構化授權配置的更多詳細資訊。

新的 Alpha 特性

加速遞迴 SELinux 標籤更改(SIG Storage

從 v1.27 版本開始,Kubernetes 已經包含了一項最佳化,可以在常數時間內設定卷內容的 SELinux 標籤。Kubernetes 透過掛載選項實現了這種加速。較慢的傳統行為需要容器執行時遞迴地遍歷整個卷,並單獨為每個檔案和目錄應用 SELinux 標籤;這對於包含大量檔案和目錄的卷尤其明顯。

Kubernetes v1.27 將此功能作為 Beta 畢業,但僅限於 ReadWriteOncePod 卷。相應的特性門控是 SELinuxMountReadWriteOncePod。在 v1.30 中,它仍然預設啟用並保持 Beta 狀態。

Kubernetes v1.30 將 SELinux 掛載選項的支援擴充套件到所有卷,作為 Alpha 功能,並使用一個獨立的特性門控:SELinuxMount。當多個具有不同 SELinux 標籤的 Pod 共享同一個卷時,此特性門控會引入行為上的改變。詳情請見KEP

我們強烈建議在啟用 SELinux 的 Kubernetes 上執行的使用者測試此功能,並在 KEP 問題中提供任何反饋。

特性門控在 v1.30 中的階段行為變化
SELinuxMountReadWriteOncePodBeta
SELinuxMountAlpha

必須同時啟用 SELinuxMountReadWriteOncePodSELinuxMount 這兩個特性門控,才能在所有捲上測試此功能。

此功能對 Windows 節點或不支援 SELinux 的 Linux 節點沒有影響。

遞迴只讀(RRO)掛載(SIG Node

本版本中引入的遞迴只讀(RRO)掛載(Alpha)為你的資料提供了新的安全層。此功能讓你能夠將卷及其子掛載設定為只讀,防止意外修改。想象一下,部署一個數據完整性至關重要的關鍵應用——RRO 掛載確保你的資料保持不變,透過額外的保障措施加固了你的叢集安全。這在嚴格控制的環境中尤其重要,即使是最微小的變化也可能產生重大影響。

Job 成功/完成策略(SIG Apps

從 Kubernetes v1.30 開始,索引式 Job 支援 .spec.successPolicy 來定義何時可以根據成功的 Pod 宣佈 Job 成功。這允許你定義兩種型別的標準:

  • succeededIndexes 表示當這些索引成功時,即使其他索引失敗,也可以宣佈 Job 成功。
  • succeededCount 表示當成功索引的數量達到此標準時,可以宣佈 Job 成功。

在 Job 滿足成功策略後,Job 控制器會終止 lingering 的 Pod。

服務的流量分配(SIG Network

Kubernetes v1.30 在 Kubernetes Service 中引入了 spec.trafficDistribution 欄位,作為 Alpha 功能。這允許你表達流量應如何路由到 Service 端點的偏好。雖然流量策略側重於嚴格的語義保證,但流量分配允許你表達*偏好*(例如路由到拓撲上更近的端點)。這有助於最佳化效能、成本或可靠性。你可以透過為你的叢集及其所有節點啟用 ServiceTrafficDistribution 特性門控來使用此欄位。在 Kubernetes v1.30 中,支援以下欄位值:

PreferClose:表示傾向於將流量路由到拓撲上與客戶端鄰近的端點。“拓撲鄰近”的解釋可能因實現而異,可能包括同一節點、機架、區域甚至地域內的端點。設定此值允許實現做出不同的權衡,例如最佳化鄰近性而不是負載的平均分配。如果此類權衡不可接受,則不應設定此值。

如果未設定該欄位,實現(如 kube-proxy)將應用其預設的路由策略。

更多詳情請見流量分配

儲存版本遷移(SIG API Machinery

Kubernetes v1.30 引入了一個新的內建 API,用於*StorageVersionMigration*。Kubernetes 依賴於 API 資料的持續重寫,以支援一些與靜態儲存相關的維護活動。兩個突出的例子是儲存資源的帶版本模式(即,給定資源的優選儲存模式從 v1 變為 v2)和靜態加密(即,根據資料應如何加密的變化重寫過時資料)。

StorageVersionMigration 是一個 Alpha API,之前在樹外可用。

更多詳情請見儲存版本遷移

Kubernetes v1.30 的畢業、棄用和移除

畢業為穩定版

這裡列出了所有畢業為穩定版(也稱為*正式釋出*)的功能。有關包括新功能和從 Alpha 到 Beta 的畢業在內的完整更新列表,請參閱釋出說明

此版本共包含 17 項提升為穩定版的增強功能:

棄用和移除

移除了自 v1.27 以來已棄用的 SecurityContextDeny 准入外掛

SIG AuthSIG SecuritySIG Testing)隨著 SecurityContextDeny 准入外掛的移除,推薦使用自 v1.25 起可用的 Pod Security Admission 外掛。

釋出說明

在我們的釋出說明中檢視 Kubernetes v1.30 釋出的完整詳情。

可用性

Kubernetes v1.30 可在 GitHub 上下載。要開始使用 Kubernetes,請檢視這些互動式教程或使用 minikube 執行本地 Kubernetes 叢集。你也可以使用 kubeadm 輕鬆安裝 v1.30。

釋出團隊

Kubernetes 的成功離不開其社群的支援、承諾和辛勤工作。每個釋出團隊都由敬業的社群志願者組成,他們共同努力構建 Kubernetes 版本中你所依賴的眾多部分。這需要我們社群各個角落的人們的專業技能,從程式碼本身到文件和專案管理。

我們衷心感謝整個釋出團隊為向我們的社群交付 Kubernetes v1.30 版本所付出的辛勤工作。釋出團隊的成員範圍從首次參與的影子成員到經驗豐富的迴歸團隊負責人,他們的經驗是在多個釋出週期中錘鍊出來的。特別感謝我們的釋出負責人 Kat Cosgrove,感謝她在一個成功的釋出週期中對我們的支援,為我們發聲,確保我們都能以最佳方式做出貢獻,並挑戰我們改進發布流程。

專案速度

CNCF K8s DevStats 專案彙總了許多與 Kubernetes 和各種子專案的速度相關的有趣資料點。這包括從個人貢獻到貢獻公司數量的所有內容,展示了推動這個生態系統發展所付出的努力的深度和廣度。

在為期 14 周(1 月 8 日至 4 月 17 日)的 v1.30 釋出週期中,我們看到了來自 863 家公司1391 位個人的貢獻。

活動更新

  • KubeCon + CloudNativeCon China 2024 將於 2024 年 8 月 21 日至 23 日在香港舉行!你可以在活動網站上找到有關會議和註冊的更多資訊。
  • KubeCon + CloudNativeCon North America 2024 將於 2024 年 11 月 12 日至 15 日在美國猶他州鹽湖城舉行!你可以在活動網站上找到有關會議和註冊的更多資訊。

即將舉行的釋出網路研討會

請於 2024 年 5 月 23 日(星期四)太平洋時間上午 9 點加入 Kubernetes v1.30 釋出團隊成員,瞭解此版本的主要功能,以及棄用和移除的內容,以幫助規劃升級。更多資訊和註冊,請訪問 CNCF 線上專案網站上的活動頁面

參與其中

參與 Kubernetes 的最簡單方法是加入眾多與你興趣相符的特別興趣小組 (SIG) 之一。有什麼想向 Kubernetes 社群廣播的嗎?在我們每週的社群會議上分享你的聲音,並透過以下渠道。感謝你持續的反饋和支援。

此部落格於 2024 年 4 月 19 日更新,以突出顯示最初未包含在釋出部落格中的兩項額外更改。