阿里雲Container ServiceKubernetes版(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 | 1.20.7-aafce42-aliyun | 無 |
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。