最近更新时间:2023.06.08 10:12:52
首次发布时间:2021.12.17 18:56:31
本文主要描述通过控制台、Kubectl 等方式安全下线容器集群中节点的操作。
在容器服务业务的日常维护中,有时需要对集群中的某一个节点进行下线操作,比如:版本升级、扩容、变更操作、停机运维、节点回收等。
容器服务支持下线集群中指定的节点。进行下线节点操作后,将把该节点内的所有 Pod(不包含 DaemonSet 管理的 Pod)驱逐到集群内其他节点上。新产生的 Pod 无法被调度到该节点上。
在下线节点前需要检查节点的状态,以保证在节点下线过程中,服务不受影响。主要的检查项目如下。
检查项 | 检查详情 | 处理方案 |
---|---|---|
节点上是否运行 ingress-controller Pod | ingress 的重启或者迁移过程必定会带来客户端长连接请求断开,可能出现 502 请求。 | |
节点上是否存在强绑定节点的工作负载 | 1. 确认绑定节点的方式(label selector/ node name 等)。 2. 确认绑定节点原因(白名单、资源隔离等)。 | 调整强绑定节点的工作负载,将其迁移至别的节点后,再下线该节点。 |
节点上是否存在单副本的工作负载 | 确认使用单副本部署的原因(并发运行有冲突、节约资源等)。 | |
节点上是否存在 Static Pod | 1. 确认使用 Static Pod 方式部署的原因。 2. 确认是否需要迁移,能否并发运行。 | 评估后,根据评估结果决定。 |
集群剩余资源是否足够承担下线节点的工作负载 | 通过控制台、OpenAPI、Kubectl 获取节点详情,查看当前节点目前资源使用情况以及集群剩余资源量。 注意 如果被下线节点上存在请求(Request)高的服务时,可能出现集群资源总量足够却无法调度的情况,即大量的资源碎片。 | 评估后,根据评估结果决定。 |
节点上部署的工作负载是否支持平滑迁移 | 服务的平滑迁移包含: 1. 被关闭的副本不再接受新请求并且能够正常处理掉所有已接收的请求后退出。 2. 新启动的服务需要在就绪后再开始接受请求。 | terminationGracePeriodSeconds 参数。 |
在通过所有前置检查后,可以开始下线节点。目前集群支持如下两种方法下线节点:
可参考 kubernetes 官方相关操作手册,安全地清空一个节点。