k8s-3 Pod status 状态详解


pod从创建到最后的创建成功会分别处于不同的阶段,在源码中用PodPhase来表示不同的阶段:

img

运行中(PodRunning):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。

等待中(PodPending): Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。

创建pod的请求已经被k8s接受,但是容器并没有启动成功,可能处在:写数据到etcd,调度,pull镜像,启动容器这四个阶段中的任何一个阶段,pending伴随的事件通常会有:ADDED, Modified这两个事件的产生。

正常终止(PodSucceeded):pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。

异常停止(PodEailed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。

未知状态(PodUnkonwn):出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。

img

api/core/v1

一个pod的完整创建,通常会伴随着各种事件的产生,k8s种事件的种类总共只有4种:

Added EventType = "ADDED"

Modified EventType = "MODIFIED"

Deleted EventType = "DELETED"

Error EventType = "ERROR"

PodStatus 有一组PodConditions。 PodCondition中的ConditionStatus,它代表了当前pod是否处于某一个阶段(PodScheduled,Ready,Initialized,Unschedulable),“true” 表示处于,“false”表示不处于。

PodCondition数组的每个元素都有一个类型字段和一个状态字段。

类型字段 PodConditionType 是一个字符串,可能的值是

PodScheduled:pod正处于调度中,刚开始调度的时候,hostip还没绑定上,持续调度之后,有合适的节点就会绑定hostip,然后更新etcd数据

Ready: pod 已经可以开始服务,譬如被加到负载均衡里面

Initialized:所有pod 中的初始化容器已经完成了

Unschedulable:限制不能被调度,譬如现在资源不足

状态字段 ConditionStatus 是一个字符串,可能的值为True,False和Unknown

------------------------------------------------------pod status--------------------------------------------------------------

CrashLoopBackOff:容器退出,kubelet正在将它重启

InvalidImageName:无法解析镜像名称

ImageInspectError:无法校验镜像

ErrImageNeverPull:策略禁止拉取镜像

ImagePullBackOff:镜像正在重试拉取

RegistryUnavailable:连接不到镜像中心

ErrImagePull:通用的拉取镜像出错

CreateContainerConfigError:不能创建kubelet使用的容器配置

CreateContainerError:创建容器失败

m.internalLifecycle.PreStartContainer:执行hook报错

RunContainerError:启动容器失败

PostStartHookError:执行hook报错

ContainersNotInitialized:容器没有初始化完毕

ContainersNotReady:容器没有准备完毕

ContainerCreating:容器创建中

PodInitializing:pod 初始化中

DockerDaemonNotReady:docker还没有完全启动

NetworkPluginNotReady:网络插件还没有完全启动


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM