1、常见的pod状态
pending、running、succeeded、failed
第一阶段:
挂起(pending):
挂起(Pending):
正在创建Pod但是Pod中的容器还没有全部被创建完成,处于此状态的Pod应该检查Pod依赖的存储是否有权限挂载、 镜像是否可以下载、调度是否正常等
我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件,已经创建了pod但是没有适 合它运行的节点叫做挂起,调度没有完成。
失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退 出或者被系统终止。
未知(Unknown):未知状态,所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的, 如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown,通常是由于 与pod所在的node节点通信错误。
Error 状态:Pod 启动过程中发生了错误
成功(Succeeded):Pod中的所有容器都被成功终止,即pod里所有的containers均已terminated。
第二阶段:
Unschedulable:Pod不能被调度, scheduler没有匹配到合适的node节点
PodScheduled:pod正处于调度中,在scheduler刚开始调度的时候,还没有将pod分配到指定的node,在筛选出合适的 节点后就会更新etcd数据,将pod分配到指定的node
Initialized:所有pod中的初始化容器已经完成了
ImagePullBackOff:Pod所在的node节点下载镜像失败
Running:Pod内部的容器已经被创建并且启动。
扩展:还有其他状态,如下:
Evicted状态:出现这种情况,多见于系统内存或硬盘资源不足,可df-h查看docker存储所在目录的资源使用情 况如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。
CrashLoopBackOff:容器曾经启动了,但可能又异常退出了
2、pod重启策略
Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,当某个容器异常退出或者健康检查失败时,kubelet将根据 重启策略来进行相应的操作。
Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。
Always:只要容器异常退出,kubelet就会自动重启该容器。(这个是默认的重启策略)
OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
Never:不论容器运行状态如何,kubelet都不会重启该容器。
2.1、测试Always重启策略
进入pod内,停掉容器,发现容器会自动重启,从pod的重启次数可以看出来
vi pod-always.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-alwaysnamespace: defaultlabels:app: nginx
spec:restartPolicy: Alwayscontainers:- name: pod-alwaysimage: 172.16.80.140/nginx/nginx:1.26imagePullPolicy: IfNotPresent
2.2、测试never重启策略
2.2.1、正常停止容器里的tomcat服务,pod正常运行,容器没有重启
2.2.2、非正常停止容器里的tomcat服务,容器状态是error
2.3、测试OnFailure重启策略
vi pod-onfailure.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-onfailurenamespace: defaultlabels:app: tomcat
spec:restartPolicy: OnFailurecontainers:- name: pod-onfailureimage: 172.16.80.140/tomcat/tomcat:v1imagePullPolicy: IfNotPresent
2.3.1、正常停止容器里的tomcat服务,pod正常,容器没有重启
2.3.2、非正常停止容器里的tomcat服务,pod正常,容器重启