容器服务
检查项 | 检查详情 | 处理方案 |
节点上是否运行 ingress-controller Pod | ingress 的重启或者迁移过程必定会带来客户端长连接请求断开,可能出现 502 请求。 | 如果断开业务不可避免,请在业务低峰期进行操作。 如果 ingress 使用 LoadBalancer/NodePort Service 对外服务,请保证在下线节点以外,其他节点上还有 ingress 副本。 如果 ingress 使用 Hostnetwork 对外服务,请先在调用端(外部负载均衡/外部网关等)删除对应的 IP 地址。 |
节点上是否存在强绑定节点的工作负载 | 1. 确认绑定节点的方式(label selector/ node name 等)。 2. 确认绑定节点原因(白名单、资源隔离等)。 | 调整强绑定节点的工作负载,将其迁移至别的节点后,再下线该节点。 |
节点上是否存在单副本的工作负载 | 确认使用单副本部署的原因(并发运行有冲突、节约资源等)。 | 如果可以扩容,先进行服务扩容,保证其他节点上存在该服务可用副本后,再下线节点。 如果不能扩容,评估是否可以接受节点下线导致的业务损失。 |
节点上是否存在 Static Pod | 1. 确认使用 Static Pod 方式部署的原因。 2. 确认是否需要迁移,能否并发运行。 | 评估后,根据评估结果决定。 |
集群剩余资源是否足够承担下线节点的工作负载 | 通过控制台、OpenAPI、Kubectl 获取节点详情,查看当前节点目前资源使用情况以及集群剩余资源量。 注意 如果被下线节点上存在请求(Request)高的服务时,可能出现集群资源总量足够却无法调度的情况,即大量的资源碎片。 | 评估后,根据评估结果决定。 |
节点上部署的工作负载是否支持平滑迁移 | 服务的平滑迁移包含: 1. 被关闭的副本不再接受新请求并且能够正常处理掉所有已接收的请求后退出。 2. 新启动的服务需要在就绪后再开始接受请求。 | 如果服务是通过 Service 对外暴露的,被关闭的副本不会再接受新请求。如果服务是对外直接暴露端点,即端到端访问(例如有额外的服务注册发现中心),需要服务在接收到退出信号时能主动将自身从列表中摘除。 保证正常处理掉所有已接收请求,需要程序能够接收并拦截退出信号 SIGTERM(默认退出信号,可以在 Dockerfile 中自行指定),接收到信号后需要保证请求处理完毕后自行退出。服务需要自行评估需要多少时间能够处理完毕所有请求,并合理设置 Pod 的terminationGracePeriodSeconds参数。 保证新服务在就绪前不接受请求。如果服务是通过 Service 对外暴露,则通过合理的配置程序的就绪检查即可。如果服务是对外直接暴露端点(例如有额外的服务注册发现中心),需要服务能够在就绪后再向注册中心注册自己。 |