Kubernetes 1.35 "世界树"版本深度解析

🎉 欢迎关注我的公众号「键盘下的小宇宙」 🎉

在这里,我会持续分享 Kubernetes、云原生、DevOps 等领域的技术干货,从入门实践到深度解析,帮助你在技术道路上少走弯路。

您的每一次关注、点赞和分享,都是我坚持创作的最大动力

🔍 微信搜索「键盘下的小宇宙」,让我们一起探索技术的无限可能~
在这里插入图片描述

开头

各位技术同仁,相信大家最近都关注到了 Kubernetes 社区发布的 1.35 版本,代号 “Timbernetes”(世界树)。作为一名在生产环境中部署和维护 K8s 集群多年的工程师,我第一时间对这个版本进行了深入测试,发现其中有多项特性值得我们重点关注,尤其是在资源管理、服务路由和调度策略方面的改进,这些都将直接影响我们的生产环境运行效率。

在本文中,我将结合实际生产经验,详细解析 Kubernetes 1.35 的核心特性,并分享一些落地实施的最佳实践。无论你是负责基础设施的运维工程师,还是构建微服务的开发人员,相信都能从这些内容中获得启发。

  • 参考资料:https://kubernetes.io/zh-cn/blog/2025/12/17/kubernetes-v1-35-release/

📌 一、版本概况

  • 正式发布时间:2025-12-17(Kubernetes 官方)
  • 版本昵称:Timbernetes(世界树)
  • 增强项总数60+ 项增强(含稳定、Beta、Alpha 特性)
  • 生命周期:进入维护期至 2027-02-28(预计)

🥇 二、稳定(GA)特性 — 生产级可用

✅ 1)In-Place Pod Resize(就地资源调整)

  • 参考资料:https://kubernetes.io/blog/2025/12/19/kubernetes-v1-35-in-place-pod-resize-ga/

核心行为变化

  • 修改容器 requestslimits 不再触发重建,实现真正的运行时调整
  • 增加了 resize 子资源和相关事件/监控指标,便于追踪资源调整历史
  • 支持减少内存(有条件处理防止 OOM),但实际操作中需要格外谨慎

在我们的测试环境中,对一个运行中的 PostgreSQL 实例进行内存调整,整个过程仅耗时约 15 秒,且数据库连接未中断。

实施步骤

  1. 初始部署

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: postgres
    spec:
      serviceName: "postgres"
      replicas: 1
      template:
        spec:
          containers:
          - name: postgres
            image: postgres:15
            resources:
              requests:
                memory: "4Gi"
                cpu: "2"
              limits:
                memory: "8Gi"
                cpu: "4"
            # 其他配置...
    
  2. 业务高峰期调整资源

    kubectl patch statefulset postgres --type=json -p='[
      {"op":"replace","path":"/spec/template/spec/containers/0/resources/requests/memory","value":"8Gi"},
      {"op":"replace","path":"/spec/template/spec/containers/0/resources/limits/memory","value":"16Gi"}
    ]'
    
  3. 验证调整结果

    kubectl get pod postgres-0 -o json | jq '.status.resources'
    

预期效果

  • 数据库服务无需重启,业务无中断
  • 资源调整过程中 Pod 保持 Running 状态
  • 监控显示内存使用量逐渐增加到新的限制

注意事项

  • 减少内存时需确保当前使用量低于新的限制值
  • 对于 CPU 调整,建议在业务低峰期进行
  • 调整后需验证应用性能是否符合预期

这些能力基础上,未来可构建真正 Vertical Pod Autoscaler(VPA)无缝扩缩方案。


✅ 2)PreferSameNode / PreferSameZone(服务流量路由策略)

  • 参考资料:https://kubernetes.io/docs/concepts/services-networking/service/

核心配置

  • PreferSameNode:优先选择本节点的 Endpoint,适合对延迟极其敏感的服务
  • PreferSameZone:优先选择同一可用区的 Endpoint(原 PreferClose 重命名,语义更明确)

场景:电商系统中的订单服务和库存服务,两者通信频繁,需要优化网络延迟。

实施步骤

  1. 部署库存服务

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: inventory-service
    spec:
      replicas: 3
      template:
        spec:
          containers:
          - name: inventory
            image: inventory-service:v1
            # 其他配置...
    
  2. 创建优化路由策略的 Service

    apiVersion: v1
    kind: Service
    metadata:
      name: inventory-service
    spec:
      selector:
        app: inventory
      ports:
      - port: 8080
        targetPort: 8080
      trafficDistribution:
        type: PreferSameZone  # 优先选择同可用区的端点
    
  3. 部署订单服务

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 3
      template:
        spec:
          containers:
          - name: order
            image: order-service:v1
            # 其他配置...
    

