教程

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

重点关注 RemediationIssuedRemediationObservedRemediationFailedInFlightLimitReachedMissingNodePoolLabel。如果策略没有触发,依次核对集群级开关、节点标签、策略选择器、条件状态、持续时间和并发预算。

上线前的安全清单

  • 先在测试节点池制造可恢复的异常并观察完整替换流程。
  • 确认 PodDisruptionBudget 不会永久阻塞排空。
  • 为有状态工作负载验证卷重新挂载和应用恢复时间。
  • 为 GPU 节点预留更长启动保护期,避免驱动初始化期间误修复。
  • 为修复事件建立告警,不要把自动化当作无需观察的黑盒。

DigitalOcean 官方配置说明与字段定义请参阅DOKS 自动节点修复文档。若要了解近期 GPU 节点池、缩容至零和 Routing Agent 等能力,可继续阅读DigitalOcean Kubernetes 四项新功能

查看 DigitalOcean Kubernetes 产品能力,并在生产启用前完成故障演练与容量评估。