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.6、1.34.5-do.6、1.35.1-do.6、1.36.0-do.0。较早补丁版本可能运行控制器但没有这三条托管规则,因此排查前应先确认集群版本。
| 托管规则 | 目标节点 | 关键条件 |
|---|---|---|
doks-critical | 所有非控制平面工作节点 | Cilium Agent 与控制平面桥接组件就绪 |
amd-gpu-critical | AMD 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 节点池验证。
常见排查顺序
- 确认集群版本达到托管规则要求。
- 检查节点标签,确认 GPU 品牌和 NVIDIA DCGM 启用状态符合规则选择器。
- 查看
kubectl describe node中的readiness.k8s.io/污点和doks.kubernetes.io/条件。 - 检查 GPU 指标导出器及条件报告器是否正常,确认指标端点可访问。
- 核对自定义 ConfigMap 的名称、命名空间和 YAML 缩进。
- 不要通过手动删除污点长期绕过健康检查;应修复条件来源并让控制器自动解除门控。
生产使用建议
- 为 GPU 工作负载配置合理的副本、检查点和任务重试策略。
- 同时监控节点条件、GPU 指标和 Pod Pending 原因,避免只看标准 Ready 状态。
- 将就绪门控与节点修复策略分开设置:先阻止调度,再根据持续时间决定是否替换。
- 在升级 DOKS 补丁版本后重新检查托管规则和 GPU 条件。
完整版本要求、托管规则和默认 GPU 指标以DigitalOcean 节点就绪控制器官方文档为准。GPU 节点池规格、驱动与插件说明可参考DOKS GPU Worker Nodes 文档。
了解 DigitalOcean Kubernetes,并在生产 GPU 节点池上线前验证驱动初始化、故障门控和工作负载恢复流程。
