Node 优雅下线

最近更新时间:2024-12-17 16:21:22

我的收藏

简介

在接入层非直连 Pod 的场景中,Node 作为实际的中间转发者,将流量转发到 Pod。如果直接删除 Node,在大规模场景下(例如多个 Service 共享一个 CLB,且下线的 Node 数量较多),Node 的删除速度可能会快于 CLB 解绑后端服务(RS)的速度。在这种情况下,Node 上的转发组件已经被移除,但 Node 仍然作为后端服务绑定在 CLB 上。此时,CLB 会将流量转发给这些已经失去转发能力的 Node。特别是在长连接场景下,例如会议业务或 RPC 长连接等,这一过程可能会持续到长连接超时为止。

应用场景

节点下线时,Node 优雅退出,使长连接在 Node 被销毁前解绑并收到 RST,及时重新建立连接。
当节点下线时,保证节点下线动作在所有的 CLB 解绑该 Node 之后。
注意:
仅针对 “非直连场景” 生效。
在 TKE 层的 Node 被删除前,不能在云服务器控制台删除实际对应的机器。
该功能目前存在不支持的场景,详情请参见 生效范围
长连接业务,需要能够感知 RST(Connection Reset),及时重新建立连接。
开启该功能后,接入层组件会为所有作为 CLB 后端的 Node 打上保护性 Finalizer,这一过程需要 10 分钟时间,在这段时间内不要操作缩容。

支持版本

节点优雅下线接入层需要的最低版本:
service-controller(针对 Service 场景):v2.4.2
ingress-controller(针对 Ingress 场景):v2.4.2
说明:
您可以分别通过查看 kube-system 下名为 tke-service-controller-config 和 tke-ingress-controller-config 的 ConfigMap 中的 VERSION 字段的值来确认 service-controller 和 ingress-controller 版本。

操作步骤

方式1:通过控制台

1. 登录 容器服务控制台,选择左侧导航栏中的集群
2. 在集群管理页面,单击集群 ID,进入集群基本信息页。
3. 选择配置管理,在 ConfigMap 中,找到 kube-system 命名空间下的名称为 tke-service-controller-config 的 ConfigMap 资源。



4. 单击更新配置,找到 EnableNodeGracefulDeletion 开关变量,把EnableNodeGracefulDeletion对应的变量值置为 true。




方式2:通过命令行

1. 查看 kube-system 命名空间下的 tke-service-controller-config ConfigMap 资源:
kubectl -n kube-system get configmap tke-service-controller-config -o yaml



2. 修改 tke-service-controller-config 这个 ConfigMap,将 EnableNodeGraceDeletion 置为 true:
kubectl -n kube-system edit configmap tke-service-controller-config



生效范围

节点类型
操作方式
是否支持
普通节点池
直接删除节点池
No
单击调整数量
No
选中一批节点,单击移出
Yes
自动扩缩容
Yes
普通节点
单击移出
Yes
原生节点池
所有操作
No
说明:
超级节点不存在“非直连”模式,不需要支持该能力。