Kubernetes v1.34 现已发布,包含 58 项改进,其中 23 项升级为稳定版,22 项进入测试版,13 项进入 Alpha;也包含一些废弃和移除内容。
发布主题与 Logo
重点更新
Kubernetes v1.34 带来了丰富的新特性和改进。
稳定版:DRA 核心功能正式发布
动态资源分配(DRA)支持更灵活地选择、分配、共享和配置 GPU、TPU、NIC 等设备。
自 v1.30 起,DRA 基于结构化参数声明设备,借鉴了存储卷动态配置的思路。DRA 依赖 resource.k8s.io 下的 ResourceClaim、DeviceClass、ResourceClaimTemplate 和 ResourceSlice API,并在 Pod 的.spec 中新增 resourceClaims 字段。resource.k8s.io/v1 接口已升级为稳定版,默认可用。
测试版:kubelet 支持投影 ServiceAccount 令牌用于镜像凭证
kubelet 镜像凭证提供者传统上依赖节点或集群中存储的长期 Secret,存在安全风险和管理开销。现在,kubelet 可请求短期、绑定受众的 ServiceAccount 令牌,用于容器镜像拉取认证。这样镜像拉取基于 Pod 自身身份授权,而非节点凭证。
主要优势是大幅提升安全性,消除长期 Secret 需求,降低攻击面,简化凭证管理。
Alpha 版:支持 KYAML——Kubernetes 专用 YAML 方言
KYAML 是一个更安全、更明确的 YAML 子集,专为 Kubernetes 设计。自 v1.34 起,kubectl 支持将 KYAML 作为输出格式。
KYAML 解决了 YAML 空白符敏感和字符串引用可选带来的类型转换问题,同时克服 JSON 无注释和严格逗号需求的缺点。
所有 KYAML 文件也是有效的 YAML,可以作为 kubectl 输入。kubectl v1.34 可通过设置环境变量 KUBECTL_KYAML=true 来请求 KYAML 格式输出。仍可选择 JSON 或 YAML 输出。
升级为稳定版的功能精选
Job 替换 Pod 延迟创建
默认情况下,Job 控制器在 Pod 终止时立即创建替换 Pod,导致旧 Pod 和新 Pod 同时运行,可能引发资源竞争和不必要的自动扩缩。某些机器学习框架(如 TensorFlow、JAX)要求同一索引只有一个 Pod 同时运行。
新增加.spec.podReplacementPolicy,支持只在 Pod 完全终止(.status.phase 为 Failed)后再创建替换 Pod。设置.spec.podReplacementPolicy: Failed 即可启用。
该特性自 v1.28 alpha,已于 v1.34 稳定发布。
卷扩容失败后可恢复
允许用户取消存储提供商不支持的卷扩容,改用较小值重试,提升卷扩容成功率。该特性自 v1.23 alpha,已于 v1.34 稳定发布。
VolumeAttributesClass 支持卷参数修改
VolumeAttributesClass 现已稳定,提供 Kubernetes 原生 API 修改卷参数(如 IO 性能),支持在线垂直扩展卷,前提供应商支持。该 API 通过 CSI 接口实现,需对应 CSI 驱动支持 ModifyVolume 接口。
结构化认证配置
v1.29 引入了 AuthenticationConfiguration 配置文件格式,替代过去大量命令行选项,支持多 JWT 认证器、CEL 表达式校验和动态重载。
此配置显著提升认证管理和审计能力,v1.34 升级为稳定版。
基于选择器的细粒度授权
授权器(包括 Webhook 和内置节点授权器)现支持基于请求中的字段选择器和标签选择器做决策。例如,可以限制某策略只允许列出绑定到特定.spec.nodeName 的 Pod,客户端必须传入对应的字段选择器,否则拒绝访问。
该功能提升了多租户和节点隔离场景下的权限细化管理。
精细控制匿名请求
不再简单启用或禁用匿名访问,而是允许配置允许匿名访问的特定端点列表,如/healthz、/readyz、/livez 等。此举防止因 RBAC 配置错误导致匿名用户权限过大,同时无需修改外部探针或启动工具。
插件回调实现更高效重排队
kube-scheduler 支持插件注册回调函数,判断集群事件是否可能使之前无法调度的 Pod 变得可调度。减少无效重试,提高调度吞吐,特别适合动态资源分配场景。某些插件还可跳过回退延迟,加快调度。
有序命名空间删除
随机删除资源顺序可能导致安全风险或异常行为,比如 Pod 在网络策略删除后仍存在。引入结构化删除流程,确保按逻辑和安全依赖顺序删除资源,Pod 优先被移除。
此特性 v1.33 引入,v1.34 稳定,解决了 CVE-2024-7598 等安全问题。
流式列表响应
处理大规模列表响应时,API Server 此前需将全部对象序列化到大内存缓冲区,导致内存压力和性能下降。
新增流式编码机制,自动启用 JSON 和 Protobuf 格式,避免大内存占用,提升集群稳定性和性能,适合高并发大规模资源查询。
更稳定的 watch 缓存初始化
watch 缓存负责维护 etcd 中集群状态的最终一致缓存,之前启动或重初始化时可能失败。改进初始化流程,提高容错性,增强控制平面稳定性,保证控制器和客户端可靠建立 watch。
v1.31 测试版,v1.34 稳定发布。
放宽 DNS 搜索路径校验
以前 Pod 的 DNS 搜索路径严格验证,给复杂或遗留网络环境带来集成难题,需绕过配置。放宽 DNS 验证,v1.32 alpha,v1.34 稳定。
使用.spec.dnsConfig 的 searches 列表以单点“.”开头,可避免系统解析器为外部域名添加集群内搜索域,减少无效 DNS 请求,提高效率。
Windows kube-proxy 支持 Direct Service Return (DSR)
DSR 通过绕过负载均衡器直接响应客户端,减少负载,降低延迟。v1.14 引入,v1.34 稳定发布。
容器生命周期钩子支持 Sleep 动作
为 PreStop 和 PostStart 钩子新增 Sleep 动作,方便管理优雅关闭和生命周期流程。
Sleep 动作可让容器暂停指定时间,负数或 0 秒则立即返回。v1.29 引入,v1.32 支持 0 秒,v1.34 稳定。
Linux 节点支持交换空间(swap)
过去 Kubernetes 不支持 swap,导致内存紧张时强制终止进程,影响大内存但访问不频繁的应用。v1.22 开始支持节点可配置 swap,经过 alpha 和 beta,v1.34 稳定发布。
主要模式 LimitedSwap 允许 Pod 在内存限制内使用 swap,默认 kubelet 为 NoSwap 模式,不使用 swap。提升工作负载稳定性和资源利用效率,适合资源受限环境,需注意性能影响。
允许环境变量名中使用特殊字符
放宽环境变量名称校验,允许除“=”以外的几乎所有可打印 ASCII 字符。支持直接定义和通过 envFrom 注入的 ConfigMap、Secret。
满足如.NET Core 等框架使用“:”分隔嵌套配置键的需求。
污点管理与节点生命周期解耦
过去 TaintManager 与节点生命周期控制器紧耦合,难以维护和测试,限制了基于污点的驱逐机制灵活性。该 KEP 将 TaintManager 拆分为独立控制器,提升代码模块化和可维护性。
此改动为内部架构优化,对用户使用污点无直接影响。
Beta 新功能
以下是 v1.34 版本后进入 Beta 的部分改进。
Pod 级别的资源请求和限制
以前多容器 Pod 只能对每个容器单独设置资源请求和限制,导致开发者要么资源配置过度,要么复杂分配,难以高效利用资源。现在支持在 Pod 级别指定资源请求和限制,开发者可为整个 Pod 设定资源预算,容器共享这些资源。此功能在 v1.32 为 Alpha,v1.34 升级到 Beta,HPA 现在支持 Pod 级资源规格。
主要优势是更直观管理多容器 Pod 资源,确保所有容器资源总和不超过 Pod 限额,有助于更合理调度和集群资源利用。
kubectl 用户偏好配置文件 .kuberc
.kuberc 文件允许定义 kubectl 的默认选项和命令别名,不包含集群信息和凭据。v1.33 作为 Alpha 引入,需设置环境变量 KUBECTL_KUBERC 启用,v1.34 升级为 Beta 并默认启用。
外部 ServiceAccount Token 签名
传统 Kubernetes 使用静态磁盘密钥签发 ServiceAccount Token。新功能引入 ExternalJWTSigner gRPC 服务,实现进程外签名,支持集成外部密钥管理(如 HSM、云 KMS)替代静态密钥。
v1.32 Alpha,v1.34 Beta 默认启用。
DRA 功能 Beta
-
安全资源监控的管理员访问
通过 ResourceClaims 的 adminAccess 字段,集群管理员可访问已被其他用户使用的设备作监控诊断。仅限在标记为resource.k8s.io/admin-access: "true"
的命名空间内有权限创建相关对象的用户。v1.34 升级到 Beta。 -
ResourceClaims 中的优先替代方案
通过 DRAPrioritizedList 功能,ResourceClaims 支持 firstAvailable 字段,定义按顺序满足请求的备选方案,调度器按顺序尝试,确保分配最佳可用设备。 -
kubelet 报告 DRA 分配资源
kubelet API 更新,可报告 Pod 通过 DRA 分配的资源,方便节点监控和新功能开发。v1.34 默认启用。
kube-scheduler 非阻塞 API 调用
调度器调用 API 造成阻塞,新功能通过优先队列和请求去重实现异步 API 处理,减少调度时延,避免线程饥饿,支持快速重试。兼容旧接口并新增监控指标。
变更准入策略(Mutating Admission Policies)
基于 CEL 和 Server Side Apply 合并算法,提供声明式、内嵌的变更准入替代方案,简化准入控制规则定义。v1.32 Alpha,v1.34 升级为 Beta。
快照式 API Server 缓存
解决历史版本 List 请求直接访问 etcd 性能和稳定问题,启用 ListFromCacheSnapshot 功能后,API Server 优先从快照缓存返回数据,提升性能并降低内存压力。默认开启。
由 SIG API Machinery 负责,KEP #4988。
Kubernetes 原生类型的声明式校验工具
提供基于 CEL 的声明式校验,简化 API 校验规则开发和维护,提升错误信息准确性。v1.33 Beta,v1.34 继续。
List 请求的流式 informer
List 请求通过 watch 缓存流式返回数据,降低内存峰值和延迟。v1.34 版本 kube-apiserver 和 kube-controller-manager 默认使用该机制,提升稳定性和性能。
Windows 节点的优雅关机支持
Windows 节点的 kubelet 能识别系统关机事件,执行优雅终止 Pod,支持生命周期钩子和宽限期,提升维护和重启期间的可靠性。Beta 默认启用。
Pod 就地调整资源改进
v1.33 升级至 Beta 并默认启用,v1.34 增加支持内存缩减和 Pod 级资源集成。
Alpha 新功能
以下是 v1.34 版本后进入 Alpha 的部分新特性。
Pod 证书用于 mTLS 认证
新增通过 PodCertificateRequests 机制,kubelet 可为 Pod 申请管理 X.509 证书,支持 mTLS 认证,提升 Pod 身份验证强度,方便与证书认证的外部系统集成。
“Restricted” Pod 安全标准禁止远程探针
禁止在探针和生命周期处理器中使用除 podIP 之外的 host 字段,防止绕过安全限制的攻击。只有符合此要求的 Pod 才符合 Restricted 标准。可通过 Pod 安全准入或第三方方案强制执行。
用 .status.nominatedNodeName 表示 Pod 调度意图
解决调度延迟导致自动扩缩不准确的问题。开启 NominatedNodeNameForExpectation 功能后,调度器用该字段表示 Pod 预定绑定的节点,帮助外部组件做出更合理决策。
DRA Alpha 功能
-
资源健康状态
通过 Pod 状态暴露设备健康信息,方便诊断 Pod 崩溃问题。需开启 ResourceHealthStatus 功能且驱动实现相应 gRPC 服务。 -
扩展资源映射
以更简单方式将 DRA 管理的资源作为扩展资源暴露,兼容现有 .spec.resources 语法,方便应用无改动使用 DRA。 -
DRA 可用容量
支持驱动按需共享设备部分资源给多个 ResourceClaims,扩展调度器分配能力,支持更细粒度资源共享,提升多租户和带宽感知场景。 -
设备绑定条件
调度延迟绑定 Pod,直到所需外部设备准备就绪,提高调度可靠性。
容器重启规则
支持为 Pod 内不同容器指定不同的重启策略,且可基于退出码覆写,满足复杂场景需求,提升资源利用效率。
从运行时生成的文件加载环境变量
支持容器运行时动态生成环境变量文件,后续容器可加载,消除对入口脚本包装需求,增强容器编排灵活性。对 AI/ML 训练等场景尤为有用。
v1.34 版本的毕业、废弃与移除
功能毕业至稳定版
以下列出所有从测试阶段毕业到稳定(GA)版本的功能。欲了解包括新功能和从 alpha 到 beta 毕业的完整更新列表,可参考发布说明。
本次发布共计 23 项增强功能升至稳定版:
-
环境变量支持几乎所有可打印 ASCII 字符
-
允许作业控制器在 Pod 完全终止后重新创建 Pod
-
PreStop Hook 的 Sleep Action 允许零值
-
API Server 追踪功能
-
支持 AppArmor
-
支持基于 Field 和 Label 选择器的授权
-
缓存中的一致性读取
-
使 TaintManager 独立于 NodeLifecycleController
-
从 CRI 发现 cgroup 驱动
-
DRA:结构化参数
-
新增 PreStop Hook 的 Sleep Action
-
Kubelet OpenTelemetry 追踪
-
Kubernetes VolumeAttributesClass 修改卷功能
-
节点内存交换支持
-
仅允许匿名认证访问配置的端点
-
有序的命名空间删除
-
kube-scheduler 为每个插件提供回调函数以准确重排队列
-
放宽 DNS 搜索字符串校验
-
Watchcache 初始化增强鲁棒性
-
LIST 响应支持流式编码
-
结构化认证配置
-
Windows kube-proxy 支持直接服务返回(DSR)及覆盖网络
-
支持卷扩容失败的恢复
废弃与移除
随着 Kubernetes 持续发展成熟,一些功能会被废弃、移除或替换,以提升整体项目健康度。详情请参见 Kubernetes 废弃与移除政策。v1.34 版本包含若干废弃项。
手动配置 cgroup 驱动已废弃
过去,正确配置 cgroup 驱动是 Kubernetes 集群用户的痛点。v1.28 版本支持 kubelet 查询 CRI 实现自动检测 cgroup 驱动,v1.34 该自动检测已晋升为稳定推荐方案。若你的 CRI 容器运行时不支持报告所需的 cgroup 驱动,建议升级或更换容器运行时。kubelet 配置文件中的 cgroupDriver 配置项已废弃。对应的命令行参数 --cgroup-driver 之前也已废弃,推荐使用配置文件。两者将在未来版本(不早于 v1.36)中移除。
Kubernetes 将在 v1.36 终止对 containerd 1.x 的支持
v1.34 仍支持 containerd 1.7 及其他 LTS 版本,但由于自动检测 cgroup 驱动,SIG Node 社区已确定 containerd 1.x 的最终支持时间线。最后支持版本为 v1.35(对应 containerd 1.7 的 EOL)。如果你仍使用 containerd 1.x,建议尽快升级至 2.0 及以上。可通过监控 kubelet_cri_losing_support 指标,了解集群中节点使用的 containerd 版本是否即将过时。
PreferClose 流量分配已废弃
Kubernetes Service 中的 spec.trafficDistribution 字段允许用户指定流量路由偏好。
KEP-3015 废弃了 PreferClose,新增两个值:PreferSameZone 和 PreferSameNode。PreferSameZone 是 PreferClose 的别名,用于语义更明确。PreferSameNode 优先分配本地端点,无法时回退远程端点。
该功能在 v1.33 以 PreferSameTrafficDistribution 功能门引入,v1.34 升级为 Beta 并默认启用。
更多详情可查看官方公告。