Kubernetes 1.36 版本重大更新详解

本文整理了 Kubernetes 1.36 版本的重要变更、新特性、Bug 修复及升级注意事项,为您的集群升级提供参考。

🔥 重要升级须知

1. 调度器 PreBind 插件并行执行

  • 影响:调度器框架现在支持并行运行 PreBind 插件
  • 要求:自定义调度器插件需要更新,在 PreBindPreFlight 方法中返回 PreBindPreFlightResult,并设置 AllowParallel: true 才能启用并行执行;返回 nil 则保持原有串行行为

2. 监控指标重命名

  • volume_operation_total_errorsvolume_operation_errors_total
  • etcd_bookmark_countsetcd_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

安全与认证

  • UserNamespacesSupportGA(用户命名空间支持)
  • ConstrainedImpersonationBeta(默认启用) - 受限模拟
  • NodeDeclaredFeaturesBeta(默认启用) - 节点声明特性
  • MutatingAdmissionPolicyGA - 可变准入策略
  • ExternalServiceAccountTokenSignerGA - 外部服务账户令牌签名
  • CSIServiceAccountTokenSecretsGA - CSI 服务账户令牌 Secret
  • SELinuxChangePolicy & SELinuxMountReadWriteOncePodGA - SELinux 策略

网络

  • StrictIPCIDRValidation默认启用 - 严格验证 IP/CIDR 格式,禁止前导零(如 010.000.000.005)和语义模糊的子网掩码
  • RelaxedServiceNameValidationBeta(默认启用) - 放宽 Service 名称验证
  • kube-proxy nftables 模式修复兼容 nft 1.1.3
  • kube-proxy 优化 conntrack 清理逻辑,大幅提升大量过期连接时的性能
  • Ingress NGINX正式退役:2026年3月24日宣布退役,不再有新发布、bug修复或安全更新

存储

  • VolumeAttributesClass:锁定为默认启用,首选存储版本升级到 storage.k8s.io/v1
  • MutableCSINodeAllocatableCountGA - 可变的 CSI 节点可分配计数
  • ImageVolumeGA - 镜像卷支持
  • PersistentVolumeClaimUnusedSinceTimeAlpha - 跟踪 PVC 未使用状态

节点与 Kubelet

  • NodeLogQueryGA - 节点日志查询
  • KubeletPSIGA - Linux PSI 指标(CPU/内存/IO 压力)
  • RestartAllContainersOnContainerExitsBeta(默认启用) - 容器退出时重启所有容器
  • PLEGOnDemandRelistBeta(默认关闭) - 按需 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 修复

  1. StatefulSet 并行 Pod 管理回归修复:禁用 MaxUnavailableStatefulSet 特性门(1.35 回归问题)
  2. DRA 调度竞争修复:修复快速调度时同一设备被重复分配的问题
  3. Sidecar 容器重启修复:修复 kubelet 重启后,带有 sidecar 和 startupProbe 的 Pod 中普通容器崩溃后无法重启的问题
  4. Server-Side Apply 修复:修复空数组/映射的处理和字段所有权跟踪
  5. HPA 对象指标修复:修复通过 v1 HPA API 更新使用 averageValue 的 object metrics 的问题
  6. 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.FieldsV1Raw 字段直接访问已废弃,使用新的访问器方法
  • 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-image kubelet 标志的清理逻辑(1.35 升级时需要,1.36 不再需要)
  • etcd < 3.6.0 不再支持,移除废弃的 etcd 标志
  • kubeadm upgradeCreateJob 预检超时增加到 1 分钟(Windows 节点)
  • 处理 Node 对象时,对未知 API 错误不再提前退出,而是持续重试

7. 调度器插件开发者注意

  • PostFilterResult 扩展:需要返回被抢占的 Pod 列表
  • PreBindPreFlightResult:需要支持并行执行声明
  • PodGroupInfo 重命名:改为 PodGroupState,自定义插件需要更新

8. 特性门变更

  • 多个特性从 Alpha → Beta 或 Beta → GA,默认启用状态变化
  • 注意检查当前启用的特性门,特别是:
    • MaxUnavailableStatefulSet:默认禁用(修复 1.35 回归)
    • PLEGOnDemandRelist:Beta 但默认关闭
    • SchedulerAsyncAPICalls:已禁用(性能问题)

📋 升级建议

  1. 测试环境先行:1.36 包含大量 DRA 和调度器变更,建议先在测试环境验证
  2. 检查自定义调度器插件:如有自定义调度器插件,必须更新以兼容新的 PreBind/PostFilter 接口
  3. 更新监控告警:检查使用了重命名指标的监控面板和告警规则
  4. 验证网络配置:确保所有 Service、EndpointSlice 的 IP/CIDR 格式符合新标准
  5. DRA 用户:检查 RBAC 配置和 ResourceSlice 的 ReconcilePoolWithName 设置
  6. Kubeadm 用户:注意 flex-volume 和 etcd 版本要求的变化

总结

Kubernetes 1.36 版本带来了大量重要更新,特别是在 DRA(动态资源分配)和调度器方面的增强,为集群管理和资源利用提供了更多可能性。同时,也修复了多个关键 Bug,提高了系统的稳定性和可靠性。

在升级过程中,建议您仔细阅读本文档中的注意事项,特别是关于调度器插件、监控指标和网络配置的变更,确保升级过程顺利进行。

如果您在升级过程中遇到任何问题,欢迎在评论区留言讨论,我们将尽力为您解答。

本文内容基于 Kubernetes 1.36 版本官方发布说明整理,仅供参考。具体升级操作请以官方文档为准。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