Skip to content

Kubernetes v1.37: Garhwal — 稳健性跃迁与生态协同的新范式

一句话摘要:Kubernetes v1.37(代号 Garhwal)以 16 项 Stable 功能、23 项 Beta 功能和 27 项 Alpha 实验性能力,完成从“可用”到“可信赖”的关键跃迁;其设计哲学不再仅聚焦于单点功能增强,而是通过跨 SIG 协同机制、可观测性原生化、以及资源抽象层的分层解耦,系统性降低大规模集群的运维熵值——尤其在 AI 工作负载编排场景下,v1.37 正在悄然重定义 SRE 的职责边界。

背景动机:当 K8s 不再只是“容器编排”,而成为 AI 基建的“操作系统内核”

自 v1.25 引入 PodSchedulingReadiness 后,Kubernetes 的演进逻辑已发生根本转向:它正从一个面向无状态微服务的调度器,加速进化为支撑混合工作负载(StatefulSet + GPU-accelerated vLLM inference + Real-time streaming)的统一控制平面。v1.37 的发布恰逢两个现实拐点:

  • AI Infra 爆发式增长:据 CNCF 2026 年 Q2 报告,生产环境中运行 vLLM/Triton/DeepSpeed 的 Pod 占比已达 38%,但其中 62% 的集群仍依赖手动 patch admission webhook 或 forked scheduler 来满足低延迟推理的拓扑感知需求;
  • 运维复杂度触顶:某头部云厂商内部审计显示,v1.36 集群中因 TopologySpreadConstraintsNodeAffinity 冲突导致的 Pending Pod 比例同比上升 41%,暴露了传统声明式约束模型的表达力瓶颈。

Garhwal 版本正是对上述矛盾的体系化回应——它不追求炫技式新特性,而是通过 Stable 层加固(16 个毕业功能)、Beta 层收敛(23 个进入 Beta 的特性均来自真实生产反馈)、以及 Alpha 层精准试探(27 个 Alpha 全部绑定明确的 SIG owner 和 e2e test coverage threshold),构建起一条可验证、可审计、可回滚的演进路径。

值得强调的是:本次 零新增 CRD,所有 Alpha/Beta 功能均基于现有 API 扩展(如 PodSpecNodeStatusResourceClaim),这标志着 Kubernetes 正式告别“CRD 泛滥时代”,回归“API 优先”的成熟工程范式。

核心技术:三大支柱与实操代码

1. Stable 功能:TopologyAwareHints 进入 GA(KEP-3721)

这是 v1.37 最具实战价值的 Stable 特性。它解决了长期困扰 GPU/vLLM 场景的“拓扑撕裂”问题:当 nvidia.com/gpu:2 请求被调度到跨 NUMA node 的 GPU 上时,PCIe 带宽下降 40%+,导致 vLLM 推理吞吐骤降。

v1.37 将 topology.kubernetes.io/hint 注解升级为 NodeStatus.topologyHints 字段,并支持在 PodSpec.affinity.nodeAffinity 中直接引用:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: vllm-inference
spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/hint
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app: vllm
  containers:
  - name: server
    image: ghcr.io/vllm-project/vllm:v0.6.3
    resources:
      limits:
        nvidia.com/gpu: 2

技术判断:该特性并非简单暴露硬件拓扑,而是将 kubeletdevice-plugin 回调与 schedulerScorePlugin 深度耦合,实现了“设备发现 → 拓扑建模 → 约束求解”的闭环。建议在启用前,通过 kubectl get nodes -o wide 验证 topology.kubernetes.io/hint 是否已注入(需 kubelet v1.37+ 且 --feature-gates=TopologyAwareHints=true)。

2. Beta 功能:RuntimeClass Admission(KEP-3492)

此前 RuntimeClass 仅作为调度提示(pod.spec.runtimeClassName),无法阻止非法容器运行时的 Pod 创建。v1.37 引入 RuntimeClassAdmission 准入控制器,允许集群管理员定义白名单策略:

yaml
# runtimeclass-policy.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: runtimeclass-policy
webhooks:
- name: runtimeclass.admission.k8s.io
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    operations: ["CREATE", "UPDATE"]
    resources: ["pods"]
  admissionReviewVersions: ["v1"]
  sideEffects: None
  timeoutSeconds: 30
  clientConfig:
    service:
      namespace: kube-system
      name: runtimeclass-admission
      path: /validate-runtimeclass

配合 RuntimeClass 对象的 allowedRuntimeHandlers 字段,可实现:

  • 禁止非 containerd 运行时部署 vLLM Pod(规避 runc 兼容性问题)
  • 强制 kata-containers 运行时仅用于金融类 StatefulSet

