Kubernetes v1.31:Elli

編輯:Matteo Bianchi、Yigit Demirbas、Abigail McCarthy、Edith Puclla、Rashan Smith

宣布 Kubernetes v1.31 版本:Elli!

與先前的版本類似,Kubernetes v1.31 版本的發布引入了新的穩定版、Beta 版和 Alpha 版功能。高品質版本的持續交付突顯了我們開發週期的優勢以及社群的蓬勃支援。此版本包含 45 項增強功能。在這些增強功能中,有 11 項已升級為穩定版,22 項進入 Beta 版,12 項已升級為 Alpha 版。

Kubernetes v1.31 版本的主題是「Elli」。

Kubernetes v1.31 的 Elli 是一隻可愛又快樂的狗,牠有一顆金子般的心和一頂可愛的水手帽,俏皮地向龐大而多元的 Kubernetes 貢獻者大家庭致意。

Kubernetes v1.31 標誌著該專案成功慶祝 成立 10 週年 後的第一個版本。自成立以來,Kubernetes 已經走了很長一段路,並且仍在每個版本中朝著令人興奮的新方向前進。回顧無數 Kubernetes 貢獻者的努力、奉獻、技能、智慧和辛勤工作,才使這一切成為現實,這在 10 年後仍然令人讚嘆。

然而,儘管運行該專案需要付出巨大的努力,但仍有許多人一次又一次地展現熱情、微笑和自豪感,為社群做出貢獻並成為社群的一份子。我們從新舊貢獻者身上看到的這種「精神」是一個充滿活力的社群的標誌,如果我們可以這樣稱呼它的話,這是一個「令人愉悅」的社群。

Kubernetes v1.31 的 Elli 完全是為了慶祝這種美好的精神!為了 Kubernetes 的下一個十年乾杯!

升級為穩定版的功能重點

以下是 v1.31 版本發布後現已穩定的部分改進功能的精選。

AppArmor 支援現已穩定

Kubernetes 對 AppArmor 的支援現在已正式發布 (GA)。透過在容器的 securityContext 中設定 appArmorProfile.type 欄位,使用 AppArmor 保護您的容器。請注意,在 Kubernetes v1.30 之前,AppArmor 是透過註解控制的;從 v1.30 開始,它改為使用欄位控制。建議您遷移不再使用註解,並開始使用 appArmorProfile.type 欄位。

若要瞭解更多資訊,請閱讀 AppArmor 教學。這項工作是 KEP #24 的一部分,由 SIG Node 完成。

kube-proxy 改善了 Ingress 連線可靠性

kube-proxy 改善的 Ingress 連線可靠性在 v1.31 中已穩定。Kubernetes 中負載平衡器的一個常見問題是涉及不同組件之間的同步,以避免流量遺失。此功能在 kube-proxy 中實作了一種機制,讓負載平衡器可以為 type: LoadBalancerexternalTrafficPolicy: Cluster 服務公開的終止節點執行連線排空,並為雲端供應商和 Kubernetes 負載平衡器實作建立一些最佳實務。

若要使用此功能,kube-proxy 需要作為叢集上的預設服務代理執行,且負載平衡器需要支援連線排空。使用此功能不需要進行任何特定變更,自 v1.30 起已在 kube-proxy 中預設啟用,並在 v1.31 中升級為穩定版。

有關此功能的更多詳細資訊,請造訪 虛擬 IP 和服務代理文件頁面

這項工作是 KEP #3836 的一部分,由 SIG Network 完成。

持久卷最後階段轉換時間

持久卷最後階段轉換時間功能在 v1.31 中移至正式發布 (GA)。此功能新增了 PersistentVolumeStatus 欄位,其中包含 PersistentVolume 最後一次轉換到不同階段的時間戳記。啟用此功能後,每個 PersistentVolume 物件都將有一個新的欄位 .status.lastTransitionTime,其中包含卷最後一次轉換階段的時間戳記。此變更不是立即生效的;每當 PersistentVolume 更新並在升級到 Kubernetes v1.31 後首次在階段(PendingBoundReleased)之間轉換時,就會填入新的欄位。這可讓您測量 PersistentVolume 從 Pending 移至 Bound 的時間。這對於提供指標和 SLO 也很有用。

