抢先看!Kubernetes v1.21 新特性一览
作者 | 倪朋飛
來源 |?漫談云原生
頭圖 | 下載于視覺中國
Kubernetes v1.21 下個月就要發(fā)布了(v1.21.0 將于 4 月 8 日發(fā)布),本文梳理該版本帶來的新特性,以便你為下個月的升級做好準備。
? PodSecurityPolicy 棄用
PodSecurityPolicy(PSP)是 Kubernetes 1.8 開始就支持的 Beta 特性,大量應(yīng)用于容器的安全策略控制。但由于其 API 不夠靈活、認證模型不夠完善且配置更新繁瑣等缺陷,PodSecurityPolicy 將在 v1.21 正式棄用[1],并將在 v1.25 中從代碼庫中刪除。已經(jīng)使用 PodSecurityPolicy 的用戶建議遷移到 Gatekeeper[2]。
? 不可變 ConfigMap/Secret 進入穩(wěn)定版
當集群包含大量 ConfigMap 和 Secret 時,大量的 watch 事件會急劇增加 kube-apiserver 的負載,并會導致錯誤配置過快傳播到整個集群。在這種情況中,給不需要經(jīng)常修改的 ConfigMap 和 Secret 設(shè)置 immutable: true 就可以避免類似的問題。
注意,設(shè)置 immutable: true 之后,ConfigMap 和 Secret 內(nèi)容更新時需要刪除并重新創(chuàng)建,且使用它們的 Pod 也需要刪除重建。
? IPv4/IPv6 雙棧支持 Beta
IPv4/IPv6 雙棧支持在 v1.20 的時候進行了重構(gòu),并將于 v1.21 中進入 Beta 版本(默認開啟),kubeadm 也已經(jīng)支持創(chuàng)建 IPv4/IPv6 雙棧集群。該特性開啟后,Kubernetes Service 和 Pod 會同時分配 IPv4 和 IPv6 兩個地址。
注意,如果使用了 CNI 插件和云服務(wù)商擴展(Cloud Provider),CNI 插件和云服務(wù)商擴展也需要支持 IPv4/IPv6 雙棧。
? CSIVolumeHealth Alpha 和 CSIStorageCapacity Beta
從 v1.21 開始,Kubernetes 支持 CSI 存儲插件的 Volume 健康檢查(Alpha 版),CSI 插件需要實現(xiàn)外部健康監(jiān)控控制器。當 Volume 或者 Node 出現(xiàn)異常時,該控制器會向 Volume 所屬的 PVC 以及使用該 PVC 的 Pod 發(fā)送一個異常事件。
CSIStorageCapacity 用于跟蹤 CSI 存儲容量并確保 Pod 調(diào)度到足夠存儲容量的節(jié)點上。該特性從 v1.21 開始進入 Beta 階段,并默認開啟。注意,使用該特性需要 CSI 驅(qū)動程序?qū)崿F(xiàn)對應(yīng)的接口。
? TTL 控制器 Beta
TTL 控制器用來自動清理已經(jīng)結(jié)束的 Pod,如處于 Complete 或 Failed 狀態(tài)的 Job。Pod 停止之后的 TTL 可以通過 .spec.ttlSecondsAfterFinished 來設(shè)置。
注意,該特性要求集群中各節(jié)點(包括控制節(jié)點)的時間一致,比如在所有節(jié)點中運行 NTP 服務(wù)。
? GenericEphemeralVolume Beta
通用臨時卷(GenericEphemeralVolume)類似于 emptyDir 卷,但它更加靈活:
存儲可以是本地的,也可以是網(wǎng)絡(luò)存儲。
卷可以有固定的大小,Pod 不能超量使用。
卷可能有一些初始數(shù)據(jù),這取決于驅(qū)動程序和參數(shù)。
當驅(qū)動程序支持,卷上的典型操作(如快照、克隆、擴展等)也被支持。
? Kubelet 內(nèi)存控制策略 Alpha
內(nèi)存控制策略是 Kubelet 在 v1.21 中新增的一個 Alpha 特性,用于為 Pod 提供 NUMA 內(nèi)存。Kubelet 新增了?--memory-manager-policy 用于配置內(nèi)存控制策略,它支持兩個策略:
默認策略是 none,等同于內(nèi)存控制策略未開啟;
static 策略:為 Pod 分配 NUMA 內(nèi)存并確保 Guaranteed Pod 預留足夠的內(nèi)存(Kubelet 狀態(tài)保存在?/var/lib/kubelet/memory_manager_state 文件中)。
? ServiceLoadBalancerClass Alpha
以前 LoadBalancer 類型的服務(wù)都需要云服務(wù)商擴展(Cloud Provider)去配置云上負載均衡器,并且整個集群中只能運行一個 Cloud Provider。Kubernetes v1.21 新增的 ServiceLoadBalancerClass 特性允許一個集群中運行多個負載均衡器的實現(xiàn),而 Service 可以通過 spec.loadBalancerClass 指定使用哪個具體實現(xiàn)(類似于 Ingress Controller)。
? PodDeletionCost Alpha
以前從 ReplicaSet 刪除 Pod 時只能設(shè)置副本數(shù)量而不能指定要刪除的 Pod,而 Kubernetes v1.21 新增的 PodDeletionCost 特性允許用戶設(shè)置哪些 Pod 優(yōu)先刪除。使用該特性時需要給 Pod 增加一個 annotation controller.kubernetes.io/pod-deletion-cost,其值表示刪除一個 Pod 的成本,值越小代表越優(yōu)先刪除。當 annotation 不存在時,表示其刪除成本為 0。
? Indexed Jobs Alpha
通常,當使用 Job 來運行分布式任務(wù)時,用戶需要一個單獨的系統(tǒng)來在 Job 的不同 worker Pod 之間分配任務(wù)。比如,設(shè)置一個工作隊列,逐一給每個 Pod 分配任務(wù)。Kubernetes v1.21 新增的 Indexed Job 會給每個任務(wù)分配一個數(shù)值索引,并通過 annotation batch.kubernetes.io/job-completion-index 暴露給每個 Pod。使用方法為在 Job spec 中設(shè)置 completionMode: Indexed。
? TopologyAwareHints Alpha
服務(wù)拓撲(Service Topology)在 Kubernetes v1.21 中已棄用,并將在 v1.22 中刪除。Kubernetes v1.21 新增的拓撲感知提示提供了類似的功能。該特性開啟后,EndpointSlice 控制器將填充 EndpointSlice 中每個 Endpoint 上的提示字段,以將其分配到一個區(qū)域。然后,諸如 kube-proxy 這樣的組件在配置請求路由時就可以使用這些提示。
? 其他需要留意的新特性
CronJob 進入穩(wěn)定版本,已有用戶注意切換 API 版本到 apiVersion: batch/v1。
Sysctls 進入穩(wěn)定版本,用戶終于有一個穩(wěn)定的 API 來配置 Sysctl 了。
Pod disruption budgets(PDB)進入穩(wěn)定版本,已有用戶注意切換 API 版本到 apiVersion: policy/v1。
RootCAConfigMap 進入穩(wěn)定版本,kube-controller-manager 將會在每個 namespace 發(fā)布一個名為 kube-root-ca.crt 的 ConfigMap,內(nèi)容是 ca.crt,可用來驗證 Kubernetes API 連接。
EndpointSlice 進入穩(wěn)定版本,已有用戶注意切換 API 版本到 apiVersion: discovery.k8s.io/v1。
ServiceAccountIssuerDiscovery 進入穩(wěn)定版本,該特性使得用戶能夠用聯(lián)邦的方式結(jié)合使用 Kubernetes 集群(_Identity Provider_,標識提供者)與外部系統(tǒng)(_relying parties_, 依賴方)所分發(fā)的服務(wù)賬號令牌。
CRIContainerLogRotation 進入穩(wěn)定版本,kubelet 將會自動為 containerd 等 CRI 容器運行時輪換日志。
結(jié)構(gòu)化日志(Structured Logging)進入 Beta,很多組件的日志都改成以 JSON 格式記錄,這樣第三方日志處理系統(tǒng)就可以方便地從日志中解析出日志所對應(yīng)的資源對象和資源屬性。
EfficientWatchResumption 進入 Beta,kube-apiserver 重啟后 watch 緩存將更高效的恢復,更好的支持大規(guī)模集群。
CSIServiceAccountToken 進入 Beta,使得 CSI 驅(qū)動程序可以獲取 Pod 的 service account token。
GracefulNodeShutdown 進入 Beta,Kubelet 將會檢測 Node 的狀態(tài)并在 Node 關(guān)閉前終止其上運行的 Pod(使用前需要配置 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPods)。
Network Policy 支持設(shè)置端口范圍(port 和 endPort),大量端口時不再需要每個端口單獨列出。
參考鏈接:
https://github.com/kubernetes/kubernetes/pull/97171
https://github.com/open-policy-agent/gatekeeper
你覺得這些特性怎么樣?
歡迎來評論區(qū)聊聊~
CSDN協(xié)同行業(yè)大佬 打造13長熱門知識圖譜及IT成長路線 助力千萬IT人成長,快速實現(xiàn)職場進階! 更多精彩推薦 ?Kubernetes 和 Docker,到底什么關(guān)系??PassMark 更新排行,蘋果 M1 殺瘋了?干貨!Redis集群工作原理解析點分享點收藏點點贊點在看總結(jié)
以上是生活随笔為你收集整理的抢先看!Kubernetes v1.21 新特性一览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 俯瞰云原生,这便是供应层
- 下一篇: 规范白盒生态 S³IP助力未来可预期服务