1. 理解Pod的生命周期
在Kubernetes集群中,Pod是最小的可部署单元,理解它的生命周期对于集群管理和应用部署至关重要。一个Pod从创建到终止的完整生命周期包含多个阶段,每个阶段都有其特定的行为和触发条件。
1.1 Pod的创建过程
当kubectl apply -f pod.yaml命令执行后,API Server接收到创建请求,经过认证授权后,将Pod配置信息存入etcd。随后调度器(Scheduler)会根据Pod的资源需求和节点状态选择合适的节点,这个过程涉及以下关键步骤:
- 预选(Predicates):过滤掉不满足条件的节点(如资源不足、标签不匹配)
- 优选(Priorities):对符合条件的节点打分排序
- 绑定(Binding):将Pod与得分最高的节点绑定
注意:如果Pod配置了nodeSelector或affinity/anti-affinity规则,会影响调度结果。我曾遇到一个案例,由于忘记设置nodeSelector,导致Pod被调度到了错误的可用区。
1.2 Pod的运行阶段
Pod被调度到节点后,kubelet会负责创建并监控Pod的运行状态,主要经历以下阶段:
- Pending:已接受创建请求,但尚未完成调度或容器镜像下载
- Running:所有容器已创建,至少有一个容器在运行
- Succeeded:所有容器正常退出(退出码为0)
- Failed:至少有一个容器非正常退出(非0退出码)
- Unknown:无法获取Pod状态(通常由于节点通信问题)
在实际运维中,我们经常需要排查Pod卡在Pending状态的问题。常见原因包括:
- 资源不足(CPU/内存请求无法满足)
- 镜像拉取失败(私有仓库认证问题)
- 节点选择器不匹配
- 持久卷声明无法绑定
1.3 Pod的终止流程
当Pod需要被删除时(手动删除或控制器触发),会优雅地终止而不是立即杀死。这个终止流程对保证服务无损至关重要:
- API Server收到删除请求,将Pod标记为"Terminating"
- kubelet监控到状态变化,开始preStop钩子执行
- 向容器主进程发送SIGTERM信号
- 等待grace period(默认30秒,可配置)
- 如果容器未退
