Pod 优雅删除

最近更新时间:2024-12-26 10:26:32

我的收藏

操作背景

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

应用场景

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

操作步骤

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

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

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

Service 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 优雅删除
Ingress YAML 配置示例如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: anyserver
annotations:
ingress.cloud.tencent.com/direct-access: "true"
ingress.cloud.tencent.com/enable-grace-deletion: "true"