云容器引擎(CCE)嚴格遵循社區一致性認證,現已支持創建Kubernetes 1.28集群。本文介紹Kubernetes 1.28版本的變更說明。
重要說明
-
在Kubernetes 1.28版本,調度框架發生變化,減少無用的重試,從而提高調度程序的整體性能。
-
在Kubernetes 1.28 版本,Ceph FS 樹內插件已在 v1.28 中棄用,并計劃在 v1.31 中刪除(社區沒有計劃進行 CSI 遷移)。 建議使用 Ceph CSI 第三方存儲驅動程序作為替代方案。
-
在Kubernetes 1.28 版本,Ceph RBD 樹內插件已在 v1.28 中棄用,并計劃在 v1.31 中刪除(社區沒有計劃進行 CSI 遷移)。建議使用 RBD 模式的 Ceph CSI 第三方存儲驅動程序作為替代方案。
新增特性及特性增強
社區特性的Alpha階段默認禁用、Beta階段一般默認啟用、GA階段將一直默認啟用,且不能禁用(會在后續版本中刪除這個開關功能)。CCE對新特性的策略與社區保持一致。
- 版本偏差策略擴展至3個版本
從1.28控制平面/1.25 工作節點開始,Kubernetes版本偏差策略將支持的控制平面/工作節點偏差擴展到 3 個版本。 這使得節點的年度次要版本升級成為可能,同時保持受支持的次要版本。
- 可追溯的默認StorageClass 進階至 GA
在Kubernetes 1.28版本,可追溯默認 StorageClass 賦值現已進階至GA。 這項增強特性極大地改進了默認的StorageClasses為PersistentVolumeClaim (PVC) 賦值的方式。
PersistentVolume (PV) 控制器已修改為:當未設置 storageClassName 時,自動向任何未綁定的 PersistentVolumeClaim 分配一個默認的 StorageClass。此外,API 服務器中的 PersistentVolumeClaim 準入驗證機制也已調整為允許將值從未設置狀態更改為實際的 StorageClass 名稱。
- 原生邊車容器(Alpha)
在Kubernetes 1.28版本,原生邊車容器以Alpha版本正式發布。其在 Init 容器中添加了一個新的 restartPolicy 字段, 該字段在 SidecarContainers 特性門控啟用時可用。需要注意的是,原生邊車容器目前仍有些問題需要解決,因此K8S社區建議僅在 Alpha 階段的短期測試集群中使用邊車功能。
- 混合版本代理(Alpha)
在Kubernetes 1.28版本,發布了用于改進集群安全升級的新機制(混合版本代理)。該特性為Alpha特性。 當集群進行升級時,集群中不同版本的 kube-apiserver 為不同的內置資源集(組、版本、資源)提供服務。在這種情況下資源請求如果由任一可用的 apiserver 提供服務,請求可能會到達無法解析此請求資源的 apiserver 中,導致請求失敗。該特性能解決該問題。(主要注意的是,CCE本身提供的升級能力即可做到無損升級,因此不存在該特性涉及的場景)。
- 節點非體面關閉特性達到GA
在Kubernetes 1.28版本,節點非體面關閉特性達到GA階段。當一個節點被關閉但沒有被 Kubelet 的 Node Shutdown Manager 檢測到時,StatefulSet 的 Pod 將會停留在終止狀態,并且不能移動到新運行的節點上。當用戶確認該節點已經處于不可恢復的情況下,可以手動為Node打上out-of-service的污點,以使得該節點上的StatefulSet的Pod和VolumeAttachments被強制刪除,并在健康的Node上創建相應的Pod。
- NodeSwap特性達到Beta
在Kubernetes 1.28版本,NodeSwap能力進階至Beta版本。目前仍然處于默認關閉狀態,需要使用NodeSwap門控打開。該特性可以為Linux節點上運行的Kubernetes工作負載逐個節點地配置內存交換。需要注意的是,該特性雖然進階至Beta特性,但仍然存在一些需要增強的問題和安全風險。
- Job相關特性 在Kubernetes 1.28版本,增加了Pod更換策略和基于帶索引Job的回退限制兩個alpha特性。
- Pod更換策略 默認情況下,當Pod 進入終止(Terminating)狀態(例如由于搶占或驅逐機制)時,Kubernetes 會立即創建一個替換的 Pod,因此這時會有兩個 Pod 同時運行。在Kubernetes 1.28版本中可以使用JobPodReplacementPolicy 來啟用該特性。可以在Job的Spec中定義podReplacementPolicy,目前僅可設置為Failed。在設置為Failed之后,Pod 僅在達到 Failed 階段時才會被替換,而不是在它們處于終止過程中(Terminating)時被替換。此外,您可以檢查 Job 的 .status.termination 字段。該字段的值表示終止過程中的 Job 所關聯的 Pod 數量。
- 帶索引Job的回退限制 默認情況下,帶索引的Job(Indexed Job)的 Pod 失敗情況會被記錄下來,受 .spec.backoffLimit 字段所設置的全局重試次數限制。這意味著,如果存在某個索引值的 Pod 一直持續失敗,則會 Pod 會被重新啟動,直到重試次數達到限制值。 一旦達到限制值,整個 Job 將被標記為失敗,并且對應某些索引的 Pod 甚至可能從不曾被啟動。在Kubernetes 1.28版本中,可以通過啟用集群的 JobBackoffLimitPerIndex 特性門控來啟用此特性。開啟之后,允許在創建帶索引的 Job(Indexed Job)時指定 .spec.backoffLimitPerIndex 字段。當某個Job的失敗次數超過設定的上限時,將不再進行重試。
- CEL相關特性 在Kubernetes 1.28版本,CEL能力進行了相應的增強。
- CRD 使用 CEL 進行 Validate 的特性進階至Beta 該特性在v1.25版本就已經升級為Beta版本。通過將 CEL 表達式直接集成在 CRD 中, 可以使開發者在不使用 Webhook 的情況下解決大部分對 CR 實例進行驗證的用例。在未來的版本,將繼續擴展 CEL 表達式的功能,以支持默認值和 CRD 轉換。
- 基于CEL的準入控制進階至Beta 基于通用表達式語言(CEL) 的準入控制是可定制的,對于 kube-apiserver 接受到的請求,可以使用 CEL 表達式來決定是否接受或拒絕請求,可作為 Webhook 準入控制的一種替代方案。在 v1.28 中,CEL 準入控制被升級為 Beta,同時添加了一些新功能,包括但不限于:
- ValidatingAdmissionPolicy 類型檢查現在可以正確處理 CEL 表達式中的 “authorizer” 變量。
- ValidatingAdmissionPolicy 支持對 messageExpression 字段進行類型檢查。
- kube-controller-manager 組件新增 ValidatingAdmissionPolicy 控制器,用來對 ValidatingAdmissionPolicy 中的 CEL 表達式做類型檢查,并將原因保存在狀態字段中。
- 支持變量組合,可以在ValidatingAdmissionPolicy 中定義變量,然后在定義其他變量時使用它。
- 新增CEL 庫函數支持對 Kubernetes 的 resource.Quantity 類型進行解析。
- 其它特性說明
- 在Kubernetes 1.28版本,ServiceNodePortStaticSubrange 特性為beta,允許保留靜態端口范圍,避免與動態分配端口沖突。
- 在Kubernetes 1.28版本,增加了alpha特性ConsistentListFromCache,允許kube-apiserver從緩存中提供一致性列表,Get和List請求可以從緩存中讀取數據,而不需要從etcd中獲取。
- 在Kubernetes 1.28版本,kubelet能夠配置drop-in目錄(alpha特性)。該特性允許向kubelet添加對“--config-dir”標志的支持,以允許用戶指定一個插入目錄,該目錄將覆蓋位于/etc/kubernetes/kubelet.conf位置的Kubelet的配置。
- 在Kubernetes 1.28版本,ExpandedDNSConfig 升級至GA,默認會被打開。該參數用于允許擴展DNS的配置。
- 在Kubernetes 1.28版本,提供Alpha特性CRD Validation Ratcheting。該特性允許Patch或者Update請求沒有更改任何不合法的字段,將允許CR驗證失敗。
- 在Kubernetes 1.28版本,kube-controller-manager添加了--concurrent-cron-job-syncs flag用來設置cron job controller的workers數。
變更與棄用
-
在Kubernetes 1.28版本,移除特性NetworkPolicyStatus,因此Network Policy不再有status屬性。
-
在Kubernetes 1.28版本,Job對象中增加了新的annotationbatch.kubernetes.io/cronJob-scheduled-timestamp,表示Job的創建時間。
-
在Kubernetes 1.28版本,Job API中添加podReplacementPolicy和terminating字段,當前一旦先前創建的pod終止,Job就會立即啟動替換pod。添加字段允許用戶指定是在先前的Pod終止后立即更換Pod(原行為),還是在現有的Pod完全終止后才替換Pod(新行為)。這是一項 Alpha 級別特性,您可以通過在集群中啟用JobPodReplacementPolicy 來啟用該特性。
-
在Kubernetes 1.28版本,Job支持BackoffLimitPerIndex字段。當前使用的運行Job的策略是Job中的整個Pod共享一個Backoff機制,當Job達到次Backoff的限制時,整個Job都會被標記為失敗,并清理資源,包括尚未運行的index。此字段允許對單個的index設置Backoff。
-
在Kubernetes 1.28版本,添加ServedVersions字段到 StorageVersion API中。該變化由混合代理版本特性引入。該增加字段ServedVersions用于表明API服務器可以提供的版本。
-
在Kubernetes 1.28版本,SelfSubjectReview 添加到到authentication.k8s.io/v1中,并且kubectl auth whoami走向GA。
-
在Kubernetes 1.28版本,PersistentVolume有了一個新的字段LastPhaseTransitionTime,用來保存最近一次volume轉變Phase的時間。
-
在Kubernetes 1.28版本,PVC.Status中移除resizeStatus,使用AllocatedResourceStatus替代。resizeStatus表示調整存儲大小操作的狀態,默認為空字符串。
-
在Kubernetes 1.28版本,設置了hostNetwork: true并且定義了ports的Pods,自動設置hostport字段。
-
在Kubernetes 1.28版本,StatefulSet的Pod索引設置為Pod的標簽statefulset.kubernetes.io/pod-index。
-
在Kubernetes 1.28版本,Pod的Condition字段中的PodHasNetwork重命名為PodReadyToStartContainers,用來表明網絡、卷等已成功創建,sandbox pod已經創建完成,可以啟動容器。
-
在Kubernetes 1.28版本,在KubeSchedulerConfiguration中添加了新的配置選項 delayCacheUntilActive, 該參數為true時,非master節點的kube-scheduler不會緩存調度信息。這為非主節點的內存減緩了壓力,但會導致主節點發生故障時,減慢故障轉移的速度。
-
在Kubernetes 1.28版本,在admissionregistration.k8s.io/v1alpha1.ValidatingAdmissionPolicy中添加namespaceParamRef字段。
-
在Kubernetes 1.28版本,在CRD validation rules中添加reason和fieldPath,允許用戶指定驗證失敗的原因和字段路徑。
-
在Kubernetes 1.28版本,ValidatingAdmissionPolicy的CEL表達式通過namespaceObject支持namespace訪問。
-
在Kubernetes 1.28版本,將API groups ValidatingAdmissionPolicy 和ValidatingAdmissionPolicyBinding 提升到betav1。
-
在Kubernetes 1.28版本,ValidatingAdmissionPolicy 擴展了messageExpression字段,用來檢查已解析類型。
特性門禁及命令行參數
-
在Kubernetes 1.28版本,kubelet移除了flag –short。因此kubectl version 默認輸出與kubectl version –short相同。
-
在Kubernetes 1.28版本,kube-controller-manager廢棄flag--volume-host-cidr-denylist和--volume-host-allow-local-loopback。--volume-host-cidr-denylist是用逗號分隔的一個CIDR范圍列表,禁止使用這些地址上的卷插件。--volume-host-allow-local-loopback為false時,禁止本地回路IP地址和--volume-host-cidr-denylist中所指定的CIDR范圍。
-
在Kubernetes 1.28版本,kubelet --azure-container-registry-config 被棄用并在未來的版本中會被刪除。 請使用 --image-credential-provider-config 和 --image-credential-provider-bin-dir 來設置。
-
在Kubernetes 1.28版本,kube-scheduler: 刪除了 --lock-object-namespace 和 --lock-object-name。 請使用 --leader-elect-resource-namespace 和 --leader-elect-resource-name 或 ComponentConfig 來配置這些參數。(--lock-object-namespace用來定義鎖對象的命名空間,--lock-object-name用來定義鎖對象的名稱)
-
在Kubernetes 1.28版本,KMSv1 已棄用,以后只會接收安全更新。請改用 KMSv2。在未來版本中, 設置 --feature-gates=KMSv1=true 以使用已棄用的 KMSv1 功能。
-
在Kubernetes 1.28版本,移除了如下特性門禁:DelegateFSGroupToCSIDriver、DevicePlugins、KubeletCredentialProviders、MixedProtocolLBService、ServiceInternalTrafficPolicy、ServiceIPStaticSubrange、EndpointSliceTerminatingCondition。