Kubernetes 1.36 版本重大更新详解
本文整理了 Kubernetes 1.36 版本的重要变更、新特性、Bug 修复及升级注意事项,为您的集群升级提供参考。
🔥 重要升级须知
1. 调度器 PreBind 插件并行执行
- 影响:调度器框架现在支持并行运行 PreBind 插件
- 要求:自定义调度器插件需要更新,在
PreBindPreFlight方法中返回PreBindPreFlightResult,并设置AllowParallel: true才能启用并行执行;返回nil则保持原有串行行为
2. 监控指标重命名
volume_operation_total_errors→volume_operation_errors_totaletcd_bookmark_counts→etcd_bookmark_total- 注意:如果使用自定义监控面板或告警规则,需要更新指标名称
3. Kubeadm 移除 FlexVolume 内置支持
- Kubeadm 已移除对 flex-volumes 的集成支持
- 如需继续使用,需要自定义 KCM 镜像(非 distroless 基础),并手动挂载
/usr/libexec/kubernetes/kubelet-plugins/volume/exec目录
🚀 主要新特性
DRA(动态资源分配)重大增强
| 特性 | 状态 | 说明 |
|---|---|---|
| DRA 扩展资源 | Beta | 支持扩展资源类型 |
| DRA 设备绑定条件 | Beta(默认启用) | 设备绑定状态条件 |
| DRA 设备污点与容忍 | Beta | 支持设备污点和容忍机制 |
| DRA 可消费容量 | GA(默认启用) | 可分区设备容量管理 |
| DRA 分区设备 | Beta | 支持设备分区 |
| DRA 优先列表 | GA | 设备选择优先列表 |
| DRA 管理员访问 | GA | 管理员访问权限 |
| DRA 原生资源映射 | Alpha | 设备映射到原生 K8s 资源(CPU/内存) |
| DRA 列表类型属性 | Alpha | 支持列表类型的设备属性 |
调度器新特性
- Workload 和 PodGroup API:引入
scheduling.k8s.io/v1alpha2,支持工作负载级调度(Gang Scheduling/组调度) - 拓扑感知工作负载调度(TAS):Alpha 阶段,支持基于拓扑域的 PodGroup 调度
- 工作负载感知抢占:支持整个 PodGroup 的抢占而非单个 Pod
- PodGroupPodsCount 插件:优先选择 Pod 数量更多的放置位置
原地 Pod 资源调整增强
- InPlacePodLevelResourcesVerticalScaling:升级为Beta(默认启用)
- 支持 Pod 级别的 CPU/内存资源原地调整
- 支持非 sidecar 的 initContainer 原地调整
- 调整请求超过节点可分配容量时,现在在准入阶段就失败,而不是标记为 Infeasible
安全与认证
- UserNamespacesSupport:GA(用户命名空间支持)
- ConstrainedImpersonation:Beta(默认启用)- 受限模拟
- NodeDeclaredFeatures:Beta(默认启用)- 节点声明特性
- MutatingAdmissionPolicy:GA- 可变准入策略
- ExternalServiceAccountTokenSigner:GA- 外部服务账户令牌签名
- CSIServiceAccountTokenSecrets:GA- CSI 服务账户令牌 Secret
- SELinuxChangePolicy & SELinuxMountReadWriteOncePod:GA- SELinux 策略
网络
- StrictIPCIDRValidation:默认启用- 严格验证 IP/CIDR 格式,禁止前导零(如
010.000.000.005)和语义模糊的子网掩码 - RelaxedServiceNameValidation:Beta(默认启用)- 放宽 Service 名称验证
- kube-proxy nftables 模式修复兼容 nft 1.1.3
- kube-proxy 优化 conntrack 清理逻辑,大幅提升大量过期连接时的性能
- Ingress NGINX正式退役:2026年3月24日宣布退役,不再有新发布、bug修复或安全更新
存储
- VolumeAttributesClass:锁定为默认启用,首选存储版本升级到
storage.k8s.io/v1 - MutableCSINodeAllocatableCount:GA- 可变的 CSI 节点可分配计数
- ImageVolume:GA- 镜像卷支持
- PersistentVolumeClaimUnusedSinceTime:Alpha- 跟踪 PVC 未使用状态
节点与 Kubelet
- NodeLogQuery:GA- 节点日志查询
- KubeletPSI:GA- Linux PSI 指标(CPU/内存/IO 压力)
- RestartAllContainersOnContainerExits:Beta(默认启用)- 容器退出时重启所有容器
- PLEGOnDemandRelist:Beta(默认关闭)- 按需 PLEG relist
- ReloadKubeletClientCAFile:默认启用- 运行时更新客户端 CA 证书
- 新增 gRPC 服务提供节点上 Pod 信息
- CRI API 新增
image_id字段到PullImageResponse
CLI / Kubectl
kubectl explain支持显示externalDocs信息kubectl describe node显示 ResourceSlices 信息kubectl get node -owide显示内核架构kubectl get ingressclass显示默认标记kubectl attach/run新增--detach-keys标志kubectl wait支持多条件等待kubectl diff新增--show-secret标志- 调试默认配置文件从
legacy改为general
其他 GA 特性
- ProcMountType:GA - 进程挂载类型
- HonorPVReclaimPolicy:移除特性门(已 GA 自 1.33)
- CSIMigrationPortworx:移除(已 GA 自 1.33)
🐛 重要 Bug 修复
- StatefulSet 并行 Pod 管理回归修复:禁用
MaxUnavailableStatefulSet特性门(1.35 回归问题) - DRA 调度竞争修复:修复快速调度时同一设备被重复分配的问题
- Sidecar 容器重启修复:修复 kubelet 重启后,带有 sidecar 和 startupProbe 的 Pod 中普通容器崩溃后无法重启的问题
- Server-Side Apply 修复:修复空数组/映射的处理和字段所有权跟踪
- HPA 对象指标修复:修复通过 v1 HPA API 更新使用 averageValue 的 object metrics 的问题
- kube-proxy IPv4/IPv6 负载均衡器隔离:修复 Windows 上双栈 Service 的行为
⚠️ 安装/升级注意事项
1. 版本要求
- Go 版本:构建使用 Go 1.26.x(运行时不需要,但开发/编译相关)
- etcd:客户端库升级到 v3.6.8,etcd 镜像 v3.6.8
- CoreDNS:升级到 1.14.2
- pause 镜像:升级到 3.10.2
2. API 变更与废弃
- Service.spec.externalIPs:已废弃,使用时会发出警告
- git-repo Volume 插件:默认禁用,无法重新启用
- v1alpha1 WebhookAdmissionConfiguration:已移除(自 1.17 废弃)
- Raw 字段访问:
metav1.FieldsV1的Raw字段直接访问已废弃,使用新的访问器方法 - CRD 数值范围严格验证:对 int32/int64/float/double 格式严格 enforce 范围,现有对象通过 validation ratcheting 保留
3. 网络配置注意
- IP/CIDR 格式严格化:
StrictIPCIDRValidation默认启用,确保所有 IP 和 CIDR 配置没有前导零或模糊子网掩码 - ServiceCIDR:写入主资源时忽略 status 字段变更(
ServiceCIDRStatusFieldWiping特性门,默认启用)
4. DRA 相关(如使用 GPU/FPGA 等动态资源)
- RBAC 权限细化:DRA 驱动和控制器需要更细粒度的 RBAC 权限来更新 ResourceClaim 状态
- ResourceSlice 控制器:发布集群范围资源时必须显式设置
ReconcilePoolWithName,“All nodes” 不再是默认值
5. 监控与可观测性
- Prometheus Native Histograms:多个组件(apiserver、kubelet、kube-proxy、scheduler、KCM)支持原生直方图(需启用特性门)
- 新指标:注意新增和重命名的指标,更新监控配置
6. Kubeadm 特定注意
- 移除 flex-volume 内置支持
- 移除
--pod-infra-container-imagekubelet 标志的清理逻辑(1.35 升级时需要,1.36 不再需要) - etcd < 3.6.0 不再支持,移除废弃的 etcd 标志
kubeadm upgrade的CreateJob预检超时增加到 1 分钟(Windows 节点)- 处理 Node 对象时,对未知 API 错误不再提前退出,而是持续重试
7. 调度器插件开发者注意
- PostFilterResult 扩展:需要返回被抢占的 Pod 列表
- PreBindPreFlightResult:需要支持并行执行声明
- PodGroupInfo 重命名:改为
PodGroupState,自定义插件需要更新
8. 特性门变更
- 多个特性从 Alpha → Beta 或 Beta → GA,默认启用状态变化
- 注意检查当前启用的特性门,特别是:
MaxUnavailableStatefulSet:默认禁用(修复 1.35 回归)PLEGOnDemandRelist:Beta 但默认关闭SchedulerAsyncAPICalls:已禁用(性能问题)
📋 升级建议
- 测试环境先行:1.36 包含大量 DRA 和调度器变更,建议先在测试环境验证
- 检查自定义调度器插件:如有自定义调度器插件,必须更新以兼容新的 PreBind/PostFilter 接口
- 更新监控告警:检查使用了重命名指标的监控面板和告警规则
- 验证网络配置:确保所有 Service、EndpointSlice 的 IP/CIDR 格式符合新标准
- DRA 用户:检查 RBAC 配置和 ResourceSlice 的
ReconcilePoolWithName设置 - Kubeadm 用户:注意 flex-volume 和 etcd 版本要求的变化
总结
Kubernetes 1.36 版本带来了大量重要更新,特别是在 DRA(动态资源分配)和调度器方面的增强,为集群管理和资源利用提供了更多可能性。同时,也修复了多个关键 Bug,提高了系统的稳定性和可靠性。
在升级过程中,建议您仔细阅读本文档中的注意事项,特别是关于调度器插件、监控指标和网络配置的变更,确保升级过程顺利进行。
如果您在升级过程中遇到任何问题,欢迎在评论区留言讨论,我们将尽力为您解答。
本文内容基于 Kubernetes 1.36 版本官方发布说明整理,仅供参考。具体升级操作请以官方文档为准。