有關此功能的更多詳細資訊,請造訪 PersistentVolume 文件頁面

這項工作是 KEP #3762 的一部分,由 SIG Storage 完成。

升級為 Beta 版的功能重點

以下是 v1.31 版本發布後現已成為 Beta 版的部分改進功能的精選。

kube-proxy 的 nftables 後端

nftables 後端在 v1.31 中移至 Beta 版,位於 NFTablesProxyMode 功能閘道之後,該閘道現在預設為啟用。

nftables API 是 iptables API 的後繼者,旨在提供比 iptables 更好的效能和可擴展性。nftables 代理模式能夠比 iptables 模式更快更有效率地處理服務端點的變更,並且還能夠更有效率地處理核心中的封包(儘管這僅在具有數萬個服務的叢集中才會變得明顯)。

截至 Kubernetes v1.31,nftables 模式仍然相對較新,並且可能與並非所有網路外掛程式相容;請參閱您的網路外掛程式的文件。此代理模式僅適用於 Linux 節點,並且需要核心 5.13 或更高版本。在遷移之前,請注意某些功能,尤其是圍繞 NodePort 服務的功能,在 nftables 模式中的實作方式與在 iptables 模式中並不完全相同。查看 遷移指南,以查看您是否需要覆寫預設組態。

這項工作是 KEP #3866 的一部分,由 SIG Network 完成。

PersistentVolume 的回收策略變更

Always Honor PersistentVolume Reclaim Policy 功能已在 Kubernetes v1.31 中升級為 Beta 版。此增強功能確保即使在關聯的 PersistentVolumeClaim (PVC) 刪除後,PersistentVolume (PV) 回收策略仍然受到尊重,從而防止卷洩漏。

在此功能之前,在特定條件下,可能會忽略連結到 PV 的回收策略,具體取決於 PV 或 PVC 哪個先被刪除。因此,即使回收策略設定為「Delete」,外部基礎架構中的相應儲存資源也可能不會被移除。這導致了潛在的不一致性和資源洩漏。

隨著此功能的推出,Kubernetes 現在保證將強制執行「Delete」回收策略,確保從後端基礎架構中刪除底層儲存物件,無論 PV 和 PVC 的刪除順序如何。

這項工作是 KEP #2644 的一部分,由 SIG Storage 完成。

綁定服務帳戶令牌改進

ServiceAccountTokenNodeBinding 功能在 v1.31 中升級為 Beta 版。此功能允許請求僅綁定到節點而不是 Pod 的令牌,其中包括令牌中宣告的節點資訊,並在使用令牌時驗證節點的存在。如需更多資訊,請閱讀 綁定服務帳戶令牌文件

這項工作是 KEP #4193 的一部分,由 SIG Auth 完成。

多個服務 CIDR

支援具有多個服務 CIDR 的叢集在 v1.31 中移至 Beta 版(預設為停用)。

Kubernetes 叢集中有多個組件會使用 IP 位址:節點、Pod 和服務。節點和 Pod IP 範圍可以動態變更,因為分別取決於基礎架構或網路外掛程式。但是,服務 IP 範圍是在叢集建立期間定義的,作為 kube-apiserver 中的硬式編碼旗標。IP 耗盡一直是長期運作或大型叢集的問題,因為管理員需要擴展、縮減甚至完全替換已指派的服務 CIDR 範圍。這些操作從未獲得原生支援,而是透過複雜而精細的維護操作執行,通常會導致叢集停機。這項新功能允許使用者和叢集管理員動態修改服務 CIDR 範圍,而不會造成停機。

有關此功能的更多詳細資訊,請造訪 虛擬 IP 和服務代理 文件頁面。

這項工作是 KEP #1880 的一部分,由 SIG Network 完成。

服務的流量分配

服務的流量分配在 v1.31 中移至 Beta 版,並且預設為啟用。

在多次迭代尋找服務網路的最佳使用者體驗和流量工程功能後,SIG Networking 在服務規格中實作了 trafficDistribution 欄位,作為底層實作在制定路由決策時應考量的指南。

