教程

DOKS GPU 节点就绪控制器:避免驱动异常时调度工作负载

DOKS 节点就绪控制器会在 Cilium、控制平面桥接或 GPU 驱动未健康时保留 NoSchedule 污点。本文说明版本要求、GPU 健康条件、排查命令和受支持的指标覆盖方式。

GPU 节点的 Kubernetes Ready=True 并不总是代表 GPU 驱动、设备插件和监控组件已经可以承载训练或推理任务。DigitalOcean Kubernetes(DOKS)在 2026 年 7 月 2 日公布了节点就绪控制器(Node Readiness Controller)公开预览,用额外的节点条件和 NoSchedule 污点,避免工作负载过早进入尚未完成初始化或存在 GPU 健康问题的节点。

该控制器由 DOKS 托管并自动部署,不需要手动启用。管理员的主要工作是确认集群版本、观察条件与污点,并在确有需要时通过受支持的 ConfigMap 调整 GPU 故障指标。

节点就绪控制器解决什么问题

控制器通过 NodeReadinessRule 描述节点必须满足的条件。当条件未满足时,它会保留以 readiness.k8s.io/ 开头的 NoSchedule 污点;所有条件满足后,污点自动移除,节点才接受新的 Pod。

这与 NVIDIA 或 AMD 设备插件使用的 GPU 污点不同,也与自动节点修复不同:

  • 节点就绪控制器:在关键组件或 GPU 健康条件不满足时阻止调度。
  • 自动节点修复:当异常持续超过策略阈值后替换工作节点。

如果需要在异常持续时自动替换节点,可结合DOKS 自动节点修复教程设计完整的检测、隔离与恢复流程。

版本要求与托管规则

控制器和 CRD 会出现在所有 DOKS 集群中,但官方托管规则要求以下版本或更高补丁版本:1.33.9-do.61.34.5-do.61.35.1-do.61.36.0-do.0。较早补丁版本可能运行控制器但没有这三条托管规则,因此排查前应先确认集群版本。

托管规则目标节点关键条件
doks-critical所有非控制平面工作节点Cilium Agent 与控制平面桥接组件就绪
amd-gpu-criticalAMD GPU 节点doks.kubernetes.io/AmdGpuReady=True
nvidia-gpu-critical启用 DCGM 的 NVIDIA GPU 节点doks.kubernetes.io/NvidiaGpuReady=True

不要直接修改控制器或托管的 NodeReadinessRule。DOKS reconciler 会覆盖这些变更。需要调整 GPU 检查项时,应使用后文所述的 ConfigMap。

检查节点条件和污点

先查看单个节点的完整状态:

kubectl describe node <node-name>

一个尚未满足 AMD GPU 就绪条件的节点可能同时显示:

Taints: readiness.k8s.io/DOKSAmdGpuReady=pending:NoSchedule

Conditions: Type Status doks.kubernetes.io/AmdGpuReady False Ready True

即使标准 Ready 条件为真,GPU 就绪条件为假时,控制器仍会阻止新 Pod 调度。要快速列出所有节点的就绪污点,可使用:

kubectl get nodes   -o custom-columns='NAME:.metadata.name,TAINTS:.spec.taints[*].key'

当相关条件全部恢复为 True 后,控制器会自动移除对应污点。

GPU 健康条件来自哪里

DOKS 在 GPU 工作节点上运行条件报告器。报告器读取本机 GPU 指标导出器:NVIDIA 节点通常使用 DCGM Exporter,AMD 节点使用 AMD Device Metrics Exporter。指标端点不可访问、返回非 2xx,或受监控的故障指标大于 0 时,对应 GPU 就绪条件会变为 False

这能降低驱动异常、不可纠正 ECC 错误或 GPU 关键组件未完成初始化时接收工作负载的风险。计划 GPU 节点池时,也建议参考DigitalOcean Kubernetes 的 NVIDIA H100 GPU 支持DOKS GPU 节点与缩容至零能力

用受支持的 ConfigMap 调整 GPU 指标

如果团队有额外的 GPU 故障指标,或确认某个默认指标不适合当前运行手册,可以创建 kube-system/node-readiness-condition-gpu-metrics ConfigMap。下面示例增加一个内部指标,并禁用一个经评估后不需要的指标:

apiVersion: v1
kind: ConfigMap
metadata:
  name: node-readiness-condition-gpu-metrics
  namespace: kube-system
data:
  metrics.yaml: |
    additionalMetrics:
      - MY_ADDITIONAL_METRIC
    disabledMetrics:
      - MY_DISABLED_METRIC

应用后无需重启报告器:

kubectl apply -f node-readiness-gpu-metrics.yaml

删除该 ConfigMap 会恢复默认指标集合。禁用默认故障指标会降低健康门控覆盖面,因此应记录原因、风险和回滚步骤,并先在非生产 GPU 节点池验证。

常见排查顺序

  1. 确认集群版本达到托管规则要求。
  2. 检查节点标签,确认 GPU 品牌和 NVIDIA DCGM 启用状态符合规则选择器。
  3. 查看 kubectl describe node 中的 readiness.k8s.io/ 污点和 doks.kubernetes.io/ 条件。
  4. 检查 GPU 指标导出器及条件报告器是否正常,确认指标端点可访问。
  5. 核对自定义 ConfigMap 的名称、命名空间和 YAML 缩进。
  6. 不要通过手动删除污点长期绕过健康检查;应修复条件来源并让控制器自动解除门控。

生产使用建议

  • 为 GPU 工作负载配置合理的副本、检查点和任务重试策略。
  • 同时监控节点条件、GPU 指标和 Pod Pending 原因,避免只看标准 Ready 状态。
  • 将就绪门控与节点修复策略分开设置:先阻止调度,再根据持续时间决定是否替换。
  • 在升级 DOKS 补丁版本后重新检查托管规则和 GPU 条件。

完整版本要求、托管规则和默认 GPU 指标以DigitalOcean 节点就绪控制器官方文档为准。GPU 节点池规格、驱动与插件说明可参考DOKS GPU Worker Nodes 文档

了解 DigitalOcean Kubernetes,并在生产 GPU 节点池上线前验证驱动初始化、故障门控和工作负载恢复流程。