ACK发布Kubernetes 1.28版本说明

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

组件版本说明

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

核心组件

版本号

Kubernetes

1.28.9-aliyun.1、1.28.3-aliyun.1

etcd

v3.5.9

CoreDNS

v1.9.3.10-7dfca203-aliyun

CRI

containerd 1.6.20

CSI

v1.26.5-92f859a-aliyun

CNI

Flannel v0.15.1.22-20a397e6-aliyun

Terway和TerwayControlplane v1.5.0及以上

NVIDIA Container Runtime

v3.13.0

Ingress Controller

v1.8.0-aliyun.1

升级注意事项

组件

注意事项

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.27版本

  • 修正Pod终止状态,将处于Pending中被删除的Pod设置为Failed,将处于Running中被删除的Pod设置为Succeeded或者Failed(具体状态取决于容器退出状态)。此修正解决了当Pod配置了失败策略时删除Pod可能卡在Pending阶段的问题。

    但如果Pod配置了RestartPolicy=Always,Pod删除后可能会以Succeeded结束。您需为此调整开发的控制器。更多信息,请参见给不需要重启的Pod设置终止状态

  • 持久卷的ReadWriteOncePod访问模式进入Beta,默认支持仅允许一个Pod写入存储卷。更多信息,请参见持久卷的单Pod访问模式升级到Beta

  • Pod拓扑分布约束控制Pod在集群内合理分布在多个可用区,有多个增强特性进入Beta,包括支持设定Pod最少分布在几个域(minDomains),支持调度时考虑污点(nodeTaintsPolicy)、亲和性(nodeAffinityPolicy),解决滚动更新时结果不符合约束(whenUnsatisfiable)的问题。更多信息,请参见更多精细粒度的Pod拓扑分布策略

  • 服务端字段校验对发送到API Server上的资源进行校验,功能进阶至GA。kubectl将跳过客户端校验,自动使用Strict模式下的服务端字段校验,并在验证失败时报错。更多信息,请参见服务器端字段校验和 OpenAPI V3 进阶至 GA

  • OpenAPI v3是OpenAPI的最新标准,Kubernetes在v1.23添加,在v1.27进入GA。更多信息,请参见服务器端字段校验和 OpenAPI V3 进阶至 GA

  • HPA允许给Pod里的容器配置ContainerResource,根据各个容器的资源使用量进行自动扩缩。该功能在v1.27进入Beta。与原有的Resource类型考虑Pod整体资源使用平均值相比,考虑每个容器使用量可以解决此问题:Pod存在多个容器时Sidecar容器使用率低而业务容器使用率高,平均计算后没有达到扩容阈值,最终无法扩容。

  • StatefulSet多个特性进入Beta,包括支持Pod从非零数作为起始序号,支持指定删除和缩容时自动删除创建的PVC。

  • 新增特性允许在不重启Pod和容器的情况下调整Pod容器中resources字段下的CPU和Memory。节点会基于requests为Pod分配资源,基于limits限制资源使用。Pod新增了部分字段支持该特性,请参见调整分配给容器的CPU和内存资源。该特性在v1.27处于Alpha阶段,默认关闭。

  • kubelet支持修改serializeImagePullsfalse,实现并发拉取镜像代替默认的串行拉取。v1.27新增maxParallelImagePulls字段,限制并发拉取的镜像数量,防止镜像拉取消耗过多的网络带宽或磁盘I/O。

  • 针对持久卷快照能力,除了已经提供的Volume Snapshot API外,新增一致性快照Volume Group Snapshot能力,允许在同一时间点对多个卷生成快照,请参见介绍用于磁盘卷组快照的新API