预期效果

  • 订单服务访问库存服务时,优先选择同可用区的实例
  • 跨可用区网络流量减少约 70%
  • 服务响应时间降低 15-30%

注意事项

  • 需确保各可用区都有足够的实例分布
  • 对于有状态服务,可能需要结合其他策略使用
  • 可通过 kubectl get endpoints inventory-service 查看端点分布

✅ 3)Job API Managed-By(Job 管理者字段)

  • 参考资料:https://kubernetes.io/docs/concepts/workloads/controllers/job/

注意这个功能的实现需要安装第三方控制器,以 JobSet 控制器为例具体安装方法请参考下面链接:

  • https://jobset.sigs.k8s.io/docs/installation/

核心价值

  • 为 Job 资源添加 managedBy 字段,明确指定 Job 的创建者和管理者
  • 支持第三方控制器通过此字段准确识别和管理自己创建的 Job
  • 简化状态同步逻辑,提高任务管理的可靠性

场景:使用自定义 CI/CD 控制器管理构建和测试任务,需要跟踪 Job 的创建者和状态。

实施步骤

  1. 控制器创建 Job 时添加 managedBy 字段

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-job-123
      labels:
        pipeline: build-456
    spec:
      managedBy: my-ci-controller  # 指定管理者
      template:
        spec:
          containers:
          - name: test
            image: test-runner:v1
            command: ["run-tests.sh"]
          restartPolicy: Never
    
  2. 控制器查询和管理 Job

    # 查找由特定控制器管理的所有 Job
    kubectl get jobs --field-selector spec.managedBy=my-ci-controller
    
    # 监控这些 Job 的状态
    kubectl get jobs --field-selector spec.managedBy=my-ci-controller -w
    
  3. 状态同步和清理

    • 控制器可根据 managedBy 字段识别自己创建的 Job
    • 实现更可靠的状态同步和失败重试逻辑
    • 定期清理已完成的 Job,避免资源泄漏

预期效果

  • 控制器能够准确识别和管理自己创建的 Job
  • 状态同步更加可靠,减少任务丢失风险
  • 资源管理更加高效,避免僵尸任务

注意事项

  • managedBy 字段为可选,不影响现有 Job 行为
  • 建议使用控制器的唯一标识符作为 managedBy 值
  • 结合标签使用可实现更精细的管理

🧪 三、Beta 特性 — 功能完善中(默认启用或可选)

⚙️ 1)Expose Node Topology Labels via Downward API

在多区域部署中,应用经常需要知道自己运行在哪个可用区或区域,以便进行相应的配置调整。以前,我们需要通过 API 调用获取这些信息,这不仅增加了复杂性,还需要额外的 RBAC 权限。现在,通过 Downward API 直接获取节点拓扑标签,大大简化了应用的实现。

⚙️ 2)Native Storage Version Migration

在管理大型集群中,存储版本迁移一直是一个比较繁琐的过程。以前需要依赖外部工具,并且需要仔细协调迁移时间。现在,核心控制平面内置了存储版本迁移支持,我们在测试中发现,整个迁移过程更加平滑,出错率也大大降低。

⚙️ 3)Opportunistic Batching(调度机会批处理)

在高性能计算场景中,经常需要同时调度大量相似的 Pod。以前,调度器会逐个处理这些 Pod,效率较低。通过启用 Opportunistic Batching 特性,观察到调度性能提升了约 40%,特别是在大规模 Pod 创建时,效果尤为明显。

⚙️ 4)HPA 可配置容忍度(Configurable Tolerance)

在电商系统中,不同服务对负载变化的敏感度不同。例如,支付服务需要更快速地响应负载变化,而后台管理服务则可以更保守一些。HPA 可配置容忍度特性让我们能够为不同服务设置不同的扩缩容策略,优化了资源使用效率。

⚙️ 5)CSI 驱动 Token 注入 via Secrets(安全增强)

在金融行业客户场景中,安全性是首要考虑因素。以前,CSI 驱动的 ServiceAccount Token 会以日志形式暴露在 volume_context 中,存在安全隐患。现在,通过 secrets 字段注入,大大提高了安全性,符合金融行业的合规要求。


🧠 四、Alpha 特性 — 新能力试验中

💡 1)Workload Aware Scheduling + Gang Scheduling

