Pod的阶段:Pod phase

相关字段: .status.phase
phase表示一个Pod处于其生命周期的哪个阶段,一共有以下5个可能的取值:

  • Pending:Pod已经被k8s系统接受,但Pod中还有容器没有被创建。Pod被调度前和下载容器镜像的时候都处于这个阶段
  • Running:Pod已经被调度到Node上,所有的容器都已经被创建,并且至少有一个容器还在运行中(正在启动或重启中的容器也算)
  • Succeeded:Pod中的所有容器都成功停止,并且不会再次重启
  • Failed:Pod中的所有容器都已经停止,并且至少有一个容器是以失败停止的(以非0状态退出或被系统强制停止)
  • Unknown:由于某种原因无法获得Pod的状态,一般是和Pod所在的Host出现通信问题导致

Pod phase的查看方式:

kubectl get pods pi2-ll9dn -o yaml |grep 'phase'
phase: Succeeded

注意,使用以下命令看到的STATUS并不是Pod的phase:

kubectl get pod pi2-ll9dn
NAME        READY   STATUS      RESTARTS   AGE
pi2-ll9dn   0/1     Completed   0          4h50m

Pod并没有Completed这个phase。

容器的状态:Container states

相关字段:.status.containerStatuses[index].state(containerStatuses是一个数组,每个数组元素对应Pod中的一个容器)
我们知道,一个Pod中是包含有多个容器的,所以Pod的状态或者说阶段并不能直接反映Pod中容器的状态。当一个Pod被调度到Node上时,kubelet就会开始使用容器运行时(如Docker)创建容器,容器的状态可以通过命令kubectl describe pod [POD_NAME]查看,一共以下3种状态: