阿里云容器服务 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版本的功能变更和弃用资源前,您可能需要了解相关概念。
重大变更
针对调度器,Kubernetes v1.28版本优化了调度逻辑,减少无效的重试,从而提高调度器的整体性能。
如集群中使用了自定义调度器插件,建议对调度器插件进行改造和升级,以提升调度器性能。更多信息,请参见调度框架变化。
针对CSI迁移,Kubernetes社区一直推动将存储相关插件从源码中移除,改用实现了CSI标准接口的树外驱动,并已经于v1.25完成GA,于v1.27移除了API
storage.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支持修改
serializeImagePulls
为false
,实现并发拉取镜像代替默认的串行拉取。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校验规则中添加
reason
和fieldPath
字段后,允许校验失败时返回指定原因和字段路径。更多信息,请参见CRD校验表达式语言。Webhook过滤请求新增支持CEL表达式,最多支持定义64个匹配条件。更多信息,请参见动态准入控制匹配条件。
新增SidecarContainers特性门控,支持Sidecar容器,优化容器启动顺序。例如,日志收集Sidecar容器可以在其他容器之前启动,以提高日志收集的可靠性。更多信息,请参见介绍原生Sidecar容器。该特性在v1.28处于Alpha阶段,默认关闭。
PVC的
.status.resizeStatus
字段替换为.status.allocatedResourceStatus
Map结构字段,表示调整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。
废弃Node
spec.externalID
字段,字段更新请求将会收到警告信息。关于如何向客户端发送警告信息,请参见Helpful Warnings Ahead。Seccomp(安全计算模式)于v1.19进入GA,支持通过限制Pod或者单个容器可执行的系统调度来提高工作负载安全性。对Alpha阶段的
seccomp.security.alpha.kubernetes.io/pod
和container.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/v1beta1
API版本在v1.24中被废弃,在v1.27中被移除。
建议使用storage.k8s.io/v1
,该API自v1.24起可用。更多信息,请参见Storage Capacity Constraints for Pod Scheduling KEP。
特性门控
本小节仅列举部分主要变化,更多信息请参见Feature Gates。
在Kubernetes 1.27版本
新增
NodeLogQuery
Alpha特性门控,kubelet配置enableSystemLogHandler
和enableSystemLogQuery
为true
后可以使用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驱动程序,默认一直启用,移除该特性门控。CSIInlineVolume
CSI内联卷在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的特性门控,包括
DelegateFSGroupToCSIDriver
、DevicePlugins
、KubeletCredentialProviders
、MixedProtocolLBService
、ServiceInternalTrafficPolicy
、ServiceIPStaticSubrange
、EndpointSliceTerminatingCondition
。
参考链接
关于Kubernetes 1.27和1.28完整的变更记录,请参见CHANGELOG-1.27、CHANGELOG-1.28。