在K8S中,Pod优雅终止过程是什么?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在K8S中,Pod优雅终止过程是什么?

在Kubernetes (K8s) 中,Pod的优雅终止过程是一个有序的过程,旨在确保Pod中运行的应用程序能够平滑关闭,释放资源,并尽可能减少因突然关闭带来的数据丢失和服务中断。以下是Pod优雅终止的一般步骤:

  1. 删除Pod请求
  • 用户或控制器发出删除Pod的请求,比如通过 kubectl delete pod <pod-name> 或者由于Deployment的滚动更新策略等。
  1. Pod状态更改为Terminating
  • Kubernetes控制平面接收到请求后,将Pod的状态更新为“Terminating”。
  1. kube-proxy更新
  • kube-proxy会立即从Service的负载均衡列表中移除该Pod,停止新的网络流量被路由到该Pod。
  1. 执行PreStop Hook
  • 如果Pod的定义中包含了.spec.containers[].lifecycle.preStop钩子,kubelet将在发送SIGTERM信号之前执行这些自定义操作,例如清理缓存、写入最终状态或通知外部服务。
  1. 发送SIGTERM信号
  • kubelet向Pod中的每个容器发送SIGTERM信号,这标志着容器应该开始执行其自身的优雅停机流程。
  1. 等待容器关闭
  • 容器在接收到SIGTERM信号后应尽快结束处理正在进行的请求,并在完成必要的清理工作后自行退出。
  1. Grace Period(优雅终止期)
  • Kubernetes会给Pod一个默认的 grace period(默认为30秒,可在Pod的.spec.terminationGracePeriodSeconds中自定义),在此期间等待容器自己关闭。
  1. 强制停止
  • 如果容器在grace period结束后仍未退出,kubelet将向其发送SIGKILL信号强制终止容器,以确保Pod能够及时释放资源。
  1. 清理Pod资源
  • 所有容器终止后,kubelet会清理与Pod关联的一切资源,如临时存储卷、环境变量、网络端点等。
  1. Pod完全删除
  • 当Pod的所有资源都被成功清理,kubelet会将Pod从集群中删除,Pod的生命周期至此结束。

综上所述,整个过程中,应用程序应当监听SIGTERM信号,并在接收到该信号时开始优雅地关闭服务。这一系列动作确保了Pod不仅能够快速响应集群管理的需求,还能尽量避免由此造成的用户体验下降或数据完整性损失。需要注意的是,如果在等待容器进程停止的过程中,kubelet或容器管理器发生了重启,那么终止操作会重新获得一个满额的删除宽限期并重新执行删除操作。优雅终止过程确保了Pod中的容器在被删除前能够完成必要的清理工作,从而避免了数据丢失和资源泄漏。这对于长期运行的容器和需要保持数据一致性的应用来说尤为重要。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
JSON Kubernetes Shell
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
|
2月前
|
Kubernetes Shell Perl
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
【Azure K8S|AKS】进入AKS的POD中查看文件,例如PVC Volume Mounts使用情况
|
13天前
|
Kubernetes API 调度
k8s中节点无法启动Pod
【10月更文挑战第3天】
48 6
|
19天前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
13天前
|
存储 Kubernetes Perl
K8S中Pod启动异常
【10月更文挑战第3天】
28 2
|
15天前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
19天前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
|
19天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
|
29天前
|
Kubernetes Docker Python
dockercompose与k8s的pod文件的爱恨情仇
dockercompose与k8s的pod文件的爱恨情仇
|
15天前
|
JSON Kubernetes API
在K8S中,什么是静态Pod?
在K8S中,什么是静态Pod?