pod从创建到最后的创建成功会分别处于不同的阶段,在源码中用PodPhase来表示不同的阶段:
运行中(PodRunning):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
等待中(PodPending): Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
创建pod的请求已经被k8s接受,但是容器并没有启动成功,可能处在:写数据到etcd,调度,pull镜像,启动容器这四个阶段中的任何一个阶段,pending伴随的事件通常会有:ADDED, Modified这两个事件的产生。
正常终止(PodSucceeded):pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。
异常停止(PodEailed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
未知状态(PodUnkonwn):出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。
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:网络插件还没有完全启动