社区 Kubernetes 版本主要变更
Kubernetes 1.33 版本Changelog
功能特性
Sidecar 容器 (GA),Sidecar 容器作为特殊的 init 容器实现,通过设置 restartPolicy: Always,确保 sidecar 在应用容器之前启动,在整个 Pod 生命周期中保持运行,并在主容器退出后自动终止。
JobSuccessPolicy (GA),用户可以通过 .spec.successPolicy 字段,指定某些索引是否成功和成功的索引数量来判断Job是否完成。
JobBackoffLimitPerIndex (GA),该特性允许为索引 Job(Indexed Job)中的每个索引独立设置回退限制,实现更细粒度的重试控制,确保特定索引的失败不会导致整个 Job 提前终止。
kubectl 子资源支持 ,--subresource 参数现已在 kubectl 的 get、patch、edit、apply 和 replace 子命令中正式可用,允许用户获取和更新所有支持子资源的资源的子资源。
MultiCIDRServiceAllocator (GA),引入 ServiceCIDR 和 IPAddress 两个新的 API 对象来记录 Service ClusterIP 的分配情况。集群管理员可以动态增加 type: ClusterIP Service 的可用 IP 地址数量。
Topology Aware Routing / trafficDistribution (GA),EndpointSlices 中的拓扑感知提示使 kube-proxy 能够优先将流量路由到同一可用区内的端点。trafficDistribution 字段被添加到 Service 规约中,PreferClose 选项根据网络拓扑将流量导向最近的可用端点。
CPUManagerPolicyOptions (GA),CPU Manager 新增策略选项,允许微调CPU Manager的资源分配策略。
MatchLabelKeys(GA),MatchLabelKeysInPodAffinity进阶至GA。在Pod亲和性规则中增加了matchLabelKeys和mismatchLabelKeys。
HonorPVReclaimPolicy (GA),当 PV 的 reclaimPolicy 设置为 Delete 时,无论 PV 或 PVC 的删除顺序如何,底层存储资源都会严格按照策略被删除,防止存储资源泄露。
ImageVolume (Beta),允许在 Pod 中使用 image 卷源,将容器镜像作为只读卷挂载到 Pod 中。
UserNamespacesSupport (Beta),允许 Pod 使用 Linux 用户命名空间,以增强安全性和隔离性。
StreamingCollectionEncodingToProtobuf (Beta),kube-apiserver 禁用 WatchList 机制,转而采用流式编码机制。对于大量资源的 List 请求场景,可有效降低内存占用并提升系统稳定性。
调度器性能优化
SchedulerPopFromBackoffQ (Beta),该特性优化调度队列的处理逻辑,允许当 activeQ 为空时,直接从 backoffQ 中弹出 Pod,显著减少 Pod 的调度延迟。
SchedulerAsyncPreemption (Beta),允许将抢占调度转换为异步执行,避免阻塞调度主流程,从而提高调度吞吐量。
ProcMountType (Beta),允许通过 Pod 的 securityContext.procMount 字段自定义容器中 /proc 文件系统的挂载类型,以精细化控制访问,提升 Pod 安全性和隔离性。
SupplementalGroupsPolicy (Beta),允许通过 .spec.securityContext.supplementalGroupsPolicy 字段实现细粒度的补充组控制,为卷访问权限提供更精确的控制。
弃用API
apidiscovery.k8s.io/v2beta1 API 组已废弃。此 API 用于客户端查询集群中所有已注册的 API 资源信息,建议迁移至 v2 稳定版本。
v1版本的Endpoints API正式废弃,推荐使用EndpointsSlice API代替。EndpointSlice API自1.21起已进入稳定状态,引入了双栈网络支持等特性。但v1版本的Endpoints API目前不会删除。
EndpointSlice的annotation service.kubernetes.io/topology-mode在 1.33 版本中已弃用,保持向后兼容,由spec.trafficDistribution替换。
Pod status.resize 字段在 1.33 版本中已弃用,将不再设置。Pod 调整大小的状态将在两个新 condition 下暴露:PodResizeInProgress 和 PodResizePending。
WatchFromStorageWithoutResourceVersion 特性在 1.33 版本中已被弃用,无法再启用。
更多信息请参考:Kubernetes 1.33 Changelog
Kubernetes 1.32 版本Changelog
功能特性
CustomResourceFieldSelectors (GA),CustomResourceFieldSelectors 特性门控在 1.32 进入 GA,默认启用。该特性支持在 CustomResourceDefinition(CRD)中启用 selectableFields,包括 list、watch 和 deletecollection,以更加高效、更精确地过滤 CRD 资源。
StatefulSetAutoDeletePVC (GA),StatefulSetAutoDeletePVC 特性门控在 1.32 进入 GA,默认启用。该特性提供对 StatefulSet 中 PVC 删除的精细控制,允许在 StatefulSet 明确不需要 PVC 时自动清理 PVC,降低孤立 PVC 对 StatefulSet 的影响。
SizeMemoryBackedVolumes (GA),SizeMemoryBackedVolumes 特性门控在 1.32 进入 GA,默认启用。该特性支持对基于内存的卷(如 emptyDir)指定大小限制,防止 Pod 过度占用节点内存。
PodLifecycleSleepAction (GA),PodLifecycleSleepAction 特性门控在 1.32 进入 GA。该特性支持在容器生命周期回调中通过 Sleep 字段直接使用 sleep 命令,将容器暂停一段指定的时间。
Memory Manager (GA),Memory Manager 特性门控在 1.32 进入 GA。作为 kubelet 工作负载准入过程的一部分,Memory Manager 提供拓扑提示来优化内存分配和对齐,使用户能够为 Guaranteed QoS 类别的 Pod 分配独占内存。
CronJobsScheduledAnnotation (GA),CronJobsScheduledAnnotation 特性门控在 1.32 进入 GA,默认启用。该特性会将 CronJob 被调度的时间写到 Job 的注解 batch.kubernetes.io/cronjob-scheduled-timestamp 中。
PodIndexLabel (GA),PodIndexLabel 特性门控在 1.32 进入 GA,默认启用。该特性会将 Index Job 的完成顺序写到 Pod 的标签 batch.kubernetes.io/job-completion-index 中。
WatchList (Beta),WatchList 特性门控进阶至 Beta,默认启用。对于使用 client-go 的用户,在开启 client-go 的 WatchListClient 特性后,使用流式请求而不是全量 List 访问 kube-apiserver,降低控制面资源消耗。
RelaxedEnvironmentVariableValidation (Beta),RelaxedEnvironmentVariableValidation 特性门控进阶至 Beta,默认开启。该特性支持在环境变量名中使用所有可打印的 ASCII 字符("="除外),增加了环境变量使用的灵活性。
JobManagedBy (Beta),JobManagedBy 特性门控进阶至 Beta,默认启用。该特性支持通过 Job 的 spec.managedBy 字段自定义 Job 的 controller,使外部控制器(如 Kueue)能够管理 Job 同步。
QueueingHint (Beta),调度器的每个插件都集成 QueueingHint 回调函数,方便调度器获取 Pod 重新入队的建议,快速判断 Pod 是否需要重新入队,以减少不必要的调度重试,从而提升调度吞吐量。
RecoverVolumeExpansionFailure (Beta),RecoverVolumeExpansionFailure 特性门控进阶至 Beta,默认启用。该特性允许用户通过重试较小的大小从卷扩展失败中恢复,确保卷扩展更具弹性和可靠性。
AuthorizeWithSelectors / AuthorizeNodeWithSelectors (Beta),AuthorizeWithSelectors 和 AuthorizeNodeWithSelectors 特性门控进阶至 Beta,后者需要搭配前者使用。启用后,AuthorizeNodeWithSelectors 允许节点鉴权器使用更细粒度的选择算符(例如 fieldSelector 和 labelSelector)进行鉴权,提高了 Kubernetes 授权系统的灵活性。kubelet 仅有最小权限,只能读取自己的节点对象和绑定到自己节点的 Pod。
优化 JobController,极大提升 Job 的更新和删除效率,尤其是在大量使用 Job 的场景下。
优化 kube-proxy,Service 更新时使用 fieldSelector: clusterIP!=None,以避免监听 Headless Service,减少不必要的带宽占用。
优化 Pod 状态显示信息。当镜像拉取失败后,Pod 的 status.containerStatuses[*].state.waiting 字段会记录镜像拉取失败的原因(ImagePullBackOff)和具体失败信息。
弃用API
flowcontrol.apiserver.k8s.io/v1beta3版本的FlowSchema和PriorityLevelConfiguration在1.32版本中废弃。推荐迁移至flowcontrol.apiserver.k8s.io/v1API版本(自1.29起可用)。
ServiceAccount 的 Annotation kubernetes.io/enforce-mountable-secrets 在 1.32 被移除。建议使用独立的命名空间来隔离对 Secret 的访问。
更多信息请参考:Kubernetes 1.32 Changelog