有關此功能的更多詳細資訊,請閱讀 1.30 版本部落格 或造訪 服務 文件頁面。

這項工作是 KEP #4444 的一部分,由 SIG Network 完成。

Kubernetes VolumeAttributesClass ModifyVolume

VolumeAttributesClass API 在 v1.31 中移至 Beta 版。VolumeAttributesClass 為修改動態卷參數(例如佈建 IO)提供了一個通用的 Kubernetes 原生 API。如果供應商支援,這允許工作負載線上垂直擴展其卷,以平衡成本和效能。自 Kubernetes 1.29 以來,此功能一直處於 Alpha 版。

這項工作是 KEP #3751 的一部分,由 SIG Storage 領導。

Alpha 版中的新功能

以下是 v1.31 版本發布後現已成為 Alpha 版的部分改進功能的精選。

用於更好地管理加速器和其他硬體的新 DRA API

Kubernetes v1.31 帶來了更新的動態資源分配 (DRA) API 和設計。更新的主要重點是結構化參數,因為它們使資源資訊和請求對 Kubernetes 和用戶端透明,並能夠實作叢集自動擴展等功能。kubelet 中的 DRA 支援已更新,使得 kubelet 和控制平面之間可能存在版本偏差。使用結構化參數,排程器會在排程 Pod 時分配 ResourceClaim。DRA 驅動程式控制器的分配仍然受到支援,現在稱為「經典 DRA」。

在 Kubernetes v1.31 中,經典 DRA 有一個單獨的功能閘道,名為 DRAControlPlaneController,您需要明確啟用它。透過此類控制平面控制器,DRA 驅動程式可以實作結構化參數尚不支援的分配策略。

這項工作是 KEP #3063 的一部分,由 SIG Node 完成。

對映像卷的支援

Kubernetes 社群正朝著在未來滿足更多人工智慧 (AI) 和機器學習 (ML) 用例的方向發展。

滿足這些用例的要求之一是直接支援與 Open Container Initiative (OCI) 相容的映像和 Artifact(稱為 OCI 物件)作為原生卷來源。這允許使用者專注於 OCI 標準,並使他們能夠使用 OCI 登錄檔儲存和分發任何內容。

有鑑於此,v1.31 新增了一個新的 Alpha 版功能,允許使用 OCI 映像作為 Pod 中的卷。此功能允許使用者在 Pod 中將映像參考指定為卷,同時在容器中重複使用它作為卷掛載。您需要啟用 ImageVolume 功能閘道才能試用此功能。

這項工作是 KEP #4639 的一部分,由 SIG NodeSIG Storage 完成。

透過 Pod 狀態公開裝置健康資訊

透過 Pod 狀態公開裝置健康資訊作為 v1.31 中的新 Alpha 版功能新增,預設為停用。

在 Kubernetes v1.31 之前,瞭解 Pod 是否與故障裝置關聯的方式是使用 PodResources API

透過啟用此功能,欄位 allocatedResourcesStatus 將新增至每個容器狀態,位於每個 Pod 的 .status 中。allocatedResourcesStatus 欄位報告指派給容器的每個裝置的健康資訊。

這項工作是 KEP #4680 的一部分,由 SIG Node 完成。

基於選擇器的更精細授權

此功能允許 Webhook 授權器和未來的(但目前尚未設計的)樹狀授權器允許 listwatch 請求,前提是這些請求使用標籤和/或欄位選擇器。例如,授權器現在可以表示:此使用者無法列出所有 Pod,但可以列出 .spec.nodeName 符合某些特定值的所有 Pod。或允許使用者監看命名空間中標記為 confidential: true 的所有密碼。結合 CRD 欄位選擇器(也在 v1.31 中移至 Beta 版),可以編寫更安全的每個節點擴展。

這項工作是 KEP #4601 的一部分,由 SIG Auth 完成。

對匿名 API 存取的限制

透過啟用功能閘道 AnonymousAuthConfigurableEndpoints,使用者現在可以使用身份驗證組態檔來組態匿名請求可以存取的端點。這允許使用者保護自己免受 RBAC 錯誤組態的影響,這些錯誤組態可能會授予匿名使用者對叢集的廣泛存取權。

