阿里雲Container Service for Kubernetes嚴格遵循社區一致性認證。本文介紹ACK發布Kubernetes 1.28版本的主要變更說明,包括升級注意事項、重大變更、功能特性、棄用功能和API、特性門控等。
組件版本說明
下表為ACK叢集核心組件版本的支援情況。
核心組件 | 版本號碼 |
Kubernetes | 1.28.9-aliyun.1、1.28.3-aliyun.1 |
etcd | v3.5.9 |
CoreDNS | v1.9.3.10-7dfca203-aliyun |
CRI | containerd 1.6.20 |
CSI | v1.26.5-92f859a-aliyun |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway和TerwayControlplane v1.5.0及以上 | |
NVIDIA Container Runtime | v3.13.0 |
Ingress Controller | v1.8.0-aliyun.1 |
升級注意事項
組件 | 注意事項 |
CephFS和Ceph RBD儲存卷外掛程式 | 如果叢集使用了CephFS和RBD卷外掛程式,需檢查是否已經不再依賴Kubernetes自身提供的外掛程式驅動,改用樹外驅動(Off-Tree Driver)並評估相關相容性、穩定性或效能方面的風險。 |
相關概念
瞭解Kubernetes版本的功能變更和棄用資源前,您可能需要瞭解相關概念。
重大變更
針對調度器,Kubernetes v1.28版本最佳化了調度邏輯,減少無效的重試,從而提高調度器的整體效能。
如叢集中使用了自訂調度器外掛程式,建議對調度器外掛程式進行改造和升級,以提升調度器效能。更多資訊,請參見調度架構變化。
針對CSI遷移,Kubernetes社區一直推動將儲存相關外掛程式從源碼中移除,改用實現了CSI標準介面的樹外驅動,並已經於v1.25完成GA,於v1.27移除了API
storage.k8s.io/v1beta1
和EBS儲存外掛程式,於v1.28移除了CephFS卷外掛程式相關代碼並廢棄了kubernetes.io/rbd
,轉為使用CephFS CSI驅動。此外,v1.28不再支援將Ceph RBD卷遷移到樹外CSI儲存驅動外掛程式。在1.28.9-aliyun.1版本修複了以下CVE漏洞:
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
功能特性
在Kubernetes 1.27版本
修正Pod終止狀態,將處於Pending中被刪除的Pod設定為Failed,將處於Running中被刪除的Pod設定為Succeeded或者Failed(具體狀態取決於容器退出狀態)。此修正解決了當Pod配置了失敗策略時刪除Pod可能卡在Pending階段的問題。
但如果Pod配置了
RestartPolicy=Always
,Pod刪除後可能會以Succeeded結束。您需為此調整開發的控制器。更多資訊,請參見給不需要重啟的Pod設定終止狀態。持久卷的ReadWriteOncePod訪問模式進入Beta,預設支援僅允許一個Pod寫入儲存卷。更多資訊,請參見持久卷的單Pod訪問模式升級到Beta。
Pod拓撲分布約束控制Pod在叢集內合理分布在多個可用性區域,有多個增強特性進入Beta,包括支援設定Pod最少分布在幾個域(
minDomains
),支援調度時考慮汙點(nodeTaintsPolicy
)、親和性(nodeAffinityPolicy
),解決變換時結果不符合約束(whenUnsatisfiable
)的問題。更多資訊,請參見更多精細粒度的Pod拓撲分布策略。
服務端欄位校正對發送到API Server上的資源進行校正,功能進階至GA。kubectl將跳過用戶端校正,自動使用
Strict
模式下的服務端欄位校正,並在驗證失敗時報錯。更多資訊,請參見Server Side Field Validation and OpenAPI V3 move to GA。OpenAPI v3是OpenAPI的最新標準,Kubernetes在v1.23添加,在v1.27進入GA。更多資訊,請參見Server Side Field Validation and OpenAPI V3 move to GA。
HPA允許給Pod裡的容器配置ContainerResource,根據各個容器的資源使用量進行自動擴縮。該功能在v1.27進入Beta。與原有的Resource類型考慮Pod整體資源使用平均值相比,考慮每個容器使用量可以解決此問題:Pod存在多個容器時Sidecar容器使用率低而業務容器使用率高,平均計算後沒有達到擴容閾值,最終無法擴容。
StatefulSet多個特性進入Beta,包括支援Pod從非零數作為起始序號,支援指定刪除和縮容時自動刪除建立的PVC。
新增特性允許在不重啟Pod和容器的情況下調整Pod容器中
resources
欄位下的CPU和Memory。節點會基於requests
為Pod分配資源,基於limits
限制資源使用。Pod新增了部分欄位支援該特性,請參見調整分配給容器的CPU和記憶體資源。該特性在v1.27處於Alpha階段,預設關閉。kubelet支援修改
serializeImagePulls
為false
,實現並發拉取鏡像代替預設的串列拉取。v1.27新增maxParallelImagePulls欄位,限制並發拉取的鏡像數量,防止鏡像拉取消耗過多的網路頻寬或磁碟I/O。針對持久卷快照能力,除了已經提供的Volume Snapshot API外,新增一致性快照Volume Group Snapshot能力,允許在同一時間點對多個卷產生快照,請參見介紹用於磁碟卷組快照的新API。
在Kubernetes 1.28版本
節點非體面關閉(Non-graceful node shutdown)進入GA。節點由於斷電等故障導致非正常關閉時,有狀態應用程式需要及時在正常啟動並執行節點上重新啟動,以免影響業務正常運行。
NodeOutOfServiceVolumeDetach特性門控進入GA,允許異常節點上被終止的Pod立即進行卷分離操作,以支援Pod在其他節點上快速恢複。
可追溯的預設StorageClass賦值進入GA。此前,當未配置
storageClassName
的PVC先於預設StorageClass存在時,PVC將永遠處於pending狀態。更新後,預設的StorageClass出現後,未配置storageClassName
的PVC會自動更新使用預設的StorageClass。針對Job失效處理,引入2個新特性。
JobPodReplacementPolicy(Alpha特性門控)控制只有Pod達到Failed階段
status.phase: Failed
才被替換,而不是有deletionTimestamp
處於終止過程中,以避免出現2個Pod同時佔用索引和節點資源。JobBackoffLimitPerIndex (Alpha特性門控)通過配置
.spec.backoffLimitPerIndex
以限制Indexed Job一些索引的失敗重試次數,避免單個索引持續失敗達到.spec.backoffLimit
限制而導致整體失敗。
Indexed Job如果設定超過10萬完成數(
completion
)和超過1萬並發度(parallelism
),當大量Pod失敗時,可能無法追蹤Job的終止狀態。因此,在建立Job時,如果參數設定過大,將提示警告資訊。在CRD校正規則中添加
reason
和fieldPath
欄位後,允許校正失敗時返回指定原因和欄位路徑。更多資訊,請參見CRD校正運算式語言。Webhook過濾請求新增支援CEL運算式,最多支援定義64個匹配條件。更多資訊,請參見動態准入控制匹配條件。
新增SidecarContainers特性門控,支援Sidecar容器,最佳化容器啟動順序。例如,日誌收集Sidecar容器可以在其他容器之前啟動,以提高日誌收集的可靠性。更多資訊,請參見介紹原生Sidecar容器。該特性在v1.28處於Alpha階段,預設關閉。
PVC的
.status.resizeStatus
欄位替換為.status.allocatedResourceStatus
Map結構欄位,表示調整PVC大小時的狀態。更多資訊,請參見PersistentVolumeClaimStatus。Indexed Job類型和StatefulSet類型的Pod都在Label上添加了Pod索引(序號)。
驗證准入策略(ValidatingAdmissionPolicy)(Beta階段)提供聲明式的方式驗證資源請求,代替部署驗證准入Webhook,並支援使用CEL運算式編寫複雜的驗證規則。API Server會驗證資源請求是否符合CEL運算式,評估通過後才視為通過。
Kube Controller Manager新增
--concurrent-cron-job-syncs
配置CronJob控制器的並發度,新增--concurrent-job-syncs
配置Job控制器的並發度。更多資訊,請參見--concurrent-cron-job-syncs、--concurrent-job-syncs。API Server最佳化包括:
改進了在緩衝上執行GetList時的記憶體消耗。更多資訊,請參見GetList測試資料。
修複僅剩一個API Server副本時Kubernetes Service的Endpoint沒有摘除的問題,確保優雅終止時能夠及時摘除Endpoint。
將OpenAPI v2控制器設定為惰性彙總CRD資訊,並且大幅減少OpenAPI v2規範。在沒有用戶端請求OpenAPI v2時,減少API Server的CPU和記憶體消耗,同時提升大量CRD安裝時的效能(但用戶端首次請求會變慢)。建議將用戶端升級至支援使用OpenAPI v3。
新增Consistent Reads from Cache特性門控,允許通過監視緩衝(Watch cache)實現List一致性讀取。
豐富監控指標,支援通過訪問metrics介面擷取。
棄用功能
在Kubernetes 1.27版本
移除樹內AWS EBS儲存外掛程式,轉為外置的CSI外掛程式。請參見cloud-provider-aws。
廢棄Node
spec.externalID
欄位,欄位更新要求將會收到警告資訊。關於如何向用戶端發送警告資訊,請參見Helpful Warnings Ahead。Seccomp(安全計算模式)於v1.19進入GA,支援通過限制Pod或者單個容器可執行檔系統調度來提高工作負載安全性。對Alpha階段的
seccomp.security.alpha.kubernetes.io/pod
和container.seccomp.security.alpha.kubernetes.io
註解自v1.19起被棄用,v1.27完全移除。建議使用Pod或容器
securityContext.seccompProfile
欄位。KCM移除啟動命令
--pod-eviction-timeout
(刪除失敗節點的優雅期限)和--enable-taint-manager
(基於汙點的驅逐能力,預設啟用)。kubelet移除啟動命令
--container-runtime
、--container-runtime-endpoint
和--image-service-endpoint
。其中,--container-runtime
在移除dockershim後,預設值保持為remote
,自v1.24被棄用,在v1.27移除;--container-runtime-endpoint
和--image-service-endpoint
不支援啟動命令,改為使用設定檔代替啟動命令的方式進行配置。廢棄SecurityContextDeny准入外掛程式,並在未來版本中移除。
在Kubernetes 1.28版本
CephFS卷外掛程式代碼已經從樹內移除。
建議使用CephFS CSI驅動代替。
廢棄對Ceph RBD卷遷移到樹外CSI儲存驅動外掛程式的支援,將在後續版本徹底移除。
建議在移除樹內代碼前完成遷移。
RBD卷外掛程式(kubernetes.io/rbd)被廢棄,將在後續版本移除。
建議使用CephFS CSI驅動代替。
KMSv1被廢棄。如果還要相容使用KMSv1,需設定
--feature-gates=KMSv1=true
。更多資訊,請參見廢棄KMSv1。建議使用KMSv2。
KCM廢棄啟動命令
--volume-host-cidr-denylist
和--volume-host-allow-local-loopback
。kubelet廢棄
--azure-container-registry-config
。建議使用
image-credential-provider-config
和--image-credential-provider-bin-dir
。不再支援建立Windows節點池。
您可以建立其他動作系統的節點池,例如Alibaba Cloud Linux 3、ContainerOS 3.1等。更多資訊,請參見建立節點池。
棄用API
CSIStorageCapacity API可以暴露當前可用的儲存容量,確保Pod調度到有足夠儲存容量的節點上。CSIStorageCapacity的storage.k8s.io/v1beta1
API版本在v1.24中被廢棄,在v1.27中被移除。
建議使用storage.k8s.io/v1
,該API自v1.24起可用。更多資訊,請參見Storage Capacity Constraints for Pod Scheduling KEP。
特性門控
本小節僅列舉部分主要變化,更多資訊請參見Feature Gates。
在Kubernetes 1.27版本
新增
NodeLogQuery
Alpha特性門控,kubelet配置enableSystemLogHandler
和enableSystemLogQuery
為true
後可以使用kubectl查詢節點日誌。StatefulSetStartOrdinal
進入Beta。預設啟用,允許設定StatefulSet的Pod序號從非零數開始。StatefulSetAutoDeletePVC
進入Beta。新的StatefulSet PVC保留原則用於控制是否以及何時刪除從StatefulSet的volumeClaimTemplate
建立的PVC。IPv6DualStack
自v1.23進入GA後預設啟用,於v1.27徹底從各個組件代碼中移除。如果叢集中有手動設定,需刪除該配置後才能升級叢集。
新增
ServiceNodePortStaticSubrange
Alpha特性門控,降低NodePort連接埠分配衝突風險。該特性對連接埠範圍進行劃分,使得NodePort動態分配連接埠儘可能在數值較高的部分,並在衝突風險較低的連接埠段上使用靜態分配。更多資訊,請參見為NodePort Service分配連接埠時避免衝突。新增
InPlacePodVerticalScaling
Alpha特性門控,允許調整Pod的CPU和記憶體資源時不發生Pod和容器重啟。允許擴充卷大小的特性已經GA,有三個相關特性門控將移除,並預設啟用:
ExpandCSIVolumes
啟用CSI卷的擴充;ExpandInUsePersistentVolumes
啟用擴充正使用的PV;ExpandPersistentVolumes
啟用持久卷的擴充。CSIMigration
將樹記憶體儲外掛程式移到樹外CSI驅動程式,預設一直啟用,移除該特性門控。CSIInlineVolume
CSI內聯卷在v1.25進入GA,預設一直啟用,移除該特性門控。EphemeralContainers
臨時容器在v1.25進入GA,預設一直啟用,移除該特性門控。LocalStorageCapacityIsolation
支援emptyDir
卷本地臨時儲存的容量隔離,可以硬限制Pod對本機儲存資源消耗,超出限制的將被kubelet驅逐。該特性門控在v1.25進入GA,預設一直啟用,移除該特性門控。NetworkPolicyEndPort
支援NetworkPolicy通過配置endPort
欄位指定一系列連接埠,代替此前僅支援配置一個連接埠。該特性在v1.25進入GA,預設一直啟用,移除該特性門控。StatefulSetMinReadySeconds
支援StatefulSet配置minReadySeconds
,在v1.25進入GA,預設一直啟用,移除該特性門控。DaemonSetUpdateSurge
支援DaemonSet配置maxSurge
,在v1.25進入GA,預設一直啟用,移除該特性門控。IdentifyPodOS
支援為Pod指定作業系統,在v1.25進入GA,預設一直啟用,移除該特性門控。ReadWriteOncePod
進入Beta,預設啟用允許使用ReadWriteOncePod
訪問模式的PersistentVolume。
在Kubernetes 1.28版本
NodeOutOfServiceVolumeDetach
使用node.kubernetes.io/out-of-service
汙點將節點標記為停止服務時,節點上不能容忍這個汙點的Pod將被強制移除,並將立即進行卷分離操作。該特性門控在v1.28進入GA,預設一直啟用。AdmissionWebhookMatchCondition
預設啟用允許Webhook使用CEL運算式編寫匹配條件。UnknownVersionInteroperabilityProxy
進入Alpha,支援在存在多個版本的API Server時將請求代理到正確的API Server。更多資訊,請參見混合版本代理。IPTablesOwnershipCleanup
進入GA,不再建立KUBE-MARK-DROP和KUBE-MARK-MASQ iptables鏈。ConsistentListFromCache
進入Alpha,允許API Server通過監視緩衝(Watch cache)實現List一致性讀取。ProbeTerminationGracePeriod
進入GA,預設啟用支援設定探針層級的terminationGracePeriodSeconds。移除部分已經GA的特性門控,包括
DelegateFSGroupToCSIDriver
、DevicePlugins
、KubeletCredentialProviders
、MixedProtocolLBService
、ServiceInternalTrafficPolicy
、ServiceIPStaticSubrange
、EndpointSliceTerminatingCondition
。
參考連結
關於Kubernetes 1.27和1.28完整的變更記錄,請參見CHANGELOG-1.27、CHANGELOG-1.28。