在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.27版本

  • 移除树内AWS EBS存储插件,转为外置的CSI插件。请参见cloud-provider-aws

  • 废弃Nodespec.externalID字段,字段更新请求将会收到警告信息。关于如何向客户端发送警告信息,请参见Helpful Warnings Ahead

  • Seccomp(安全计算模式)于v1.19进入GA,支持通过限制Pod或者单个容器可执行的系统调度来提高工作负载安全性。对Alpha阶段的seccomp.security.alpha.kubernetes.io/podcontainer.seccomp.security.alpha.kubernetes.io注解自v1.19起被弃用,v1.27完全移除。

    建议使用Pod或容器securityContext.seccompProfile字段。

  • KCM移除启动命令--pod-eviction-timeout(删除失败节点的优雅期限)和--enable-taint-manager(基于污点的驱逐能力,默认启用)。

  • kubelet移除启动命令--container-runtime--container-runtime-endpoint--image-service-endpoint。其中,--container-runtime在移除dockershim后,默认值保持为remote,自v1.24被弃用,在v1.27移除;--container-runtime-endpoint--image-service-endpoint不支持启动命令,改为使用配置文件代替启动命令的方式进行配置。

  • 废弃SecurityContextDeny准入插件,并在未来版本中移除。

在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节点池。

    您可以创建其他操作系统的节点池,例如Alibaba Cloud Linux 3、ContainerOS 3.1等。更多信息,请参见创建节点池

弃用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.27版本

  • 新增NodeLogQueryAlpha特性门控,kubelet配置enableSystemLogHandlerenableSystemLogQuerytrue后可以使用kubectl查询节点日志。

  • StatefulSetStartOrdinal进入Beta。默认启用,允许设置StatefulSet的Pod序号从非零数开始。

  • StatefulSetAutoDeletePVC进入Beta。新的StatefulSet PVC保留策略用于控制是否以及何时删除从StatefulSet的volumeClaimTemplate创建的PVC。

  • IPv6DualStack自v1.23进入GA后默认启用,于v1.27彻底从各个组件代码中移除。

    如果集群中有手动配置,需删除该配置后才能升级集群。

  • 新增ServiceNodePortStaticSubrange Alpha特性门控,降低NodePort端口分配冲突风险。该特性对端口范围进行划分,使得NodePort动态分配端口尽可能在数值较高的部分,并在冲突风险较低的端口段上使用静态分配。更多信息,请参见为NodePort Service分配端口时避免冲突

  • 新增InPlacePodVerticalScaling Alpha特性门控,允许调整Pod的CPU和内存资源时不发生Pod和容器重启。

  • 允许扩展卷大小的特性已经GA,有三个相关特性门控将移除,并默认启用:ExpandCSIVolumes启用CSI卷的扩展;ExpandInUsePersistentVolumes启用扩展正使用的PV;ExpandPersistentVolumes启用持久卷的扩展。

  • CSIMigration将树内存储插件移到树外CSI驱动程序,默认一直启用,移除该特性门控。

  • CSIInlineVolumeCSI内联卷在v1.25进入GA,默认一直启用,移除该特性门控。

  • EphemeralContainers临时容器在v1.25进入GA,默认一直启用,移除该特性门控。

  • LocalStorageCapacityIsolation支持emptyDir卷本地临时存储的容量隔离,可以硬限制Pod对本地存储资源消耗,超出限制的将被kubelet驱逐。该特性门控在v1.25进入GA,默认一直启用,移除该特性门控。

  • NetworkPolicyEndPort支持NetworkPolicy通过配置endPort字段指定一系列端口,代替此前仅支持配置一个端口。该特性在v1.25进入GA,默认一直启用,移除该特性门控。

  • StatefulSetMinReadySeconds支持StatefulSet配置minReadySeconds,在v1.25进入GA,默认一直启用,移除该特性门控。

  • DaemonSetUpdateSurge支持DaemonSet配置maxSurge,在v1.25进入GA,默认一直启用,移除该特性门控。

  • IdentifyPodOS支持为Pod指定操作系统,在v1.25进入GA,默认一直启用,移除该特性门控。

  • ReadWriteOncePod进入Beta,默认启用允许使用ReadWriteOncePod访问模式的PersistentVolume。

在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