Pod 优雅删除

最近更新时间:2024-10-17 18:10:52

我的收藏

操作背景

在 CLB 直连场景下,当用户发起工作负载滚动更新时,会同时触发两个并行的工作流:
1. Service 控制器调整 CLB 后端 Pod 的权重为 0,并在后续摘除该 Pod。
2. 运行时(kubelet)终止并删除 Pod。
在某些极端场景,比如有多个 Service 复用同一个 CLB,或者一个 Service 下有非常多的 Pod,可能出现某些 Pod 已经被运行时删除了,但 Service 控制器还没有完成 CLB 上该 Pod 的权重调整,进而导致流量还会发往不存在的 Pod IP,导致业务异常。

应用场景

TKE Service 的优雅删除特性,会将上述两个并行的工作流,协调为串行,也就是先让 Service 控制器完成 CLB 后端 Pod 权重调整为 0,再让运行时(kubelet)删除该 Pod。
注意:
1. 仅适用于 直连场景
2. 对节点 kubelet 版本有要求,具体版本请参见 TKE Kubernetes Revision 版本历史,确保集群节点版本支持 kubelet 支持 pod 删除保护功能。
3. 目前只支持 Service,暂不支持 ingress。该功能对 TKE Service 组件版本有要求,如需使用请 提交工单 咨询,检查集群是否支持该功能。

操作步骤

步骤1:确保集群节点版本和 Service 组件版本支持该功能

1. kubelet 版本:参考 TKE Kubernetes Revision 版本历史,确保集群节点版本支持 kubelet 的 Pod 删除保护功能。
2. Service 组件版本:请 提交工单 咨询确认版本。
3. 如果是超级节点,请 提交工单 咨询确认。

步骤2:使用注解对指定的 Service 开启 Pod 优雅删除

YAML 配置示例如下:
apiVersion: v1
kind: Service
metadata:
name: anyserver
annotations:
service.cloud.tencent.com/direct-access: "true"
service.cloud.tencent.com/enable-grace-deletion: "true" # 表示开启 Pod 优雅删除