更新时间:2024-10-14 GMT+08:00

节点排水

操作场景

您可以通过控制台使用节点排水功能,系统会将节点设置为不可调度,然后安全地将节点上所有符合节点排水规则说明的Pod驱逐,后续新建的Pod都不会再调度到该节点。

在节点故障等场景下,该功能可帮助您快速排空节点,将故障节点进行隔离,原节点上被驱逐的Pod将会由工作负载controller转移到其他正常可调度的节点上。

为保障排水期间业务可用性,建议为负载设置干扰预算(Disruption Budget),否则Pod重新调度期间负载功能可能无法正常使用。

前提条件

  • 您已创建一个集群,且集群版本满足以下要求:
    • v1.21集群:v1.21.10-r0及以上版本
    • v1.23集群:v1.23.8-r0及以上版本
    • v1.25集群:v1.25.3-r0及以上版本
    • v1.25以上版本集群
  • 如果您通过IAM用户使用节点排水功能,至少需要具有以下一项权限,详情请参见命名空间权限(Kubernetes RBAC授权)
    • cluster-admin(管理员权限):对全部命名空间下所有资源的读写权限。
    • drainage-editor:节点排水操作权限,可执行节点排水。
    • drainage-viewer:节点排水只读权限,仅可查看节点排水状态,无法执行节点排水。

节点排水规则说明

节点排水功能会安全驱逐节点上的Pod,但对于满足以下过滤规则的Pod,系统会进行例外处理:

Pod筛选条件

使用强制排水

不使用强制排水

Pod的status.phase字段为Succeeded或Failed

删除

删除

Pod不受工作负载controller管理

删除

放弃排水

Pod由DaemonSet管理

忽略

放弃排水

Pod中挂载了emptyDir类型的volume

驱逐

放弃排水

由kubelet直接管理的静态Pod

忽略

忽略

节点排水过程中可能会对Pod执行的操作如下:

  • 删除:Pod会从当前节点上删除,不会再重新调度至其他节点。
  • 驱逐:Pod会从当前节点上删除,且会重新调度至其他节点。
  • 忽略:Pod不会被驱逐或删除。
  • 放弃排水:若节点上存在放弃排水的Pod,节点排水过程会中止,不会驱逐或删除任何Pod。

节点排水操作

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在集群控制台左侧导航栏中选择“节点管理”,切换至“节点”页签。
  3. 找到目标节点,单击节点后的“更多 > 节点排水”
  4. 在弹出的“节点排水”窗口中,进行排水设置。

    • 超时时间(秒):超过设定的时间后排水任务会自动失败,0表示不设置超时时间。
    • 强制排水:使用强制排水时,将忽略DaemonSet管理的Pod,但会删除挂载了emptyDir卷的Pod和不受controller管理的Pod。详情请参见节点排水规则说明

  5. 单击“确定”,等待完成节点排水。

取消节点排水

v1.23.16-r0、v1.25.11-r0、v1.27.8-r0、v1.28.6-r0、v1.29.2-r0及以上版本的集群中,节点排水支持取消。

该操作将中止节点上的排水流程,但已经从这些节点上迁移的工作负载不会自动迁移回来。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在集群控制台左侧导航栏中选择“节点管理”,切换至“节点”页签。
  3. 找到处于“排水中”状态的节点,单击“取消排水”。
  4. 在确认框中单击“确定”,节点变成“已取消排水”状态,您可以单击“开启调度”,将节点恢复可调度状态。