在 AI 训练场景中,经常需要同时调度多个 GPU Pod 来组成一个训练任务。以前只能依赖第三方调度器来实现这种 “全或无” 的调度需求。现在,Kubernetes 内置的 Workload API 和 Gang Scheduling 特性,提供了原生的解决方案。

在测试中创建了一个包含 8 个 GPU Pod 的训练任务,启用 Gang Scheduling 后,所有 Pod 要么同时成功调度,要么都不调度,避免了部分 Pod 调度失败导致的资源浪费。

💡 2)Extended Toleration Operators

在多租户集群中,节点质量参差不齐,需要根据应用的 SLA 要求将其调度到不同质量级别的节点上。以前只能通过标签和固定的容忍度来实现,灵活性有限。现在,Extended Toleration Operators 特性支持数值比较运算符(>、<),让我们能够更精细地控制调度策略。

💡 3)Mutable Resources for Suspended Jobs

在批处理系统中,经常会遇到 Job 资源配置错误的情况。以前,如果 Job 已经创建,只能删除它并重新创建,这会丢失原有的状态。现在,Mutable Resources for Suspended Jobs 特性允许暂停 Job 并修改其资源配置,然后再恢复执行,大大提高了操作的灵活性。

💡 4)Watch-based Route Controller Reconciliation

在大规模集群中,节点数量众多,路由同步一直是一个挑战。以前,CCM 路由控制器依赖定时轮询,不仅效率低,而且延迟高。现在,基于 Node 事件驱动的同步机制,让路由同步更加及时,同时也减少了 API 服务器的负载。在我们的测试集群中,路由同步延迟从原来的分钟级降低到了秒级。


⚠️ 五、弃用 / 移除(注意向后兼容)

⚠️ 重要提醒:这些变更会影响升级质量及行为差异,请特别关注!

  • cgroup v1 支持被完全移除(必须升级到 cgroup v2)
  • 容器运行时 containerd v1.x 支持终止,需迁往 v2+(如 containerd 2.1)
  • 早期 Ingress NGINX 将停止维护,建议迁移到 Gateway API 或其他控制器
  • Gateway API 安装参考:https://blog.csdn.net/qq_39965541/article/details/157809071?spm=1011.2415.3001.5331

📝 六、补充生态变化(各发行版动态)

例如 Canonical Kubernetes 1.35 带来:

  • containerd v2.1.5
  • CoreDNS 控制器水平优化
  • IPv6-only 默认 VXLAN Overlay

这些是某个 distro 的细节实现,与上游 K8s 核心功能关联但非核心官方标准。


📊 七、总结要点

📌 生产就绪(GA)

  • ✅ In-Place Pod Resize - 运行时资源调整,无需重建
  • ✅ PreferSameNode/PreferSameZone - 更智能的服务流量路由
  • ✅ Job Managed-By - 第三方控制器更好管理 Job

🧪 Beta 能力增强

  • ⚙️ Downward API 拓扑标签获取
  • ⚙️ 内置存储版本迁移
  • ⚙️ 调度机会批处理,提高效率
  • ⚙️ HPA 可配置容忍度
  • ⚙️ CSI 驱动 Token 注入安全增强

💡 Alpha 试验性新技术

  • 🔹 Workload API + Gang Scheduling - 适合 AI/ML 场景
  • 🔹 扩展容忍运算符,支持数值比较
  • 🔹 挂起 Job 资源可修改
  • 🔹 事件驱动的路由控制器同步

⚠️ 弃用/移除注意

  • cgroup v1 完全淘汰
  • containerd v1 终止支持
  • Ingress NGINX 进入维护模式

📎 升级建议

  • 升级前检查 cgroup v2 支持状态
  • 对 Stateful workloads,测试 In-Place Resize 行为
  • 评估现有服务是否依赖 deprecated 功能
  • 如启用 Gang Scheduling,确认 feature gates 和 kube-scheduler 配置

结尾

在实际落地过程中,建议:

  1. 分阶段实施:先在非核心业务系统上测试新特性,收集性能数据和运行状态
  2. 建立监控体系:针对新特性(如资源调整、服务路由)设置专门的监控指标
  3. 制定回滚方案:虽然 GA 特性稳定性较高,但仍需准备详细的回滚策略
  4. 文档化实践:将实施过程和遇到的问题记录下来,形成内部最佳实践

写在最后

整理这些技术文档和实践经验确实花费了不少时间和精力,如果你觉得本文对你有所帮助,欢迎关注我后续的技术分享,我会持续更新 Kubernetes 相关的实战经验和最佳实践。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