2-Pod生命周期和重启策略
1、Kubernetes 中创建 Pod 的完整流程
- 用户使用kubectl apply 命令提交创建请求
- 请求首先到达API Server,进行认证(Authentication)和授权(Authorization)检查,通过准入控制(Admission Control)进行验证和修改(如设置默认值)。通过验证后,API Server 将 Pod 配置信息写入etcd存储,此时 Pod 状态为 "Pending"
- 调度器(Scheduler)监视 API Server 获取未调度的Pod,(spec.nodeName 为空)调度器根据一些策略完成pod的调度,之后调度器将节点信息绑定到 Pod (更新 Pod 的 spec.nodeName),以下是调度时需要考虑的因素:
- 资源请求和限制(cpu/memory)
- 节点选择器(nodeSelector)和节点亲和性(affinity)
- 污点(taints)和容忍(tolerations)
- Kubelet 接管 Pod,目标节点上的 Kubelet 通过 API Server 监测到有新的 Pod 被调度到本节点,Kubelet 开始创建 Pod 所需的环境:
- 创建 Pod 沙盒环境(通常通过 CRI 接口调用容器运行时)
- 挂载卷(通过 CSI 接口)
- 拉取容器镜像(通过镜像服务)
- 容器运行时(如 containerd、Docker)根据 Kubelet 的指令创建并启动容器。如果本地没有镜像,还回去拉取镜像
- Pod 状态更新,Kubelet 持续监控 Pod 状态并上报给 API Server,Pod 状态从 Pending → ContainerCreating → Running,最后将状态信息写入 etcd
- CNI 网络插件为 Pod 配置网络,包括分配 IP 地址、设置网络接口、配置路由规则。至此pod启动完成
2、Pod常见状态
生命周期状态
- Pending:这个状态表明API Server已经创建了该Pod,但Pod内还有容器没有创建(pod调度或镜像拉取中都有可能是pending状态)
- Running:所有主容器成功启动,且通过了就绪检查(readiness probe)
- Succeeded:Pod内所有容器均成功执行退出,且不会再重启
- Failed:Pod内至少有一个容器退出为失败状态
- Unknown:由于某种原因无法获取该Pod的状态
微观健康条件
- PodScheduled:Pod 是否已成功分配到某个节点3。
- PodReadyToStartContainers:Pod 的沙箱(Sandbox)是否已创建且网络配置就绪。
- Initialized:所有的初始化容器(Init Containers)是否都已成功完成。
- ContainersReady:Pod 内的所有容器是否都已准备就绪。
- Ready:Pod 是否准备好接收外部流量(会被加入 Service 的负载均衡池)
细分阶段(kubectl get pod 显示)
kubectl get pods 的 STATUS 列显示的是一个综合状态,
- ContainerCreating:容器正在创建中(拉取镜像、挂载卷、配置网络等)
- Init:N/M:Pod 有 M 个 Init 容器,当前正在运行第 N 个。
- PodInitializing:Init 容器已完成,主容器正在启动中。
- CrashLoopBackOff:容器反复崩溃并重启,kubelet 正在以退避(BackOff)策略等待下一次重启。
- ImagePullBackOff / ErrImagePull:镜像拉取失败,kubelet 正在退避重试。
- OOMKilled:容器因内存使用超过了设定的 limits,被操作系统的 OOM Killer 杀掉。
- CreateContainerConfigError:容器配置出错,通常是引用的 ConfigMap 或 Secret 不存在。
- InvalidImageName:镜像名称格式非法。
- Evicted:由于节点资源(如磁盘、内存)不足,Pod 被节点驱逐。
- Terminating:Pod 正在被删除,处于优雅终止过程中(等待 preStop 钩子执行或超时)。
- Completed:与 Succeeded 类似,表示容器正常退出,通常见于 Job 场景。
3、Pod 处于 Pending 状态的原因
- 资源不足
- 节点 CPU / 内存不足
- Pod 请求资源超过节点可用资源
- 调度限制
- nodeSelector 不匹配
- affinity 不满足
- 存在 taint,但无对应 toleration
- 存储问题
- PVC 未绑定(无可用 PV)
- StorageClass 配置错误或不存在
- 镜像拉取失败
- 镜像仓库不可达或过慢
- 配额限制
- ResourceQuota 已用尽
- Pod 数量达到上限
Pending 排查方法
kubectl describe pod <pod> -n <ns> # 查看 Events(最关键)
kubectl describe node <node> # 检查资源情况
kubectl get resourcequota -n <ns> # 检查配额
kubectl get pvc -n <ns> # 检查存储
kubectl get events -n <ns> # 查看集群事件
4、Pod 重启策略
- 重启策略由 kubelet 执行,只作用于 Pod 内的容器
- Always # 默认,容器退出就重启
- OnFailure # 仅失败(非0退出码)才重启
- Never # 不重启
5、控制器与重启策略限制
- Deployment / ReplicaSet / DaemonSet:必须 Always
- Job / CronJob:OnFailure 或 Never
- 说明:
- 控制器负责 Pod 重建
- kubelet 负责容器重启
- kubelet 本身不做健康检查(健康检查由 Probe 机制实现)

浙公网安备 33010602011771号