這項工作是 KEP #4633 的一部分,由 SIG Auth 完成。

1.31 版本中的升級、棄用和移除

升級為穩定版

這列出了所有升級為穩定版(也稱為正式發布)的功能。如需包含新功能和從 Alpha 版升級到 Beta 版的完整更新清單,請參閱版本說明。

此版本總共包含 11 項升級為穩定版的增強功能

棄用和移除

隨著 Kubernetes 的發展和成熟,某些功能可能會被棄用、移除或替換為更好的功能,以維護專案的整體健康狀況。有關此流程的更多詳細資訊,請參閱 Kubernetes 棄用和移除策略

Cgroup v1 進入維護模式

隨著 Kubernetes 繼續發展和適應不斷變化的容器協調領域,社群已決定在 v1.31 中將 cgroup v1 支援移至維護模式。此轉變符合整個產業轉向 cgroup v2 的更廣泛趨勢,後者提供改進的功能、可擴展性和更一致的介面。Kubernetes 維護模式表示不會為 cgroup v1 支援新增任何新功能。仍將提供關鍵安全性修復程式,但是,錯誤修復現在是盡力而為,這表示如果可行,可能會修復主要錯誤,但某些問題可能仍然無法解決。

建議您盡快開始切換到使用 cgroup v2。此轉換取決於您的架構,包括確保底層作業系統和容器執行階段支援 cgroup v2,並測試工作負載以驗證工作負載和應用程式在使用 cgroup v2 時是否正常運作。

如果您遇到任何問題,請透過提交 issue 報告。

這項工作是 KEP #4569 的一部分,由 SIG Node 完成。

關於 SHA-1 簽章支援的注意事項

go1.18(於 2022 年 3 月發布)中,crypto/x509 程式庫開始拒絕使用 SHA-1 雜湊函數簽署的憑證。雖然 SHA-1 已被確定為不安全,且公開信任的憑證授權單位自 2015 年以來未發布 SHA-1 憑證,但在 Kubernetes 的環境中,可能仍然存在使用者提供的憑證使用 SHA-1 雜湊函數透過私有授權單位簽署的情況,這些憑證用於匯總 API 伺服器或 Webhook。如果您一直依賴基於 SHA-1 的憑證,則必須透過在您的環境中設定 GODEBUG=x509sha1=1 來明確選擇重新支援它。

鑑於 Go 的 GODEBUG 相容性策略x509sha1 GODEBUG 和對 SHA-1 憑證的支援將在 go1.24 中完全消失,go1.24 將於 2025 年上半年發布。如果您依賴 SHA-1 憑證,請開始將其移開。

請參閱 Kubernetes issue #125689,以更深入瞭解 SHA-1 支援消失的時間表、Kubernetes 發布計畫採用 go1.24 的時間,以及有關如何透過指標和稽核記錄偵測 SHA-1 憑證使用情況的更多詳細資訊。

棄用節點的 status.nodeInfo.kubeProxyVersion 欄位 (KEP 4004)

節點的 .status.nodeInfo.kubeProxyVersion 欄位已在 Kubernetes v1.31 中棄用,並將在後續版本中移除。它被棄用是因為此欄位的值不準確(而且現在也不準確)。此欄位由 kubelet 設定,kubelet 沒有關於 kube-proxy 版本或 kube-proxy 是否正在執行的可靠資訊。

DisableNodeKubeProxyVersion 功能閘道 將在 v1.31 中預設設定為 true,並且 kubelet 將不再嘗試為其關聯的節點設定 .status.kubeProxyVersion 欄位。

移除與雲端供應商的所有樹狀整合

先前的文章 中強調的那樣,作為 v1.31 版本的一部分,已移除雲端供應商整合的最後剩餘的樹狀支援。這並不表示您無法與雲端供應商整合,但您現在必須使用建議的方法,即使用外部整合。某些整合是 Kubernetes 專案的一部分,其他整合是第三方軟體。

