K8S中Pod的四个阶段及状态分析

· · 2725 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Kubernetes 中, pod 从创建到成功运行会分别处于不同的阶段,每个阶段又分为不同的状态,本文将简单介绍这个环节。

在 K8S 源码中,使用了 PodPhase 这个变量定义这几个阶段信息,如下图所示:

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

一个 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 表示不处于。

Pod 的详细状态有这些,

  • 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: 网络插件还没有完全启动

关注本站微信公众号(和以上内容无关)InfraPub ,扫码关注:InfraPub

2725 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传