DigitalOcean Kubernetes 自动节点修复教程:配置与排障指南
DOKS 自动节点修复已进入公开预览。本文介绍如何启用 Data Plane Operator、定义 NodeRemediationConfig、控制并发替换预算,并通过事件排查未触发或替换卡住的问题。
DigitalOcean Kubernetes(DOKS)在 2026 年 7 月 8 日推出了自动节点修复(Automatic Node Remediation)公开预览。它可以持续观察工作节点的 Kubernetes 条件;当某个异常状态持续超过你设定的时间后,自动执行隔离、排空并替换,减少人工发现和处理故障节点的时间。
这项能力适合需要稳定运行 Web 服务、数据库代理、队列消费者或 GPU 推理任务的团队。不过,自动替换并不等于应用天然高可用。启用前仍应准备多副本、PodDisruptionBudget、反亲和规则和可靠的持久化方案。
自动节点修复如何工作
DOKS 通过集群中的 Data Plane Operator 观察 Node 对象。管理员用两个集群级自定义资源描述策略:
DataPlaneOperatorConfig:控制整个集群是否允许节点修复。NodeRemediationConfig:定义哪些节点、哪些异常条件、持续多长时间以及采用哪种替换动作。
当节点满足策略后,Operator 会调用 DigitalOcean API 替换对应工作节点。该功能是选择启用的公开预览能力,不会在没有配置的情况下自动替换节点。
启用前检查
- 确认你拥有创建集群级资源的
kubectl权限。 - 确认工作节点带有 DOKS 自动添加的
doks.digitalocean.com/node-pool-id标签。 - 为关键应用设置多副本和 PodDisruptionBudget,并确认单节点丢失不会造成数据损坏。
- 先在非生产节点池测试等待时间、节点选择器和并发替换预算。
如果你还在规划集群基础设施,可先阅读DigitalOcean Kubernetes 基础架构最佳实践,再决定哪些节点池适合自动修复。
配置一个保守的默认修复策略
下面的示例先启用集群级修复,然后为所有没有更具体策略的节点设置默认规则。节点启动后的前 15 分钟不会被替换;同一时间最多修复 1 个节点;只有 Ready=False 持续 10 分钟才执行排空后替换。
apiVersion: dataplane-operator.doks.digitalocean.com/v1alpha1
kind: DataPlaneOperatorConfig
metadata:
name: user-config
spec:
nodeConditionRemediation:
enabled: true
---
apiVersion: dataplane-operator.doks.digitalocean.com/v1alpha1
kind: NodeRemediationConfig
metadata:
name: default-workers
spec:
nodeSelector: {}
startupGracePeriod: 15m
inFlightLimit: 1
observationDeadline: 4h
unhealthyConditions:
- type: Ready
status: "False"
duration: 10m
remediationAction: cordon-drain-replace
保存为 doks-node-remediation.yaml 后执行:
kubectl apply -f doks-node-remediation.yaml
kubectl get dataplaneoperatorconfig user-config -o yaml
kubectl get noderemediationconfig default-workers -o yaml
关键字段怎么选
| 字段 | 作用 | 建议 |
|---|---|---|
startupGracePeriod | 新节点启动保护期 | 普通节点可从 10–15 分钟开始;大型 GPU 节点通常需要更长时间。 |
inFlightLimit | 同一策略允许同时进行的修复数 | 生产集群先设为 1,确认替换稳定后再评估提高。 |
observationDeadline | 等待健康替代节点的最长时间 | 必须覆盖节点创建、镜像拉取和基础组件就绪所需时间。 |
duration | 异常条件连续存在多久才触发 | 避免把短暂网络抖动当作节点故障。 |
remediationAction | 替换动作 | 优先使用 cordon-drain-replace;只有节点无法排空且有明确应急方案时才考虑 force-replace。 |
为不同节点池设置不同策略
一个节点只会选择一个最匹配的 NodeRemediationConfig。匹配标签更多的策略优先,因此可以为普通节点设置默认策略,再为 GPU 节点池设置更长启动保护期和更低并发预算。若某类节点暂时不允许自动修复,可为其创建更具体的策略并设置 inFlightLimit: 0。
DOKS 近期也上线了 GPU 节点健康门控。它负责在驱动和关键组件未就绪时阻止 Pod 调度;节点修复则负责在异常持续后替换节点。两者的职责不同,建议结合阅读DOKS GPU 节点就绪控制器指南。
监控修复事件
修复事件记录在 NodeRemediationConfig 上,而不是 Node 对象上。可以用以下命令查看:
kubectl describe noderemediationconfig default-workers
kubectl get events --field-selector involvedObject.kind=NodeRemediationConfig
重点关注 RemediationIssued、RemediationObserved、RemediationFailed、InFlightLimitReached 和 MissingNodePoolLabel。如果策略没有触发,依次核对集群级开关、节点标签、策略选择器、条件状态、持续时间和并发预算。
上线前的安全清单
- 先在测试节点池制造可恢复的异常并观察完整替换流程。
- 确认 PodDisruptionBudget 不会永久阻塞排空。
- 为有状态工作负载验证卷重新挂载和应用恢复时间。
- 为 GPU 节点预留更长启动保护期,避免驱动初始化期间误修复。
- 为修复事件建立告警,不要把自动化当作无需观察的黑盒。
DigitalOcean 官方配置说明与字段定义请参阅DOKS 自动节点修复文档。若要了解近期 GPU 节点池、缩容至零和 Routing Agent 等能力,可继续阅读DigitalOcean Kubernetes 四项新功能。
查看 DigitalOcean Kubernetes 产品能力,并在生产启用前完成故障演练与容量评估。
