Kubernetes 优雅终止 pod

简介: Kubernetes 优雅终止 pod

当你执行 kubectl delete pod 时,pod 被删除, endpoint 控制器从 service 和 etcd 中删除该 pod 的 IP 地址和端口。

你可以使用 kubectl describe service 观察到这一点。

使用 kubectl describe 列出 endpoint

但远不止如此!

多个组件都会同步变更至本地 endpoint 列表:

  • kube-proxy 通过本地 endpoint 列表来编写 iptables 规则
  • CoreDNS 使用 endpoint 重新配置 DNS

Ingress 控制器、Istio 等也是如此。

Kubernetes 中的 endpoint 传播

所有这些组件都将(最终)删除以前的 endpoint,这样就再也没有流量可以到达它了。

同时,kubelet 也收到了变化的通知,并删除了 pod。

当 kubelet 在其余组件之前删除 pod 时会发生什么?

不幸的是,你会遇到停机, 因为 kube-proxy、CoreDNS、ingress 控制器等组件仍在使用该 IP 地址来路由流量。

所以,你可以做什么?

等待!

kubelet 还没有传播 endpoint 便立即删除 pod

如果在删除 Pod 之前等待足够长的时间,飞行中的流量仍然可以解析,并且可以将新流量分配给其他 Pod。

你应该如何等待?

kubelet 应该在删除 pod 之前等待 endpoint 传播

当 kubelet 删除一个 pod 时,它会经历以下步骤:

  • 触发 preStop 钩子(如果有)。
  • 发送 SIGTERM
  • 发送 SIGKILL 信号(默认 30 秒后)。

kubelet 删除 pod 经历了 3 个步骤:preStop hook、SIGTERM 和 SIGKILL

你可以使用preStop挂钩来插入人工延迟。

你可以使用 preStop 挂钩来延迟删除 pod

你可以在你的应用程序中监听 SIGTERM 信号并等待。

此外,你可以优雅地停止该过程并在等待完成后退出。

Kubernetes 给你 30 秒的时间来这样做(时长可配置)。

你可以在你的应用程序中捕获 SIGTERM 信号并等待

你应该等待 10 秒、20 秒还是 30 秒?

没有单一的答案。

虽然传播 endpoint 可能只需要几秒钟,但 Kubernetes 不保证任何时间,也不保证所有组件将同时完成。

Kubernetes 中的 endpoint 传播时间线

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
27 1
|
5天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十六)——Pod容器探测
Kubernetes详解(十六)——Pod容器探测
14 0
|
9天前
|
Kubernetes API 调度
Kubernetes详解(十五)——Pod对象创建过程
Kubernetes详解(十五)——Pod对象创建过程
23 4
|
4天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十八)——Pod就绪性探针实战
Kubernetes详解(十八)——Pod就绪性探针实战
28 5
|
4天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes详解(十七)——Pod存活性探针应用实战
Kubernetes详解(十七)——Pod存活性探针应用实战
16 4
|
5天前
|
运维 Kubernetes 网络协议
Kubernetes详解(十八)——Pod就绪性探针实战
Kubernetes详解(十八)——Pod就绪性探针实战
24 3
|
5天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes详解(十七)——Pod存活性探针应用实战
Kubernetes详解(十七)——Pod存活性探针应用实战
17 3
|
6天前
|
Kubernetes API 调度
Kubernetes详解(十五)——Pod对象创建过程
Kubernetes详解(十五)——Pod对象创建过程
24 5
|
6天前
|
Kubernetes API 调度
Kubernetes详解(十四)——Pod对象生命周期
Kubernetes详解(十四)——Pod对象生命周期
16 2
|
6天前
|
Kubernetes Linux 调度
Kubernetes详解(十三)——Pod详解
Kubernetes详解(十三)——Pod详解
20 2