阿里云容器服務Kubernetes版(ACK)嚴格遵循社區一致性認證。本文介紹ACK發布Kubernetes 1.22版本所做的變更說明。
版本升級說明
ACK針對Kubernetes 1.22版本提供了組件的升級和優化。
核心組件 | 版本號 | 升級注意事項 |
Kubernetes | 1.22.15-aliyun.1 |
|
etcd | 3.5.1 | 無 |
CoreDNS | v1.9.3.6-32932850-aliyun | 此次升級不會對業務造成影響,支持的新特性如下:
|
CRI |
| 無 |
containerd 1.4.8 | 無 | |
CSI | v1.26 | 無 |
CNI | Flannel 0.15.1.4-e02c8f12-aliyun | 此次升級不會對業務造成影響,支持的新特性如下:
|
Terway | 無 | |
NVIDIA Container Runtime | 3.7.0 | 無 |
Ingress Controller | 1.1.0-aliyun.1 | 組件升級可能會造成業務的瞬斷和配置兼容性問題,請您在組件升級過程中充分驗證無誤后,再進行集群的升級。 |
版本解讀
資源變更和廢棄
【變更】MutatingWebhookConfiguration和ValidatingWebhookConfiguration資源不再支持
admissionregistration.k8s.io/v1beta1
API。如果使用舊版本API創建準入或變換Webhook配置,會導致配置創建失敗,進而影響Webhook服務的使用,請盡快使用admissionregistration.k8s.io/v1
替代。【變更】CustomResourceDefinition資源不再支持
apiextensions.k8s.io/v1beta1
API。如果使用舊版本API創建自定義資源定義,會導致定義創建失敗,進而影響調和(reconcile)該自定義資源的控制器,請盡快使用apiextensions.k8s.io/v1
替代。【變更】APIService資源不再支持
apiregistration.k8s.io/v1beta1
API。如果使用舊版本API管理Kubernetes擴展API服務,會影響Kubernetes擴展API的服務,請盡快使用apiregistration.k8s.io/v1
替代。【變更】TokenReview資源不再支持
authentication.k8s.io/v1beta1
API。如果使用舊版本API進行授權的驗證,會導致驗證失敗,進而影響應用的正常工作,請盡快使用authentication.k8s.io/v1
替代。【變更】SubjectAccessReview資源不再支持
authorization.k8s.io/v1beta1
API。如果使用舊版本API進行授權的驗證,會導致驗證失敗,進而影響應用的正常工作,請盡快使用authorization.k8s.io/v1
替代。【變更】CertificateSigningRequest資源不再支持
certificates.k8s.io/v1beta1
API。如果使用舊版本API請求簽發證書,會導致簽發失敗,請使用certificates.k8s.io/v1
替代。【變更】Lease資源不再支持
coordination.k8s.io/v1beta1
API。如果使用舊版本API進行選主操作,會導致選主失敗,進而影響應用的正常工作,請盡快使用coordination.k8s.io/v1
替代。【變更】Ingress和IngressClass資源不再支持
networking.k8s.io/v1beta1
和extensions/v1beta1
API。如果使用舊版本API管理Ingress,會影響應用對外暴露服務,請盡快使用networking.k8s.io/v1
替代。【變更】ClusterRole、ClusterRoleBinding、Role和RoleBinding資源不再支持
rbac.authorization.k8s.io/v1beta1
API。如果使用舊版本API管理RBAC資源,會影響應用的權限服務,甚至無法在集群內正常使用,請盡快使用rbac.authorization.k8s.io/v1
替代。【變更】CSIDriver、CSINode、StorageClass和VolumeAttachment資源不再支持
storage.k8s.io/v1beta1
API。如果使用舊版本API管理CSI資源,會影響集群內的存儲服務提供,導致集群內無法正常使用CSI,請盡快使用storage.k8s.io/v1
替代。【變更】PriorityClass資源不再支持
scheduling.k8s.io/v1beta1
API。如果使用舊版本API管理集群內的容器組優先類型,會導致操作失敗,請使用scheduling.k8s.io/v1
替代。【廢棄】Dockershim目前被標記為廢棄,計劃于1.24版本后移除。更多信息,請參見EP-2221和cri-containerd。
在升級到1.24版本之前,請參考以下步驟,做好節點運行時的調整:
根據容器組數量,規劃好非Docker運行時的節點容量(規格、數目)。
選擇業務低峰期,擴容相應容量的節點。
逐一對使用Docker作為運行時的節點做排水操作。每次排完一個節點,請確認業務容器組都恢復后,再繼續操作下一節點的排水。
待所有Docker運行時的節點都結束排水,且無業務容器組運行,再進行最后的移除。
【廢棄】在Kubernetes 1.22.10及以后的版本中,kube-proxy去除了監聽NodePort的邏輯,當NodePort端口范圍(即APIServer的ServiceNodePortRange參數)與內核
net.ipv4.ip_local_port_range
端口范圍有沖突的情況下,可能會導致偶發的TCP無法連接的情況,從而導致健康檢查失敗、業務異常等問題。因此,升級集群版本至1.22.10及以后版本時,請確保集群NodePort端口范圍與任意節點net.ipv4.ip_local_port_range
端口范圍不存在沖突。關于如何配置NodePort端口范圍,請參見如何正確配置NodePort范圍?或Kubernetes社區PR。
特性增強
1.21版本后,默認開啟不可修改ConfigMap和Secret (ImmutableEphemeralVolumes)特性。通過標記ConfigMap和Secret為不可修改,可以顯著的降低APIServer的壓力。更多信息,請參見Secret和ConfigMap。
1.21版本后,默認開啟IPv4/IPv6雙棧(IPv6DualStack)特性。除了在創建集群時配置正確的IPv4和IPv6無類別域間路由外,還需要集群內安裝支持雙棧的CNI插件。更多信息,請參見IPv4/IPv6雙協議棧。
1.21版本后,默認開啟節點優雅下線(GracefulNodeShutdown)特性。該特性目前僅支持Linux節點,在Kubelet感知節點將要(主動進入)停止并且在特定的停止周期(Shutdown Period)內完成對Pod的下線。更多信息,請參見節點。
1.21版本后,默認開啟快速恢復監聽緩存(EfficientWatchResumption)的特性。在APIServer發生重啟后,將更高效的恢復監聽型的緩存,更好的支持大規模的集群。更多信息,請參見KEP-1904。
1.22版本后,默認開啟CSI存儲容量(CSIStorageCapacity)特性。基于該特性,調度器(Kube Scheduler) 可以比較卷(Volume)的大小和節點上的存儲容量,有助于更快的調度使用對應卷的容器組。更多信息,請參見存儲容量。
1.22版本后,默認開啟可配置守護進程集的滾動更新峰值(DaemonSetUpdateSurge)特性。對支持滾動更新的守護進程集進行滾動更新時,可以聲明
.spec.strategy.rollingUpdate.maxSurge
來指定更新過程的最大更新峰值。更多信息,請參見Perform a Rolling Update on a DaemonSet。1.22版本后,默認開啟并行任務支持索引(IndexedJob)特性。在任務(Job)中聲明.spec.completionMode為Indexed,即可在運行的容器組(Pod)的中得到一個新注解(Annotation)batch.kubernetes.io/job-completion-index,同時容器會被注入一個新的環境變量(Environment Variable)JOB_COMPLETION_INDEX。更多信息,請參見Kubernetes。
1.22版本后,默認開啟內存管理(MemoryManager)特性。目前該特性僅適用于Linux節點,實現NUMA感知的內存管理,對有內存使用質量保證要求的應用,能帶來顯著的使用性能提高。ACK 暫不配置任何和該特性相關的內存預留值。更多信息,請參見運行時的內存映射和使用NUMA感知內存管理器。
1.22版本后,默認開啟容器組親和性配置命名空間選擇器(PodAffinityNamespaceSelector)特性。容器組的親和性策略不再局限于同命名空間(Namespace)的標簽選擇,可以進行跨命名空間(Namespace)的標簽選擇,實現更完善的親和性調度策略。更多信息,請參見KEP-2249。
1.22版本后,默認開啟容器組刪除開銷(PodDeletionCost)特性。容器組可以根據其利用率,調整對應的刪除開銷,使利用率越低的容器組得到更低的刪除開銷。更多信息,請參見ReplicaSet。
1.22版本后,默認開啟可配置容器組調度搶占提名節點(PreferNominatedNode)特性。調度器(Kube Scheduler)會優先嘗試調度容器組到被提名的節點。只有被提名(Nominated)節點不符合被調度的要求時,調度器才會啟動對剩余節點的評估流程。更多信息,請參見KEP-1923。
1.22版本后,默認開啟可配置探針級別的優雅終止期限(ProbeTerminationGracePeriod)特性。該特性只能用在存活針中,配置探針級別(Pod-level)的teminationGracePeriodSeconds時長,縮短容器組失敗后等待重啟的時間。更多信息,請參見配置存活、就緒和啟動探測器。
1.22版本后,默認開啟網絡策略末端端口可配置(NetworkPolicyEndPort)特性。基于該特性,可以配置網絡策略(NetworkPolicy)來支持范圍性的端口值。更多信息,請參見網絡策略。
1.22版本后,默認開啟基于對數化比較增加副本縮容的隨機性(LogarithmicScaleDown)特性。基于該特性,可以增強容器組被縮容的隨機性,緩解由于容器組拓撲分布約束帶來的問題。更多信息,請參見在按比例縮小時應考慮Pod拓撲擴展約束和KEP-2185。
1.22版本后,默認開啟支持任務掛起(SuspendJob)特性。基于該特性,可以更好的控制任務的生命周期,例如一個正在運行的任務掛起,之后再恢復執行。更多信息,請參見介紹暫停的工作。
1.22版本后,默認開啟配置服務內部流量策略(ServiceInternalTrafficPolicy)特性。基于該特性,可以設置服務將內部流量路由到當前節點上就緒的端點(Local),或路由到集群范圍(Cluster)的所有就緒端點。更多信息,請參見服務。
1.22版本后,默認開啟配置服務負載均衡類型(ServiceLoadBalancerClass)特性,實現自定義的負載均衡。更多信息,請參見設置負載均衡器實現的類別。
1.22版本后,默認開啟支持配置負載均衡類型的服務不分配節點端口(ServiceLBNodePortControl)特性。該特性適用于直接將流量路由到容器組的場景,基于該特性,可以通過配置類型為負載均衡的.spec.allocateLoadBalancerNodePorts為false,從而禁用節點端口的分配。更多信息,請參見設置負載均衡器實現的類別。
1.22版本后,默認開啟可配置內存卷大小(SizeMemoryBackedVolumes)特性。該特性目前僅支持Linux節點,基于該特性,可以顯式地通過emptyDir.sizeLimit定義需要的目錄大小,提高容器組調度的透明性。更多信息,請參見:KEP-1967。
1.22版本后,默認開啟服務端應用(Server-side Apply)特性。該特性可以更便捷的了解一個資源中字段變更的來源、時間和操作等。更多信息,請參見服務器端申請。
1.22版本后,CSI接口對Windows容器的支持進入穩定階段。在不支持特權容器的操作系統(例如Windows Server 2019、WindowsServer Core version 2004等)上,Windows容器可以通過基于CSI代理操縱主機上的存儲模塊。由于該特性需要兼容CSI插件,請確認CSI插件的情況,再使用該功能。更多信息,請參csi-代理。
1.22版本后,默認開啟請求簽發更短時效證書(CSRDuration)特性。基于該特性,當提交的證書簽發請求(CertificateSigningReqeust, CSR)內聲明.spec.expirationSeconds時,證書簽發的時效由該聲明數值和控制管理器的參數
--cluster-signing-duration
的較小值決定。ACK 默認配置控制管理器為10年。更多信息,請參見簽名者。在1.22版本后,BoundServiceAccountTokenVolume特性門控GA,Pod中通過非projected投影方式掛載的Service Account會有一年的默認有效期。更多信息,請參見特性說明。
特性引入
1.21版本后,引入持久卷(PersistentVolume)健康度監控(Health Monitor)特性。持久卷健康度監控可以幫助工作負載(Workload)感知持久卷的健康程度,從而保證數據不會從受損的持久卷中讀出或者寫入。ACK默認開啟CSI卷健康探測特性。由于該特性需要CSI插件的支持,只有使用的CSI插件支持該特性,才能正常使用該功能。更多信息,請參見卷健康監測。
1.22版本后,引入基于cgroups v2實現內存資源的服務質量(Quality of Service)保證特性。當資源使用緊張時(例如突發性的大資源量申請),CPU資源可以通過分配限速來提高資源的可用性,但無法實現內存資源的分配限速。為了支持內存資源的分配限速,Linux內核社區在cgroups v2中對相關接口進行了優化調整。ACK默認開啟內存服務質量保證特性。由于該特性需要操作系統的內核支持,僅支持Linux節點,只有加入的節點支持該特性,才能正常使用該功能。更多信息,請參見cgroup v1接口支持memcg QoS功能和2570-memory-qos。
1.22版本后,引入基于主機進程容器(HostProcess containers)實現Windows特權(Privileged)容器的特性。ACK默認開啟Windows主機進程容器特性。由于該特性需要操作系統的內核支持,只有加入的節點支持該特性,才能被正常使用。更多信息,請參見Windows Server 2022上的Windows容器的新增功能和創建Windows HostProcess Pod。
1.22版本后,引入工作負載(Workload)可使用節點交換內存特性,僅支持Linux節點。針對有對交換內存使用訴求的場景,例如節點管理員希望通過交換內存獲得節點性能的調整和減少由于內存競爭帶來的穩定性問題,應用開發者開發的應用可以通過交互內存獲得更好的性能等。ACK暫不開啟交換內存的特性。更多信息,請參見交換內存管理和KEP-2400。
1.22版本后,引入為工作負載配置默認seccomp配置特性,僅支持Linux節點。開啟該特性后,將使用RuntimeDefault策略作為默認的seccomp配置。但由于某些工作負載可能相比其他工作負載需要更少的系統調用限制,啟用默認配置可能會導致運行失敗。ACK暫不開啟seccomp默認配置的特性。更多信息,請參見啟用RuntimeDefault作為所有工作負載的默認seccomp配置文件。
特性更替
1.21版本后,容器組安全策略(PodSecurityPolicy,PSP)進入廢棄階段,計劃在1.25版本完全移除該資源定義。ACK默認開啟容器組安全特性。您可以在1.22版本中逐步更換替代已有的PSP資源。更多信息,請參見Pod安全準入和PodSecurityPolicy棄用:過去、現在和未來。
1.21版本后,廢棄通過在服務(Service)中描述拓撲關鍵字(topologyKeys)來實現的服務流量拓撲感知(ServiceTopology)特性,由拓撲感知提示特性替代。ACK默認不開啟服務流量拓撲感知特性。如果已經開啟該特性,可以在1.22版本中同時開啟拓撲感知提示特性,并在該版本中逐步替換使用新的特性。更多信息,請參見拓撲感知提示。
ACK對Kubernetes 1.22版本的增強
可觀測性
豐富了APIServer進行訪問請求的指標信息,提高APIServer的可觀測性。
對于ACK Pro版、ACK Serverless集群Pro版或邊緣Pro版集群,可透出托管面組件的核心指標,提高托管面核心部件的可觀測性。
穩定性
對于所有集群類型:
增加對存儲層的保護,降低冷啟動時對etcd的沖擊。
可根據請求的來源、類型或路由的組合,開啟APIServer的限流操作,降低冷啟動時對APIServer的沖擊。
性能優化
Kubelet:在原地升級kubelet時,最大程度保證不重啟容器。更多信息,請參見kubelet計算容器是否發生變化會導致集群范圍的中斷。
KubeProxy:兼容Alibaba Cloud Linux2 (kernel-4.19.91-23)及之上的版本,在開啟IPVS模式時,不設置conn_reuse_mode為0。更多信息,請參見[ipvs]在 Linux內核版本>=v5.9上設置conn_reuse_mode=1。
ACK Serverless集群:在Virtual Node未就緒時,不主動驅逐ECI Pod,減少業務損失。
ACK Pro版或邊緣Pro版:調度器增強,支持Gang Scheduling、CPU拓撲感知、GPU拓撲感知等調度增強。更多信息,請參見ACK Pro版集群概述。
問題修復
Kube Controller Manager:修復了特定場景下EndpointSlices資源泄露的問題。詳細信息,請參見Fixing how EndpointSlice Mirroring handles Service selector transitions。