ACK发布Kubernetes 1.28版本说明

阿里云容器服务 Kubernetes 版严格遵循社区一致性认证。本文介绍ACK发布Kubernetes 1.28版本的主要变更说明,包括升级注意事项、重大变更、功能特性、弃用功能和API、特性门控等。

组件版本说明

下表为ACS集群核心组件版本的支持情况。

核心组件

版本号

Kubernetes

v1.28.3-aliyunacs.2

etcd

v3.5.9

CoreDNS

v1.9.3.10-7dfca203-aliyun

CRI

containerd 1.6.22.1-20240524143336

CSI

v1.30.1-1.acs-685ce77-aliyun

CNI

Terway和TerwayControlplane v1.5.0及以上

升级注意事项

组件

注意事项

CephFS和Ceph RBD存储卷插件

如果集群使用了CephFS和RBD卷插件,需检查是否已经不再依赖Kubernetes自身提供的插件驱动,改用树外驱动(Off-Tree Driver)并评估相关兼容性、稳定性或性能方面的风险。

相关概念

了解Kubernetes版本的功能变更和弃用资源前,您可能需要了解相关概念。

特性门控(Feature Gates)

特性门控(Feature Gates)用于描述一个特性的多个阶段。一般有三个阶段:

  • Alpha阶段:默认禁用。

  • Beta阶段:通常默认启用。

  • GA阶段:一直默认启用,且不能禁用,不再需要相应的特性门控。

重大变更

  • 针对调度器,Kubernetes v1.28版本优化了调度逻辑,减少无效的重试,从而提高调度器的整体性能。

    如集群中使用了自定义调度器插件,建议对调度器插件进行改造和升级,以提升调度器性能。更多信息,请参见调度框架变化

  • 针对CSI迁移,Kubernetes社区一直推动将存储相关插件从源码中移除,改用实现了CSI标准接口的树外驱动,并已经于v1.25完成GA,于v1.27移除了APIstorage.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.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校验规则中添加reasonfieldPath字段后,允许校验失败时返回指定原因和字段路径。更多信息,请参见CRD校验表达式语言

  • Webhook过滤请求新增支持CEL表达式,最多支持定义64个匹配条件。更多信息,请参见动态准入控制匹配条件。

  • 新增SidecarContainers特性门控,支持Sidecar容器,优化容器启动顺序。例如,日志收集Sidecar容器可以在其他容器之前启动,以提高日志收集的可靠性。更多信息,请参见介绍原生Sidecar容器。该特性在v1.28处于Alpha阶段,默认关闭。

  • PVC的.status.resizeStatus字段替换为.status.allocatedResourceStatusMap结构字段,表示调整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.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节点池。

弃用API

CSIStorageCapacity API可以暴露当前可用的存储容量,确保Pod调度到有足够存储容量的节点上。CSIStorageCapacity的storage.k8s.io/v1beta1API版本在v1.24中被废弃,在v1.27中被移除。

建议使用storage.k8s.io/v1,该API自v1.24起可用。更多信息,请参见Storage Capacity Constraints for Pod Scheduling KEP

特性门控

本小节仅列举部分主要变化,更多信息请参见Feature Gates

在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的特性门控,包括DelegateFSGroupToCSIDriverDevicePluginsKubeletCredentialProvidersMixedProtocolLBServiceServiceInternalTrafficPolicyServiceIPStaticSubrangeEndpointSliceTerminatingCondition

参考链接

关于Kubernetes 1.27和1.28完整的变更记录,请参见CHANGELOG-1.27CHANGELOG-1.28