此里程碑標誌著從 Kubernetes 核心 (KEP-2395) 中移除所有雲端供應商整合的外部化流程的完成,此流程始於 Kubernetes v1.26。此變更有助於 Kubernetes 更接近成為真正供應商中立的平台。

有關雲端供應商整合的更多詳細資訊,請閱讀我們的 v1.29 雲端供應商整合功能部落格。如需有關樹狀程式碼移除的其他背景資訊,我們邀請您查看 (v1.29 棄用部落格)。

後者部落格也包含需要遷移到 v1.29 及更高版本的使用者的實用資訊。

移除樹狀供應商功能閘道

在 Kubernetes v1.31 中,已移除以下 Alpha 版功能閘道 InTreePluginAWSUnregisterInTreePluginAzureDiskUnregisterInTreePluginAzureFileUnregisterInTreePluginGCEUnregisterInTreePluginOpenStackUnregisterInTreePluginvSphereUnregister。引入這些功能閘道是為了促進測試從程式碼庫中移除樹狀卷外掛程式的場景,而實際上並未移除它們。由於 Kubernetes 1.30 已棄用這些樹狀卷外掛程式,因此這些功能閘道是多餘的,不再具有任何用途。唯一仍然存在的 CSI 遷移閘道是 InTreePluginPortworxUnregister,它將保持 Alpha 版狀態,直到 Portworx 的 CSI 遷移完成,並且其樹狀卷外掛程式將準備好移除。

移除 kubelet --keep-terminated-pod-volumes 命令列旗標

kubelet 旗標 --keep-terminated-pod-volumes 已在 2017 年棄用,已作為 v1.31 版本的一部分移除。

您可以在提取請求 #122082 中找到更多詳細資訊。

移除 CephFS 卷外掛程式

CephFS 卷外掛程式已在此版本中移除,並且 cephfs 卷類型已失效。

建議您改為使用 CephFS CSI 驅動程式 作為第三方儲存驅動程式。如果您在將叢集版本升級到 v1.31 之前使用了 CephFS 卷外掛程式,則必須重新部署您的應用程式以使用新的驅動程式。

CephFS 卷外掛程式已在 v1.28 中正式標記為已棄用。

移除 Ceph RBD 卷外掛程式

v1.31 版本移除了 Ceph RBD 卷外掛程式及其 CSI 遷移支援,使 rbd 卷類型失效。

建議您改為在叢集中使用 RBD CSI 驅動程式。如果您在將叢集版本升級到 v1.31 之前使用了 Ceph RBD 卷外掛程式,則必須重新部署您的應用程式以使用新的驅動程式。

Ceph RBD 卷外掛程式已在 v1.28 中正式標記為已棄用。

棄用 kube-scheduler 中非 CSI 卷限制外掛程式

v1.31 版本將棄用所有非 CSI 卷限制排程器外掛程式,並將從 預設外掛程式 中移除一些已棄用的外掛程式,包括

  • AzureDiskLimits
  • CinderLimits
  • EBSLimits
  • GCEPDLimits

建議您改為使用 NodeVolumeLimits 外掛程式,因為它可以處理與已移除的外掛程式相同的功能,因為這些卷類型已遷移到 CSI。如果您在 排程器組態 中明確使用已棄用的外掛程式,請將其替換為 NodeVolumeLimits 外掛程式。AzureDiskLimitsCinderLimitsEBSLimitsGCEPDLimits 外掛程式將在未來的版本中移除。

這些外掛程式已自 Kubernetes v1.14 版本起棄用,因此將從預設排程器外掛程式清單中移除。

版本注意事項與必要升級動作

請查看我們的版本注意事項,以了解 Kubernetes v1.31 版本的完整詳細資訊。

SchedulerQueueingHints 啟用時,排程器現在使用 QueueingHint

排程器現在支援開始使用為 Pod/Updated 事件註冊的 QueueingHint,以判斷先前無法排程的 Pod 的更新是否使其變成可排程。當功能閘道 SchedulerQueueingHints 啟用時,此新支援會處於啟用狀態。

