目录
一、前言
在讲pod的配置前,先粗略概括下,其中包括pod的生命周期、镜像策略、网络模式、节点选择、节点亲和/反亲和、Pod亲和/反亲和、存储等等,涉及内容较多,需要各自慢慢理解及应用到实际中。
此章节主要介绍pod生命周期相关
二、Pod 的生命周期
Pod 生命周期是指从创建到结束的这一段时间,其中包含 Pending、Running、Failed、Succeded
阶段;如果至少 其中有一个主要容器正常启动,则进入 Running;
Pod 中容器以 失败状态结束而进入 Failed
阶段;Pod 中容器以 成功状态结束而进入 Succeeded
阶段。
生命周期中的几种状态解读:
- Pending:挂起状态,表示已经创建了pod资源对象,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间
- Running:运行中,pod已经被调度至某节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
- Succeed:pod中的所有容器都已经成功终止并且不会被重启
- Failed:所有容器都已经停止,但至少有一个容器终止失败,即容器返回了非0的退出状态
- Unknown:因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机与apiserver通信失败导致
以上几种情况,主要关注的是Pending和Failed的状态,可以通过命令 kubectl describe pod <pod名称> 查看产生的具体原因,这也是生产中Trouble shoot最多的场景,前者可能影响滚动更新或服务重调度,后者影响服务正常对外提供服务。
说到pod生命周期状态,这里不得不说一下容器相关特性,容器是否正常,影响到的就是pod的状态。
三、容器状态
Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 生命周期上的阶段一样。 当调度器将 Pod 分派给某个节点,kubelet
就通过 容器运行时 开始为 Pod 创建容器。 容器的状态有三种:Waiting
(等待)、Running
(运行中)和 Terminated
(已终止)。
要检查 Pod 中容器的状态,也可以使用 kubectl describe pod <pod 名称>
查看 Pod 中每个容器的状态。
容器状态解读:
Waiting
:等待,容器仍在运行它完成启动所需要的操作,如拉取容器镜像Running:
运行中,表明容器正常运行状态Terminated
:已终止,表示容器正常结束或者因为某些原因失败终止
Tips:在配置服务滚动更新期间,避免因更新操作导致服务5XX,可以配置pod优雅关停,即 preStop ,如果容器配置了 preStop
,则该操作会在容器进入 Terminated
状态之前执行,具体可以了解K8S preStop相关知识
四、总结
在实际生产应用中,pod状态和容器状态常与服务部署过程中的故障排查相关,因此 ,熟记pod和容器的几个状态解读,更有利于快速解决问题,另外就是配合命令: kubectl describe pod <pod名字>进行排查。
觉得有用就点个收藏吧~