一、前言:
- 本页面讲述 Pod 的生命周期。 Pod 遵循一个预定义的生命周期,起始于 Pending阶段,如果至少 其中有一个主要容器正常启动,则进入Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入Succeeded或者Failed阶段。
- Pod 在其生命周期中只会被调度一次。 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者 被终止。
- restartPolicy 适用于 Pod 中的所有容器。restartPolicy 仅针对同一节点上 kubelet 的容器重启动作。
二、Pod生命周期:

.
第一阶段:
- 
Pending: 
 正在创建Pod但是Pod中的容器还没有全部被创建完成,处于此状态的Pod应该检查Pod依赖的存储是否有权限挂载、镜像是否可以下载、调度是否正常等。
- 
Failed 
 Pod中有容器启动失败而导致pod工作异常。
- 
Unknown 
 由于某种原因无法获得pod的当前状态,通常是由于与pod所在的node节点通信错误。
- 
Succeeded 
 Pod中的所有容器都被成功终止即pod里所有的containers均已terminated。
第二阶段:
- 
Unschedulable: 
 Pod不能被调度,kube-scheduler没有匹配到合适的node节点
- 
PodScheduled 
 pod正处于调度中,在kube-scheduler刚开始调度的时候,还没有将pod分配到指定的pid,在筛选出合适的节点后就会更新etcd数据,将pod分配到指定的pod
- 
Initialized 
 所有pod中的初始化容器已经完成了
- 
ImagePullBackOff: 
 Pod所在的node节点下载镜像失败
- 
Running 
 Pod内部的容器已经被创建并且启动。
- 
Ready 
 表示pod中的容器已经可以提供访问服务
 .
 .
三、Pod重启策略:
Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。
- Always:在任何情况下,只要容器不在运行状态,就自动重启容器。
- OnFailure:当容器失败时(容器停止运行且退出码不为0),k8s自动重启该容器。
- Never:不论容器运行状态如何都不会重启该容器,Job或CronJob。
 在实际使用时,我们需要根据应用运行的特性,合理设置这三种恢复策略。
对于包含多个容器的 Pod,只有它里面所有的容器都进入异常状态后,Pod 才会进入 Failed 状态。在此之前,Pod 都是 Running 状态。此时,Pod 的 READY 字段会显示正常容器的个数,比如:
点击查看代码
$ kubectl get pod test-liveness-exec
NAME           READY     STATUS    RESTARTS   AGE
liveness-exec   0/1       Running   1          1m
如果一个 Pod 里只有一个容器,然后这个容器异常退出了。那么,只有当 restartPolicy=Never 时,这个 Pod 才会进入 Failed 状态。而其他情况下,由于 Kubernetes 都可以重启这个容器,所以 Pod 的状态保持Running 不变,RESTARTS信息统计了Pod的重启次数。需要注意的是:虽然是重启,但背后其实是Kubernetes用重新创建的容器替换了旧容器。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号