先前,當無法排程的 Pod 更新時,排程器總是將 Pod 放回佇列中 (activeQ / backoffQ)。然而,並非所有 Pod 的更新都會使其變成可排程,尤其考慮到現在許多排程約束是不可變的。在新行為下,一旦無法排程的 Pod 更新,排程佇列會使用 QueueingHint(s) 檢查更新是否可能使 pod 變成可排程,並且僅在至少一個 QueueingHint 回傳 Queue 時,才將它們重新排入 activeQbackoffQ

自訂排程器外掛程式開發人員的必要動作:如果外掛程式拒絕排程的原因可以透過更新未排程的 Pod 本身來解決,則外掛程式必須為 Pod/Update 事件實作 QueueingHint。範例:假設您開發了一個自訂外掛程式,該外掛程式拒絕具有 schedulable=false 標籤的 Pod。如果移除 schedulable=false 標籤,則具有 schedulable=false 標籤的 Pod 將可排程,則此外掛程式將為 Pod/Update 事件實作 QueueingHint,該事件在未排程的 Pod 中進行此類標籤變更時回傳 Queue。您可以在 pull request #122234 中找到更多詳細資訊。

移除 kubelet --keep-terminated-pod-volumes 命令列旗標

kubelet 旗標 --keep-terminated-pod-volumes 已於 2017 年棄用,並已在 v1.31 版本中移除。

您可以在提取請求 #122082 中找到更多詳細資訊。

可用性

Kubernetes v1.31 可在 GitHubKubernetes 下載頁面上下載。

若要開始使用 Kubernetes,請查看這些互動式教學課程,或使用 minikube 執行本機 Kubernetes 叢集。您也可以使用 kubeadm 輕鬆安裝 v1.31。

發布團隊

Kubernetes 的成功僅能透過社群的支持、投入和努力才能達成。每個發布團隊都由專注的社群志工組成,他們共同努力建構組成您所仰賴的 Kubernetes 發行版本的許多部分。這需要我們社群各個角落的人員的專業技能,從程式碼本身到其文件和專案管理。

我們要感謝整個 發布團隊,感謝他們花費數小時辛勤工作,為我們的社群交付 Kubernetes v1.31 版本。發布團隊的成員資格範圍從首次參與的影子成員到經驗豐富的回歸團隊領導,這些經驗是在多個發布週期中累積的。特別感謝我們的發布負責人 Angelos Kolaitis,感謝他在成功的發布週期中支持我們、為我們發聲,確保我們都能以最佳方式做出貢獻,並挑戰我們改進發布流程。

專案速度

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

在 v1.31 發布週期(從 5 月 7 日到 8 月 13 日,為期 14 週)中,我們看到來自 113 家不同公司和 528 位個人的 Kubernetes 貢獻。

在整個雲原生生態系統中,我們有 379 家公司,總共有 2268 位貢獻者 - 這表示相較於先前的發布週期,我們在個人貢獻者方面經歷了驚人的 63% 增長!

此資料來源

我們所說的貢獻是指某人進行提交、程式碼審查、評論、建立問題或 PR、審查 PR(包括部落格和文件)或評論問題和 PR。

如果您有興趣貢獻,請訪問此頁面以開始。

查看 DevStats 以了解更多關於 Kubernetes 專案和社群的整體速度。

活動更新

探索 2024 年 8 月至 11 月即將到來的 Kubernetes 和雲原生活動,包括 KubeCon、KCD 和其他著名的全球會議。隨時掌握資訊並與 Kubernetes 社群互動。

2024 年 8 月

2024 年 9 月

2024 年 10 月

2024 年 11 月

即將到來的發布網路研討會

加入 Kubernetes v1.31 發布團隊成員於 2024 年 9 月 12 日星期四上午 10 點(太平洋時間)舉辦的網路研討會,以了解此版本的主要功能,以及有助於規劃升級的棄用和移除項目。如需更多資訊和註冊,請訪問 CNCF 線上計畫網站上的活動頁面

參與其中

參與 Kubernetes 最簡單的方式是加入許多與您的興趣相符的特殊興趣小組 (SIG)。有想向 Kubernetes 社群廣播的內容嗎?在我們的每週社群會議以及以下頻道分享您的聲音。感謝您持續的回饋和支持。