云容器引擎(CCE)嚴格遵循社區一致性認證,現已支持創建Kubernetes 1.29集群。本文介紹Kubernetes 1.29版本的變更說明。
新增特性及特性增強
- Service的負載均衡IP模式(Alpha)
在Kubernetes1.29版本,Service的負載均衡IP模式以Alpha版本正式發布。其在Service的status中新增字段ipMode,用于配置集群內Service到Pod的流量轉發模式。當設置為VIP時,目的地址為負載均衡IP和端口的流量將由kube-proxy重定向到目標節點,當設置為Proxy時,流量將被發送到負載均衡器,然后由負載均衡器轉發到目標節點。這項特性將有助于解決流量繞過負載均衡器縮導致的負載均衡器功能缺失問題。
- NFTables代理模式(Alpha)
在Kubernetes1.29版本,NFTables代理模式以Alpha版本正式發布。該特性允許kube-proxy運行在NFTables模式,在該模式下,kube-proxy使用內核netfilters子系統的nftables API來配置數據包轉發規則。
- 未使用容器鏡像的垃圾收集(Alpha)
在Kubernetes1.29版本,未使用容器鏡像的垃圾收集以Alpha版本正式發布。該特性允許用戶為每個節點配置本地鏡像未被使用的最長時間,超過這個時間鏡像將被垃圾回收。配置方法為使用kubelet配置文件中的ImageMaximumGCAge字段。
- PodLifecycleSleepAction(Alpha)
在Kubernetes1.29版本,PodLifecycleSleepAction以Alpha版本正式發布。該特性在容器生命周期回調中引入了Sleep回調程序,可以配置讓容器在啟動后和停止前暫停一段指定的時間。
- KubeletSeparateDiskGC(Alpha)
在Kubernetes1.29版本,KubeletSeparateDiskGC以Alpha版本正式發布。該特性啟用后,即使在容器鏡像和容器位于獨立文件系統的情況下,也能進行垃圾回收。
- matchLabelKeys/mismatchLabelKeys(Alpha)
在Kubernetes1.29版本,matchLabelKeys/mismatchLabelKeys以Alpha版本正式發布。該特性啟用后,在Pod的親和/反親和配置中新增了matchLabelKeys/mismatchLabelKeys字段,可配置更豐富的Pod間親和/反親和策略。
- clusterTrustBundle投射卷(Alpha)
在Kubernetes1.29版本,clusterTrustBundle投射卷以Alpha版本正式發布。該特性啟用后,支持將ClusterTrustBundle對象以自動更新的文件的形式注入卷。
- 基于運行時類的鏡像拉取(Alpha)
在Kubernetes1.29版本中,基于運行時類的鏡像拉取以Alpha版本正式發布。該特性啟用后, kubelet 會通過一個元組(鏡像名稱,運行時處理程序)而不僅僅是鏡像名稱或鏡像摘要來引用容器鏡像。 您的容器運行時可能會根據選定的運行時處理程序調整其行為。基于運行時類來拉取鏡像對于基于VM的容器會有幫助。
- PodReadyToStartContainers狀況達到Beta
在Kubernetes1.29版本,PodReadyToStartContainers狀況特性達到Beta版本。其在Pod的status中新增了一個名為PodReadyToStartContainers的Condition,該Condition為true表示Pod的沙箱已就緒,可以開始創建業務容器。該特性使得集群管理員可以更清晰和全面地查看 Pod 沙箱的創建完成和容器的就緒狀態,增強了指標監控和故障排查能力。
- Job相關特性
- Pod更換策略達到Beta 在Kubernetes1.29版本,Pod更換策略特性達到Beta版本。該特性確保只有Pod達到Failed階段(status.phase: Failed)才會被替換,而不是當刪除時間戳不為空時,Pod仍處于刪除過程中就重建Pod,以此避免出現2個Pod同時占用索引和節點資源。
- 逐索引的回退限制達到Beta 在Kubernetes1.29版本,逐索引的回退限制特性達到Beta版本。默認情況下,帶索引的 Job(Indexed Job)的 Pod 失敗情況會被統計下來,受 .spec.backoffLimit 字段所設置的全局重試次數限制。這意味著,如果存在某個索引值的 Pod 一直持續失敗,則會 Pod 會被重新啟動,直到重試次數達到限制值。 一旦達到限制值,整個 Job 將被標記為失敗,并且對應某些索引的 Pod 甚至可能從不曾被啟動。該特性可以在某些索引值的 Pod 失敗的情況下,仍完成執行所有索引值的 Pod,并且通過避免對持續失敗的、特定索引值的Pod進行不必要的重試,更好的利用計算資源。
- 原生邊車容器達到Beta
在Kubernetes1.29版本,原生邊車容器特性達到Beta版本。其在initContainers中新增了restartPolicy字段,當配置為Always時表示啟用邊車容器。邊車容器和業務容器部署在同一個Pod中,但并不會延長Pod的生命周期。邊車容器常用于網絡代理、日志收集等場景。
- 傳統ServiceAccount令牌清理器達到Beta
在Kubernetes1.29版本,傳統ServiceAccount令牌清理器特性達到Beta版本。其作為kube-controller-manager的一部分運行,每24小時檢查一次,查看是否有任何自動生成的傳統ServiceAccount令牌在特定時間段內(默認為一年,通過--legacy-service-account-token-clean-up-period指定)未被使用。如果有的話,清理器會將這些令牌標記為無效,并添加kubernetes.io/legacy-token-invalid-since標簽,其值為當前日期。如果一個無效的令牌在特定時間段(默認為1年,通過--legacy-service-account-token-clean-up-period指定)內未被使用,清理器將會刪除它。
- DevicePluginCDIDevices達到Beta
在Kubernetes1.29版本,DevicePluginCDIDevices特性達到Beta版本。該特性在DeviceRunContainerOptions增加CDIDevices字段,使得設備插件開發者可以直接將CDI設備名稱傳遞給支持CDI的容器運行時。
- PodHostIPs達到Beta
在Kubernetes1.29版本中,PodHostIPs特性達到Beta版本。該特性在Pod和downward API的Status中增加hostIPs字段,用于將節點IP地址暴露給工作負載。該字段是hostIP的雙棧協議版本,第一個IP始終與hostIP相同。
- API優先級和公平性達到GA
在Kubernetes1.29版本,API優先級和公平性(APF)特性達到GA版本。APF以更細粒度的方式對請求進行分類和隔離,提升最大并發限制,并且它還引入了空間有限的排隊機制,因此在非常短暫的突發情況下,API 服務器不會拒絕任何請求。 通過使用公平排隊技術從隊列中分發請求,這樣,一個行為不佳的控制器就不會導致其他控制器異常 (即使優先級相同)。
- APIListChunking達到GA
在Kubernetes1.29版本,APIListChunking特性達到GA版本。該特性允許客戶端在List請求中進行分頁,避免一次性返回過多數據而導致的性能問題。
- ServiceNodePortStaticSubrange達到GA
在Kubernetes1.29版本,ServiceNodePortStaticSubrange特性達到GA版本。該特性kubelet會根據Nodeport范圍計算出預留地址大小,并將Nodeport劃分為靜態段和動態段。在Nodeport自動分配時,優先分配在動態段,這有助于減小指定靜態段分配時的端口沖突。
- PersistentVolume的階段轉換時間戳達到Beta
在Kubernetes1.29版本,PersistentVolume的階段轉換時間戳特性達到Beta版本。該特性在PV的status中添加了一個lastPhaseTransitionTime字段,表示PV上一次phase變化的時間。通過該字段,集群管理員可以跟蹤PV上次轉換到不同階段的時間,從而實現更高效、更明智的資源管理。
- ReadWriteOncePod達到GA
在Kubernetes1.29版本中,ReadWriteOncePod特性達到GA版本。該特性允許用戶在PVC中配置訪問模式為ReadWriteOncePod,確保同時只有一個 Pod能夠修改存儲中的數據,以防止數據沖突或損壞。
- CSINodeExpandSecret達到GA
在Kubernetes1.29版本中,CSINodeExpandSecret特性達到GA版本。該特性允許在添加節點時將Secret身份驗證數據傳遞到CSI驅動以供后者使用。
- CRD驗證表達式語言達到GA
在Kubernetes1.29版本中,CRD驗證表達式語言特性達到GA版本。該特性允許用戶在CRD中使用通用表達式語言(CEL)定義校驗規則,相比webhook更加高效。
變更與棄用
-
在Kubernetes1.29版本中,新創建的CronJob不再支持在.spec.schedule中通過TZ或者CRON_TZ配置時區,請使用.spec.timeZone替代。已經創建的CronJob不受此影響。
-
在Kubernetes1.29版本中,移除了alpha API ClusterCIDR。
-
在Kubernetes1.29版本中,kube-apiserver新增啟動參數--authentication-config,用于指定AuthenticationConfiguration文件地址,該啟動參數與--oidc-*啟動參數互斥。
-
在Kubernetes1.29版本中,移除了KubeSchedulerConfiguration的API版本kubescheduler.config.k8s.io/v1beta3,請遷移至kubescheduler.config.k8s.io/v1。
-
在Kubernetes1.29版本中,將CEL表達式添加到v1alpha1 AuthenticationConfiguration中。
-
在Kubernetes1.29版本中,新增對象ServiceCIDR,允許用戶動態配置集群分配Service的ClusterIP時所使用的地址范圍。
-
在Kubernetes1.29版本中,kube-proxy新增啟動參數--conntrack-udp-timeout、--conntrack-udp-timeout-stream,可對nf_conntrack_udp_timeout和nf_conntrack_udp_timeout_stream內核參數進行設置 。
-
在Kubernetes1.29版本中,將CEL表達式的支持添加到v1alpha1 AuthenticationConfiguration的WebhookMatchCondition中。
-
在Kubernetes1.29版本中,PVC.spec.Resource的類型由原先的ResourceRequirements替換為VolumeResourceRequirements。
-
在Kubernetes1.29版本中,將PodFailurePolicyRule中的OnPodConditions轉變為可選字段。
-
在Kubernetes1.29版本中,FlowSchema與PriorityLevelConfiguration的API版本flowcontrol.apiserver.k8s.io/v1beta3已升級至flowcontrol.apiserver.k8s.io/v1,并進行了以下更改
- PriorityLevelConfiguration:.spec.limited.nominalConcurrencyShares字段在省略時自動設為默認值30,并且為了確保與1.28兼容,在1.29中v1版本該字段不允許顯示指定為0。在1.30中,將允許v1版本該字段顯示指定為0。flowcontrol.apiserver.k8s.io/v1beta3已廢棄,并在1.32中不再支持。
-
在Kubernetes1.29版本中, 優化了kube-proxy的命令行文檔,kube-proxy實際上不會將任何socket綁定到由--bind-address啟動參數指定的IP。
-
在Kubernetes1.29版本中,移除了selectorSpread調度器插件,使用podTopologySpread替代。
-
在Kubernetes1.29版本中,當CSI-Node-Driver沒有在運行時,NodeStageVolume操作會重試。
-
在Kubernetes1.29版本中,ValidatingAdmissionPolicy支持對CRD資源進行校驗。使用該特性需開啟特性門控ValidatingAdmissionPolicy。
-
在Kubernetes1.29版本中,kube-proxy新增啟動參數--nf-conntrack-tcp-be-liberal,可對內核參數nf_conntrack_tcp_be_liberal進行配置。
-
在Kubernetes1.29版本中,kube-proxy新增啟動參數--init-only,設置后使kube-proxy的init容器在特權模式下運行,進行一些初始化配置,然后退出。
-
在Kubernetes1.29版本中,CRI的返回體中新增容器的fileSystem字段,表示容器的fileSystem使用信息,而原先只包含鏡像的fileSystem。
-
在Kubernetes1.29版本中,所有內置的CloudProvider全部默認設置為關閉,如果仍需使用,可通過配置DisableCloudProviders和DisableKubeletCloudCredentialProvider特性門控來選擇性關閉或者打開。
-
在Kubernetes1.29版本中,kubelet可通過--node-ips來設置雙棧IP(kubelet設置--cloud-provider=external,此時可以使用--node-ips參數來設置節點地址(IPv4/IPv6)),使用該特性需開啟特性門控CloudDualStackNodeIPs。