主题
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 集群中因
TopologySpreadConstraints与NodeAffinity冲突导致的 Pending Pod 比例同比上升 41%,暴露了传统声明式约束模型的表达力瓶颈。
Garhwal 版本正是对上述矛盾的体系化回应——它不追求炫技式新特性,而是通过 Stable 层加固(16 个毕业功能)、Beta 层收敛(23 个进入 Beta 的特性均来自真实生产反馈)、以及 Alpha 层精准试探(27 个 Alpha 全部绑定明确的 SIG owner 和 e2e test coverage threshold),构建起一条可验证、可审计、可回滚的演进路径。
值得强调的是:本次 零新增 CRD,所有 Alpha/Beta 功能均基于现有 API 扩展(如 PodSpec、NodeStatus、ResourceClaim),这标志着 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✅ 技术判断:该特性并非简单暴露硬件拓扑,而是将
kubelet的device-plugin回调与scheduler的ScorePlugin深度耦合,实现了“设备发现 → 拓扑建模 → 约束求解”的闭环。建议在启用前,通过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运行时部署vLLMPod(规避 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 的四条硬性准则
Stable 功能必须全量启用
TopologyAwareHints、ServerSideApplyv2(修复了 v1.36 的lastAppliedConfig冲突 bug)、PodSchedulingReadiness均已通过 10+ 家超大规模用户验证。禁用它们等于主动放弃稳定性红利。Beta 功能采用“三步灰度法”
- Step 1:在非核心命名空间(如
ci-test)开启并监控admission拒绝率; - Step 2:对
RuntimeClassAdmission设置failurePolicy: Ignore,收集Warning事件; - Step 3:仅当
kube-apiserveradmission_controller_admission_duration_secondsP99 < 50ms 时,切换为failurePolicy: Fail。
- Step 1:在非核心命名空间(如
Alpha 功能严格隔离
所有 Alpha 特性(含PodResourceClaim增强)必须运行在独立的kube-scheduler实例中(通过--scheduler-name=alpha-scheduler),并与主调度器共享PriorityClass但隔离NodeSelector。禁止任何 Alpha 功能影响核心工作负载的调度 SLA。Logo 背后的运维隐喻:建立“Ringaal 编织式”协作流程
Garhwal logo中的竹编框架(ringaal)启示我们:真正的稳定性来自各环节的韧性交织。建议 SRE 团队每月执行一次 Cross-SIG Health Check:- SIG-Node 提供
kubelet拓扑指标(node_topology_hints_count) - SIG-Scheduling 提供
scheduler_perf_p99与unschedulable_pods_total - SIG-AI 提供
gpu_topology_mismatch_rate
三方数据必须在同一看板对齐——这才是 Kubernetes 生态健康的“真·可观测性”。
- SIG-Node 提供
延伸阅读
- 📘 官方深度文档:Kubernetes v1.37 Release Notes(重点关注
TopologyAwareHints的kubelet启动参数与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,实测vLLMp99 延迟下降 37%,详见其 KubeCon NA 2026 Talk “Garhwal in Production”
Garhwal 不是一座待征服的山峰,而是一条已被无数足迹夯实的山径——它提醒我们:Kubernetes 的终极力量,从来不在某个炫目特性,而在每一个 SIG 的 commit、每一次 CI 的 green check、每一行文档的精准措辞,以及每一位 SRE 在深夜排查 Pending Pod 时,对 kubectl describe node 输出的耐心凝视。