【Kubernetes专项】Pod 生命周期及容器钩子
Pod生命周期详解:从创建到终止的关键流程 摘要: Pod生命周期包含创建、运行到终止的全过程。核心阶段包括:Pause容器初始化网络/IPC空间、Init容器顺序执行准备任务、主容器启动(触发postStart钩子)、运行状态监控(通过Startup/Liveness/Readiness探针)以及终止前执行preStop钩子。Pod终止流程采用优雅退出机制,包含30秒宽限期用于流量摘除、preS
八、Pod生命周期、容器钩子
8.1 Pod 生命周期
pod从开始创建到终止退出的时间范围称为Pod生命周期。
8.1.1 生命周期中的重要流程
- 创建主容器(containers)是必须的操作
- 初始化容器(initContainers)
- 容器启动后钩子,启动探测、存活性探测,就绪性探测,容器停止前钩子。

| 状态 | 触发条件 | 典型场景 | 处理建议 |
|---|---|---|---|
| Pending | Pod 已创建但未调度到节点,或正在拉取镜像 | 资源不足、镜像下载中、调度延迟 | 检查节点资源/污点、镜像仓库状态、调度器日志 |
| Running | Pod 已绑定节点,所有容器创建完成,至少一个容器在运行/重启中 | 服务正常运行、容器崩溃重启中 | 结合就绪探针判断业务可用性;检查 CrashLoopBackOff |
| Succeeded | 所有容器成功终止(退出码 0),且不会重启 | Job/CronJob 任务完成 | 无需干预,由 Job 控制器管理 |
| Failed | 所有容器已终止,且至少一个容器失败(非 0 退出码或被系统终止) | 应用崩溃、资源超限、启动命令错误 | 检查容器日志:kubectl logs <pod> --previous |
| Unknown | API Server 无法从节点获取状态(通信中断) | 节点宕机、网络分区、kubelet 崩溃 | 检查节点状态:kubectl get node <node>;修复节点或等待自动重建 |
8.1.2 生命周期中的重要行为
- Pause容器
- Init容器
- 生命周期钩子(容器级)
- 容器探针
8.1.2.1 行为1:Pause容器
Pod创建时,首先启动,初始化共享命名空间(网络/IPC)等,为其他容器提供基础环境。
8.1.2.2 行为2:Init容器
一个Pod可以拥有任意数量的init容器,init容器是按照顺序以此执行的,并且当最后一个init容器执行完毕之后才会启动主容器
8.1.2.3 行为3:生命周期钩子(容器级)
pod允许定义两种类型的生命周期钩子,启动后钩子(postStart)和停止前钩子(preStop);钩子只作用于单个容器。
8.1.2.4 行为4:容器探针
对于pod健康状态诊断,分为3种:
- **StartupProbe(启动探针):**探测容器是否正常运行,验证应用是否完成启动(验证通过后才激活 Liveness/Readiness 探测)
- **LivenessProbe(存活探针):**判断容器是否处于running状态,根据重启策略决定是否重启容器
- **Readiness(就绪探针):**检测服务就绪状态,失败时从Service流量中摘除
- 探测方式:
EXe:执行命令(返回0即为成功)TCP:检测端口连通性HTTP:检测指定路径的HTTP状态码
# 核心逻辑:
- Pause奠基
→ Init容器顺序准备
→ 主容器启动(触发postStart)
→ 探针持续监控
→ 终止前执行preStop。
探针中Startup优先级最高,Readiness控制流量准入。
8.1.3 Pod资源的终止过程
-
1)**触发删除:**用户通过
kubectl delete命令发起删除请求; -
2)**标记状态:**Pod状态立即转换为
Terminating,并启动宽限期(默认30s),Pod视为“dead”状态; -
3)服务解耦:
Endpoints控制器同步将Pod从Service的Endpoints列表中移除,并停止流量转发; -
4)执行钩子:
- 若设置
preStop钩子,则立即同步执行; - 若宽限期结束时,钩子还未完成,则额外获得2s的延长
- 若设置
-
5)**发送信号:**容器内主进程收到
SIGTERM信号,开始优雅关闭。 -
6)**强制终止:**宽限期结束后,残留进程强制接收
SIGKILL。 -
7)**资源清理:**Kubelet将Pod宽限期置零,通知API Server完成最终删除。
# 核心逻辑:优雅终止优先
#(宽限期内处理流量摘除、钩子执行、进程退出),超时则强制清理。
# 宽限期是协调各步骤的核心机制。
8.2 容器钩子
初始化容器启动之后,开始启动主容器,在主容器启动之后有一个post start hook(容器启动后钩子)和pre stop hook(容器结束前钩子),无论启动后还是结束前所做的事我们可以把它放两个钩子,这个钩子就表示用户可以用它来钩住一些命令,非必须选项
- **postStart:**容器创建之后立即执行,用于资源部署,环境准备等。
- **preStop:**在容器被终止前执行,用于优雅关闭应用程序,通知其他系统等。
演示postStart和preStop用法
......
containers:
- image: sample:v2
name: war
lifecycle:
postStart:
exec:
command:
- “cp”
- “/sample.war”
- “/app”
prestop:
httpGet:
host: monitor.com
path: /waring
port: 8080
scheme: HTTP
......
以上示例中,定义了一个Pod,包含一个JAVA的web应用容器,其中设置了PostStart和PreStop回调函数。即在容器创建成功后,复制/sample.war到/app文件夹中。而在容器终止之前,发送HTTP请求到http://monitor.com:8080/waring,即向监控系统发送警告。
]# kubectl explain pods.spec.containers.lifecycle.postStart
]# kubectl explain pods.spec.containers.lifecycle.preStop
优雅的删除资源对象
当用户请求删除含有pod的资源对象时(如RC、deployment等),K8S为了让应用程序优雅关闭(即让应用程序完成正在处理的请求后,再关闭软件),K8S提供两种信息通知:
1)、默认:K8S通知node执行docker stop命令,docker会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认超时时间(30s),会继续发送SIGKILL的系统信号强行kill掉进程。
2)、使用pod生命周期(利用PreStop回调函数),它执行在发送终止信号之前。
默认情况下,所有的删除操作的优雅退出时间都在30秒以内。kubectl delete命令支持–grace-period=的选项,以运行用户来修改默认值。0表示删除立即执行,并且立即从API中删除pod。在节点上,被设置了立即结束的的pod,仍然会给一个很短的优雅退出时间段,才会开始被强制杀死。如下:
# 案例演示:
[root@k8s-master1 pod]# vim poststart-prestop-demo.yaml
apiversion: v1
kind: Pod
metadata:
name: demo-hook
spec:
containers:
- name: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh","-c","echo 'lifecycle hook' > /usr/share/nginx/html/test.html"]
preStop:
exec:
command: ["/bin/sh","-c","nginx -s stop"]
[root@k8s-master1 pod]# kubectl apply -f poststart-prestop-demo.yaml
[root@k8s-master1 pod]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-hook 1/1 Running 0 5s
# 进入pod里面的指定容器nginx并查看是否postStart生效
[root@k8s-master1 pod]# kubectl exec -it demo-hook -c nginx -- /bin/bash
root@demo-hook:/# cat /usr/share/nginx/html/test.html
lifecycle hook # 确实生效!
root@demo-hook:/# exit
[root@k8s-master1 pod]#
[root@k8s-master1 pod]# kubectl delete pods demo-hook
# 另外打开终端去观察
[root@k8s-master1 pod]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
demo-hook 1/1 Running 0 3m21s
demo-hook 1/1 Terminating 0 3m41s
demo-hook 0/1 Completed 0 3m42s
pod "demo-hook" deleted
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)