Pod在整个生命周期中被系统标示为各种状态,熟悉Pod的各种状态对于理解Pod的调度策略、重启策略很有必要。
一、Pod生命周期
Pod的所处阶段信息保存在PodStatus.Phase,Phase有如下几种值:
Pod的生命周期示意图如下:
大家可以看到,Phase记录的是Pod在其生命周期中的简单宏观概述。该阶段并不是对容器或Pod的综合汇总,也不是为了作为综合状态机,我们举个例子理解一下:
$ sudo kubectl create -f webapp_pod.yaml
pod/webapp created
$ sudokubectl get pod
NAME READY STATUS RESTARTS AGE
webapp 0/2 ContainerCreating 03s
$ sudo kubectl get pod webapp -o jsonpath="{.status.phase}"Pending
我们可以看到当创建Pod时,我们通过get pod能看到Pod状态为ContainerCreating,通过phase看到Pod所处的阶段是Pending,所以Phase描述Pod更为宏观的状态。
二、Pod重启策略
Pod的重启策略应用与Pod内所有容器,并且仅在Pod所处的Node上由kubelet进行判断和操作,当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy进行对应操作。
Pod重启策略如下:
Pod重启策略与控制方式息息相关,可管理Pod的控制器有:RC、Job、DaemonSet、kubelet(静态Pod)等,每种控制器对Pod的重启策略要求如下:
结合Pod的生命周期和重启策略,我们可得出下表中Pod状态切换过程:
| Pod容器数 | Pod当前阶段 | 发生事件 | Pod不同重启策略下的结果状态 |
| Always | OnFailure | Never |
| 1个容器 | Running | 容器正常退出 | Running | Successed | Successed |
| 1个容器 | Running | 容器退出失败 | Running | Running | Failed |
| 2个容器 | Running | 1个容器退出失败 | Running | Running | Running |
| 2个容器 | Running | 容器被OOM杀掉 | Running | Running | Failed |
三、Pod健康检查
Kubernetes对Pod的健康检查可通过三类探针来完成:
以上探针均可配置以下三种实现方式:
每次探测都将获得以下三种结果之一:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/alalazy/p/15841686.html
内容来源于网络,如有侵权,请联系作者删除!