阿里云容器服务 Kubernetes 版严格遵循社区一致性认证。本文介绍ACK发布Kubernetes 1.33版本的主要变更说明,包括升级注意事项、重大变更、功能特性、弃用功能和API、特性门控等。
组件版本说明
下表为ACK集群核心组件版本的支持情况。
核心组件 | 版本号 |
Kubernetes | 1.33.1-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.1 |
CoreDNS | v1.11.3.5-5321daf49-aliyun |
CSI | 升级至组件当前支持的最新版本。详细信息,请参见组件变更记录csi-plugin、csi-provisioner。 |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway和TerwayControlplane为v1.14.0及以上 |
升级注意事项
如果集群中存在1.20及以下版本创建的Pod,且这些Pod从未发生过容器重启或更新,那么当集群升级至1.33版本时,这些Pod将进行一次容器重启。
重大变化
自 1.33 版本起,ACK默认使用 containerd 2.1。针对存量集群,ACK会在节点升级过程中同步升级容器运行时至 containerd 2.1 版本。详情请参见containerd 2.1介绍。
从 1.33 版本开始,新创建的ACK托管集群默认安装最新版本的ack-ram-authenticator托管组件。详情请参见【产品公告】关于ACK托管集群自1.33版本起默认安装ack-ram-authenticator组件的公告。
功能变更
原地调整Pod资源进阶至Beta,默认启用。该功能允许在不重启Pod的前提下动态修改容器的 CPU和内存资源配置。
kubectl支持通过
--subresources
命令对资源的特定子资源进行调整,例如通过kubectl edit pod <pod-name> --subresource resize
动态调整Pod资源大小。1.33版本支持的Subresource包括status
、scale
和resize
。EndpointSlice TopologyAwareHints进阶至GA。Beta版的Annotation
service.kubernetes.io/topology-mode
已弃用。建议使用spec.trafficDistribution
字段定义拓扑策略。例如,通过配置trafficDistribution
为PreferClose
,可将流量优先路由至与客户端位于同一Zone的端点。详情请参见Traffic distribution。Pod的
.status.resize
字段已废弃且不支持设置,新增两个Condition字段PodResizeInProgress
和PodResizePending
。DisableNodeKubeProxyVersion默认启用,且不允许禁用。kubelet不会再设置节点的
status.kubeProxyVersion
字段。StatefulSets的
.spec.serviceName
字段变为可选,强化了对其字段合法性的校验,必须符合DNS1123标准校验。如果存量StatefulSet的.spec.serviceName
字段未通过校验,将无法创建新的Pod,需手动移除该字段。此更新将原本在Pod创建阶段进行的DNS校验前置到StatefulSet资源配置阶段,减少StatefulSet Controller的失败重试。Git-Repo卷插件默认禁用。如需保留,可手动开启
GitRepoVolumeDriver
特性门控。
功能特性
Sidecar Containers进阶至GA,默认启用。Sidecar Container作为一种特殊的Init Container,可通过
restartPolicy: Always
确保其在Pod生命周期中始终运行,支持探针配置。OrderedNamespaceDeletion进阶至 Beta。该特性优化了命名空间资源释放流程:删除命名空间时,将优先删除工作负载Pod,随后依次清理NetworkPolicy、存储资源等依赖项,避免关键安全资源移除后Pod仍旧残留的风险。
SupplementalGroupsPolicy进阶至Beta,默认启用,支持通过
.spec.securityContext.supplementalGroupsPolicy
字段为Pod配置细粒度的SupplementalGroups控制,以实现对存储卷访问权限更精细化的控制。详情请参见Configure fine-grained SupplementalGroups control for a Pod。MultiCIDRServiceAllocator进阶至GA,默认启用,引入ServiceCIDR和IPAddress资源来记录Service的ClusterIP分配情况,支持通过ServiceCIDR来动态增加ClusterIP的可分配范围。
JobBackoffLimitPerIndex进阶至GA,允许为索引作业中的每个索引指定Pod的最大重试次数。
JobSuccessPolicy进阶至GA,允许自定义Job的成功策略,例如通过指定某些索引是否成功和成功的索引数量来判断Job是否完成,请参见Job's SuccessPolicy Goes GA。
ImageVolume进阶至Beta,默认启用,允许在Pod中使用
image
卷源,将容器镜像作为只读卷挂载到Pod中。UserNamespacesSupport进阶至Beta,默认启用,允许Pod使用Linux用户命名空间(User Namespaces)以增强容器安全性。该能力不影响现有Pod。如需使用,可手动指定
pod.spec.hostUsers
。详情请参见User Namespaces enabled by default。RelaxedDNSSearchValidation进阶为Beta,默认启用,允许在 Pod 的
.spec.dnsConfig.searches
字段中使用特殊字符,例如.
、_
,提升DNS配置灵活性。kube-apiserver默认禁用WatchList机制,转而采用流式编码机制(包括StreamingCollectionEncodingToJSON和StreamingCollectionEncodingToProtobuf)。该改进通过流式处理大规模资源列表请求,优化了List操作的性能表现。对于包含大量资源的List请求,可有效降低内存占用并提升系统稳定性,请参见Streaming List responses。
kube-controller-manager不再主动启用WatchListClient特性。
CPUManagerPolicyOptions进阶至GA,默认启用,允许微调CPU Manager的资源分配策略:
Pod需独占CPU时,强制进行SMT对齐,确保分配的 CPU 独占完整的物理核心,请参见cpu manager extension to reject non SMT-aligned workload。
CPU需跨NUMA节点分配资源时,可确保CPU资源在NUMA节点间均匀分布,请参见Add CPUManager policy option to distribute CPUs across NUMA nodes instead of packing them。
MatchLabelKeysInPodAffinity进阶至GA,默认启用,在Pod亲和性规则中增加了
matchLabelKeys
和mismatchLabelKeys
,更精准地控制Pod的共存范围。NodeInclusionPolicyInPodTopologySpread进阶至于GA,默认启用,允许在Pod拓扑分布约束使用
nodeAffinityPolicy
和nodeTaintsPolicy
动态筛选可调度节点。nodeAffinityPolicy
:默认为Honor,仅将匹配 Pod 的nodeSelector
或nodeAffinity
的节点纳入拓扑分布计算。nodeTaintsPolicy
:默认为Ignore,忽略nodeAffinity
和nodeSelector
规则,将所有节点纳入拓扑分布计算。
HonorPVReclaimPolicy 进阶至GA,默认启用,用于确保当PV的
reclaimPolicy
设置为Delete
时,无论 PV 或 PVC 的删除顺序如何,都会严格按照策略删除底层存储资源,避免存储资源泄露。ProcMountType进阶至Beta,允许通过 Pod 的
securityContext.procMount
字段自定义容器中 /proc 文件系统的挂载类型,以精细化控制/proc文件系统的访问,提升Pod安全性和隔离性。此功能适用于需要在用户命名空间(User Namespaces)中运行非特权容器的场景,通过放宽对/proc 的限制,可增强兼容性与灵活性。PodLifecycleSleepActionAllowZero进阶至Beta,允许在容器生命周期回调
preStop
中设置sleep
操作的等待时间为0。允许使用
ResourceQuota
限制特定Volume Attributes Class关联的PVC数量。调度器性能优化:
新增SchedulerPopFromBackoffQ特性,默认启用,通过优化调度队列的处理逻辑,允许activeQ为空时,直接从backoffQ中弹出Pod,显著减少Pod的调度延迟。
SchedulerAsyncPreemption进阶至Beta,默认启用,允许将抢占调度转换为异步执行。抢占行为开销较大,转为异步后可以有效降低调度延迟。
优化使用拓扑分布约束的Pod的调度性能。
弃用API
1.33默认使用containerd 2.1,containerd 2.1不再支持CRI v1alpha2 API。如依赖该版本API,需切换至CRI v1版本API以确保兼容性。
v1版本的Endpoints API正式废弃,推荐使用EndpointsSlice API代替。EndpointSlice API自1.21起已进入稳定状态,引入了双栈网络支持等特性。但v1版本的Endpoints API目前不会删除。详情请参见Continuing the transition from Endpoints to EndpointSlices。
apidiscovery.k8s.io/v2beta1 API组禁用,该 API 用于客户端查询集群中所有已注册的 API 资源信息。建议迁移至v2稳定版本。旧版客户端可通过回退机制自动使用未聚合的 v1 版本 API 实现服务发现功能,客户端不会立即报错。但若客户端未适配 v2 版本,未聚合的数据需要多次调用 API 来获取完整信息,可能出现请求量增加和延迟上升。
参考链接
关于Kubernetes 1.33完整的变更记录,请参见CHANGELOG-1.33、Kubernetes v1.33: Octarine。