kubernetes-notes

1. Pod phase

Pod的phase是Pod生命周期中的简单宏观描述,定义在Pod的PodStatus对象的phase 字段中。

phase有以下几种值:

状态值 说明
挂起(Pending) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间。
运行中(Running) 该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
成功(Succeeded) Pod 中的所有容器都被成功终止,并且不会再重启。
失败(Failed) Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
未知(Unknown) 因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

2. Pod 状态

Pod 有一个 PodStatus 对象,其中包含一个 PodCondition 数组。 PodCondition包含以下以下字段:

其中type字段包含以下几个值:

3. 重启策略

Pod通过restartPolicy字段指定重启策略,重启策略类型为:Always、OnFailure 和 Never,默认为 Always。

restartPolicy 仅指通过同一节点上的 kubelet 重新启动容器。

重启策略 说明
Always 当容器失效时,由kubelet自动重启该容器
OnFailure 当容器终止运行且退出码不为0时,由kubelet自动重启该容器
Never 不论容器运行状态如何,kubelet都不会重启该容器

说明

可以管理Pod的控制器有Replication Controller,Job,DaemonSet,及kubelet(静态Pod)。

  1. RC和DaemonSet:必须设置为Always,需要保证该容器持续运行。
  2. Job:OnFailure或Never,确保容器执行完后不再重启。
  3. kubelet:在Pod失效的时候重启它,不论RestartPolicy设置为什么值,并且不会对Pod进行健康检查。

4. Pod的生命

Pod的生命周期一般通过Controler 的方式管理,每种Controller都会包含PodTemplate来指明Pod的相关属性,Controller可以自动对pod的异常状态进行重新调度和恢复,除非通过Controller的方式删除其管理的Pod,不然kubernetes始终运行用户预期状态的Pod。

控制器的分类

如果节点死亡或与集群的其余部分断开连接,则 Kubernetes 将应用一个策略将丢失节点上的所有 Pod 的 phase 设置为 Failed

5. Pod状态转换

常见的状态转换

Pod的容器数 Pod当前状态 发生的事件 Pod结果状态    
      RestartPolicy=Always RestartPolicy=OnFailure RestartPolicy=Never
包含一个容器 Running 容器成功退出 Running Succeeded Succeeded
包含一个容器 Running 容器失败退出 Running Running Failure
包含两个容器 Running 1个容器失败退出 Running Running Running
包含两个容器 Running 容器被OOM杀掉 Running Running Failure

5.1. 容器运行时内存超出限制

5.2. 磁盘故障

5.3. 运行节点挂掉

参考文章: