kubectl describe pod myapp # 输出中包含Pod中每个容器的状态
Pod的生命周期
Pod的阶段
- phase的值 | 取值 | 描述 | | —- | —- | | Pending(悬决) | pod已被kubernetes系统接受,但有一个或多个容器尚未创建运行,之阶段包括等待Pod被调度的时间通过网络下载镜像的时间。 | | Running(运行中) | Pod已经绑定到了某个节点,pod中所有的容器都已被创建,至少有一个容器任在运行,或者正处于启动或重启状态。 | | Succeeded(成功) | Pod中的所有容器都已经成功终止,并且不会再重启。 | | Failed(失败) | Pod中的所有容器都已经终止,并且至少有一个容器是因为失败终止,容器以非0状态退出或者被系统终止。 | | Unknown(未知) | 因为某些原因无法获得pod的状态,(通常是因为与Pod所在主机通信失败) |
Pod 容器三种状态
- Waiting 等待
不是 running和terminated状态之一,处于waiting状态时,可能 从某个容器镜像创库拉取容器镜像,或者向容器应用Secret数据等。
kubectl 中 Reason 字段查看原因。
- Running 运行中
表明容器正在执行运行状态且没有问题发生。
- Terminated 已终止
Pod 状况
PodStatus=?
- PodScheduled: Pod已经被调度到某节点;
- ContainersReady:Pod中所有容器都已就绪;
- Initialized:所有的Init容器都已成功启动;
- Ready:Pod可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中。 | 字段名称 | 描述 | | —- | —- | | type | Pod状态的名称 | | status | 表明该状况是否适用,可能的取值有“True”,“False” 或“Unknown” | | lastProbeTime | 上次探测Pod状况时的时间戳 | | lastTransitionTime | Pod上次从一种状态转换到另一种状态时的时间戳 | | reason | 描述上次状况变化的原因 | | message | 给出上次状态转换的详细信息 |
容器探针
Probe 是由 kubelet 对容器执行的定期诊断。 kubelet 调用由容器实现的 handler (处理程序)
- ExecAction: 在容器内执行指定命令。(命令退出时返回码为0则为诊断成功)
- TCPSocketAction:对容器的IP地址上的指定端口执行TCP检查。(端口打开,则诊断被认为是成功的)
- HTTPGetAction:对容器的IP地址上指定端口和路径执行HTTP Get请求。(检查状态码 200>= && =<400)
返回结果:
success:容器通过了诊断。
failure:容器未通过诊断。
Unknown:诊断失败,因此不会采取任何行动。
kubelet 选择是否执行以下三种探针
- livenessProbe:容器是否正在运行,探测失败,kubelet 会杀死容器,并且容器将根据其重启策略决定未来。
- readinessProbe:容器是否准备好为请求提供服务,就绪探测失败,端点控制器将从与Pod匹配的所有服务的端点列表中删除该Pod的IP地址
- startupProbe:指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。
