Kubernetes 1.24發布了—有什么新變化
原本計劃于4月19日發布的Kubernetes 1.24,一直延遲到5月3日才發布。此版本帶來了46項增強,其中13項升級到穩定版,14項是不斷改進的現有功能,13項是全新的,6項已棄用的功能。
主要更新如下:
完全移除Dockershim
在 v1.20 中標記棄用后,dockershim 組件已從 kubelet 中刪除。從 v1.24 開始,您將需要使用其他受支持的運行時之一(例如 containerd 或 CRI-O),或者如果您依賴 Docker 引擎作為容器運行時,則使用 cri-dockerd。
CSI卷健康監控
能夠加載一個檢查持久卷健康狀況的sidecar是一個受歡迎的補充。現在,管理員將能夠更好、更快地對 Kubernetes 外部刪除持久卷等事件做出反應,必然會增加 Kubernetes 集群的可靠性。
kubelet:公開 OOM 指標
從 1.24 開始,kubelet提供了一個新的 Prometheus 指標,用于記錄容器中發生的OOM(OutOfMemory)事件的數量。當內存限制不能滿足容器的使用和需求時,這提供了對 Kubernetes 操作中反復出現的問題的更多可見性。
使用這個新指標,SRE 可以更好地了解問題的最終原因,并更好地確定它是反復出現的問題還是邊緣情況。更快的故障排除,更快樂的用戶。
Beta API 默認關閉
之前的版本,默認會啟用被認為不穩定的 Beta API,這加速了這些功能的采用,然而也會造成問題。例如,一個測試版 API 有一個錯誤,它將出現在 90% 的已部署集群上。
從 Kubernetes 1.24 開始,新的 beta API 將默認禁用。
選擇您想要的 LoadBalancer 類型
在Kubernetes 1.24中,Service.Spec.LoadBalancerClass GA。
在托管 Kubernetes 集群中創建 LoadBalancer 類型的服務會創建一個負載均衡器。Kubernetes 服務提供者負責創建這個負載均衡器。
通過這個LoadBalancerClass 字段,用戶可以指定他們想要的負載均衡器類型,這將允許云提供商本地提供不同類型的負載均衡器。到目前為止,主要依賴于注解或自定義控制器,這可能是笨重且違反直覺的:注解通常因提供者特定控制器的一個版本而異,希望這將使托管 Kubernetes 服務的用戶更容易聯網。
不推薦使用 Service.Spec.LoadBalancerIP 字段
說到注解,Kubernetes 團隊決定棄用Service.Spec.LoadBalancerIP 字段。原因是它沒有被詳細說明,并且在不同的實現中具有不同的含義,也不支持需要 IPv4 和 IPv6 地址的雙棧Service。
官方建議提供者依賴注釋而不是該字段。
OpenAPI v3
Kubernetes 1.24 提供了以OpenAPI v3 格式發布其 API 的 beta 支持。
存儲容量和卷擴展普遍可用
存儲容量跟蹤支持通過CSIStorageCapacity 對象 公開當前可用的存儲容量, 并增強使用具有后期綁定的 CSI 卷的 pod 的調度。
卷擴展增加了對調整現有持久卷大小的支持。
gRPC探針升級到 Beta
在Kubernetes 1.24 中,gRPC探測功能已進入測試階段,默認情況下可用。您現在可以在 Kubernetes 中為您的 gRPC 應用程序本地配置啟動、活動和就緒探測,而無需公開 HTTP 端點或使用額外的可執行文件。
服務帳戶默認沒有Secret
只會影響使用 Kubernetes 存儲在 Secrets 中的長期服務帳戶令牌的 Kubernetes 用戶。
在 Kubernetes 1.23 之前,在集群中創建服務帳戶會導致 Kubernetes 自動為該服務帳戶創建一個帶有令牌的 Secret。此令牌永不過期,這可能很有用,但也是一個安全問題。從 Kubernetes 1.24 開始,這些 Secret 將不再自動創建。
您可能會問自己:該令牌不是安裝到使用該服務帳戶的 Pod 中嗎?不。創建新 Pod 時,kubelet 使用TokenRequest API為該 Pod 生成一個令牌,該令牌被掛載為一個投影卷。令牌在一小時后或 Pod 被刪除時過期,以先到者為準。Kubelet 會定期更新令牌,因此 Pod 始終掛載有效令牌。
如果您絕對需要存儲在 Secret 中的永不過期令牌,您仍然可以通過自己創建 Secret 并添加特殊注釋來獲得。然后 Kubernetes 將為您將令牌添加到 Secret。
RuntimeClass.Overhead字段GA
使用默認容器運行時之外的原因有很多:運行不受信任的工作負載或需要 GPU 的工作負載,僅舉幾例。Kubernetes 原生支持為這些用例定義自定義運行時類。
這些自定義運行時可能會產生一些開銷:運行時本身而不是內部運行的容器使用 CPU 和內存。RuntimeClass.Overhead 字段在Kubernetes 1.24 中達到普遍可用性,允許集群操作員指定此開銷,以便 Kubernetes 在制定調度決策時將其考慮在內。
其他值得關注的更新:
- maxUnavailable for StatefulSets。
- CronJobs支持TimeZone。
- NetworkPolicyStatus。
- 使用go 1.18.1構建。
- non-graceful node shutdown。
詳情參見
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md。