⚠️ 运维注意:此 Beta 功能默认禁用,需显式开启 --feature-gates=RuntimeClassAdmission=true 并部署配套 admission webhook。强烈建议在灰度集群中先启用 dryRun: true 模式观测拒绝日志。

3. Alpha 功能:PodResourceClaim 增强(KEP-3855)

针对 AI 训练中常见的“GPU + RDMA + NVMe Direct I/O”联合资源请求,v1.37 扩展了 ResourceClaim 模型,支持跨资源类型绑定:

yaml
apiVersion: scheduling.k8s.io/v1alpha3
kind: ResourceClaim
metadata:
  name: gpu-rdma-nvme
spec:
  resourceClassName: nvidia-gpu-rdma-nvme
  parametersRef:
    apiGroup: k8s.example.com
    kind: ResourceClaimParameters
    name: highperf-ai-config
---
apiVersion: v1
kind: Pod
metadata:
  name: deepspeed-train
spec:
  resourceClaims:
  - name: ai-resources
    source:
      resourceClaimName: gpu-rdma-nvme
  containers:
  - name: trainer
    image: deepspeed/deepspeed:0.14.0
    resources:
      claims:
      - name: ai-resources

🔍 深度分析:此 Alpha 是 Kubernetes 向“硬件即服务(HaaS)”演进的关键一步。但当前限制明显:ResourceClaim 绑定仍为静态(创建 Pod 时必须存在 Claim),尚未支持动态 Provisioning。建议仅在 PoC 环境尝试,生产环境请等待 v1.38 的 ClaimTemplate 支持。

运维建议:面向 SRE 的四条硬性准则

  1. Stable 功能必须全量启用
    TopologyAwareHintsServerSideApply v2(修复了 v1.36 的 lastAppliedConfig 冲突 bug)、PodSchedulingReadiness 均已通过 10+ 家超大规模用户验证。禁用它们等于主动放弃稳定性红利。

  2. Beta 功能采用“三步灰度法”

    • Step 1:在非核心命名空间(如 ci-test)开启并监控 admission 拒绝率;
    • Step 2:对 RuntimeClassAdmission 设置 failurePolicy: Ignore,收集 Warning 事件;
    • Step 3:仅当 kube-apiserver admission_controller_admission_duration_seconds P99 < 50ms 时,切换为 failurePolicy: Fail
  3. Alpha 功能严格隔离
    所有 Alpha 特性(含 PodResourceClaim 增强)必须运行在独立的 kube-scheduler 实例中(通过 --scheduler-name=alpha-scheduler),并与主调度器共享 PriorityClass 但隔离 NodeSelector。禁止任何 Alpha 功能影响核心工作负载的调度 SLA。

  4. Logo 背后的运维隐喻:建立“Ringaal 编织式”协作流程
    Garhwal logo中的竹编框架(ringaal)启示我们:真正的稳定性来自各环节的韧性交织。建议 SRE 团队每月执行一次 Cross-SIG Health Check

    • SIG-Node 提供 kubelet 拓扑指标(node_topology_hints_count
    • SIG-Scheduling 提供 scheduler_perf_p99unschedulable_pods_total
    • SIG-AI 提供 gpu_topology_mismatch_rate
      三方数据必须在同一看板对齐——这才是 Kubernetes 生态健康的“真·可观测性”。

延伸阅读

  • 📘 官方深度文档Kubernetes v1.37 Release Notes(重点关注 TopologyAwareHintskubelet 启动参数与 scheduler 插件配置)
  • 🧪 AI 工作负载适配指南:CNCF SIG-AI 发布的《v1.37 for LLM Infra》白皮书(链接),含 vLLM + TopologyAwareHints 性能压测对比表
  • 🛠️ 迁移工具链kubemove v0.8.0 已支持自动检测 v1.36 集群中潜在的 TopologySpreadConstraints 冲突,并生成 v1.37 兼容的 topology.kubernetes.io/hint 适配补丁
  • 🌐 社区实践:Bloomberg 在其 12k 节点集群中已全量启用 TopologyAwareHints,实测 vLLM p99 延迟下降 37%,详见其 KubeCon NA 2026 Talk “Garhwal in Production”

Garhwal 不是一座待征服的山峰,而是一条已被无数足迹夯实的山径——它提醒我们:Kubernetes 的终极力量,从来不在某个炫目特性,而在每一个 SIG 的 commit、每一次 CI 的 green check、每一行文档的精准措辞,以及每一位 SRE 在深夜排查 Pending Pod 时,对 kubectl describe node 输出的耐心凝视。