自动修复 EKS 集群中的节点 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

自动修复 EKS 集群中的节点

本主题详细介绍 EKS 自动节点修复的行为以及如何根据您的需求进行配置。EKS 自动节点修复在 EKS Auto Mode 中默认启用,并且可以与 EKS 托管节点组和 Karpenter 一起使用。

下表总结了默认的 EKS 自动节点修复操作,这些操作适用于 EKS Auto Mode 、EKS 托管节点组和 Karpenter 的行为。当使用 EKS Auto Mode 或 Karpenter 时,所有 AcceleratedHardwareReady 修复操作均为 Replace,只有 EKS 托管节点组支持 Reboot 作为修复操作。

有关 EKS 节点监控代理检测到的节点运行状况问题及其相应的节点修复操作的详细列表,请参阅 使用 EKS 节点监控代理检测节点运行状况问题

节点状况 说明 修复等待时间 修复操作

AcceleratedHardwareReady

AcceleratedHardwareReady 表示节点上的加速硬件(GPU、Neuron)是否正常运行。

10m

更换或重启

ContainerRuntimeReady

ContainerRuntimeReady 表示容器运行时(containererd 等)是否正常运行并能运行容器。

30m

Replace(替换)

DiskPressure

DiskPressure 是一个标准的 Kubernetes 状况,表示节点正在经历磁盘压力(磁盘空间不足或 I/O 过高)。

不适用

KernelReady

KernelReady 表示内核是否运行正常,无严重错误、死锁或资源耗尽问题。

30m

Replace(替换)

MemoryPressure

MemoryPressure 是一个标准的 Kubernetes 状况,表示节点正在经历内存压力(可用内存不足)。

不适用

NetworkingReady

NetworkingReady 表示节点的网络堆栈(接口、路由、连接)是否正常运行。

30m

Replace(替换)

StorageReady

StorageReady 表示节点的存储子系统(磁盘、文件系统、I/O)是否正常运行。

30m

Replace(替换)

Ready

Ready 是标准的 Kubernetes 状况,表示节点运行正常并已准备好接收容器组(pod)。

30m

Replace(替换)

默认情况下,EKS 自动节点修复操作在以下场景中处于禁用状态。在每个场景中,正在进行的节点修复操作仍在继续。有关如何覆盖这些默认设置的信息,请参阅 配置自动节点修复

EKS 托管式节点组

  • 节点组的节点数量超过五个,并且节点组中超过 20% 的节点运行状况不佳。

  • 集群的可用区转移通过应用程序恢复控制器(ARC)触发。

EKS Auto Mode 和 Karpenter

  • NodePool 中超过 20% 的节点运行状况不佳。

  • 对于独立的 nodeClaims,集群中有 20% 的节点运行状况不佳。

配置自动节点修复

使用 EKS Auto Mode 时,自动节点修复无法配置,并且始终以与 Karpenter 相同的默认设置启用。

Karpenter

要将自动节点修复与 Karpenter 结合使用,请启用功能门控 NodeRepair=true。您可以通过 Karpenter 部署中的 --feature-gates CLI 选项或 FEATURE_GATES 环境变量来启用功能门控。有关更多信息,请参阅 Karpenter 文档。

托管节点组

您可以在创建新的 EKS 托管节点组时或通过更新现有 EKS 托管节点组来启用自动节点修复。

使用 EKS 托管节点组时,您可以通过以下设置控制节点自动修复行为。

要控制节点自动修复何时停止执行操作,请根据节点组中运行状况不佳节点的数量设置一个阈值。设置绝对数量或百分比,但不要同时设置两者。

设置 说明

maxUnhealthyNodeThresholdCount

节点自动修复停止执行操作的运行状况不佳节点的绝对数量。用于限制修复范围。

maxUnhealthyNodeThresholdPercentage

停止节点自动修复的运行状况不佳节点百分比(0-100)。

要控制同时修复的节点数量,您可以配置修复并行度。与运行状况不佳节点阈值一样,设置绝对数量或百分比,但不要同时设置两者。

设置 说明

maxParallelNodesRepairedCount

可同时修复的最大节点数量。

maxParallelNodesRepairedPercentage

要同时修复的运行状况不佳节点的最大百分比 (0–100)。

使用 nodeRepairConfigOverrides,您可以为特定状况自定义修复行为。当您需要对不同问题类型采取不同的修复操作或等待时间时,请使用此功能。

每个覆盖配置都需要以下所有字段:

字段 说明

nodeMonitoringCondition

节点监控代理报告的节点状况类型。例如:AcceleratedHardwareReadyNetworkingReadyStorageReadyKernelReady

nodeUnhealthyReason

运行状况不佳的具体原因代码。例如:NvidiaXID31ErrorIPAMDNotRunning

minRepairWaitTimeMins

在节点符合修复条件之前,该情况必须持续的最短时间(以分钟为单位)。使用此选项可以避免因临时问题修复节点。

repairAction

条件满足时采取的操作。有效值:Replace(终止并替换节点)、Reboot(重新启动节点)或NoAction(不执行修复操作)。

以下 AWS CLI 示例创建了一个具有自定义修复设置的节点组。

aws eks create-nodegroup \ --cluster-name my-cluster \ --nodegroup-name my-nodegroup \ --node-role arn:aws:iam::111122223333:role/NodeRole \ --subnets subnet-0123456789abcdef0 \ --node-repair-config '{ "enabled": true, "maxUnhealthyNodeThresholdPercentage": 10, "maxParallelNodesRepairedCount": 3, "nodeRepairConfigOverrides": [ { "nodeMonitoringCondition": "AcceleratedHardwareReady", "nodeUnhealthyReason": "NvidiaXID64Error", "minRepairWaitTimeMins": 5, "repairAction": "Replace" }, { "nodeMonitoringCondition": "AcceleratedHardwareReady", "nodeUnhealthyReason": "NvidiaXID31Error", "minRepairWaitTimeMins": 15, "repairAction": "NoAction" } ] }'

此配置执行以下操作:

  • 启用节点自动修复

  • 当超过 10% 的节点运行状况不佳时,停止修复操作

  • 一次最多修复 3 个节点

  • 覆盖 XID 64 错误(GPU 内存重新映射失败),在 5 分钟后替换节点。默认是在 10 分钟后重启。

  • 覆盖 XID 31 错误(GPU 内存页面故障),不采取任何操作。默认是在 10 分钟后重启。