pod的常用状态

发布时间 2023-04-04 15:28:08作者: 人生信条~~

pod的状态
挂起(Pending):Pod 信息已经提交给了集群,但是还没有被调度器调度到合适的节点或者 Pod 里的镜像正在下载
运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,
或者正处于启动或重启状态
成功(Succeeded):Pod 中的所有容器都被成功终止,并且不会再重启
失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退
出或者被系统终止
lastProbeTime :最后一次探测 Pod Condition 的时间戳。
lastTransitionTime :上次 Condition 从一种状态转换到另一种状态的时间。
message :上次 Condition 状态转换的详细描述。
reason :Condition 最后一次转换的原因。
status :Condition 状态类型,可以为 True , False 和 Unknown 。
type :Condition 类型,包括以下方面:
PodScheduled :Pod 已经被调度到其他 node 里
Ready :Pod 能够提供服务请求,可以被添加到所有可匹配服务的负载平衡池中
Initialized :所有的 init containers 已经启动成功
Unschedulable :调度程序现在无法调度 Pod,例如由于缺乏资源或其他限制
ContainersReady :Pod 里的所有容器都是 ready 状态
ReplicaSet 、 Deployment :此类控制器希望 Pod 一直运行下去,它们的重启策略只能是 Always
DaemonSet :每个节点上启动一个 Pod,很明显此类控制器的重启策略也应该是 Always

Init Container ,也就是常说的初始化容器初始化容器
Container 就是用来做初始化工作的容器,可以是一个或者多个,如果有多个的话,这些容器会按定义的顺序依次执行。
我们知道一个 Pod 里面的所有容器是共享数据卷(要主动声明)和 Network Namespace 的,所以 Init
Container 里面产生的数据可以被主容器使用到。从上面的 Pod 生命周期的图中可以看出初始化容器是独立与主容器之
外的,只有所有的初始化容器执行完之后,主容器才会被启动。那么初始化容器有哪些应用场景呢:
等待其他模块等待其他模块 Ready:这个可以用来解决服务之间的依赖问题,比如我们有一个 Web 服务,该服务又依赖于另外一
个数据库服务,但是在我们启动这个 Web 服务的时候我们并不能保证依赖的这个数据库服务就已经就绪了,所以可能会
出现一段时间内 Web 服务连接数据库异常。要解决这个问题的话我们就可以在 Web 服务的 Pod 中使用一个
InitContainer ,在这个初始化容器中去检查数据库是否已经准备好了,准备好了过后初始化容器就结束退出,然后
我们主容器的 Web 服务才开始启动,这个时候去连接数据库就不会有问题了。
做初始化配置做初始化配置:比如集群里检测所有已经存在的成员节点,为主容器准备好集群的配置信息,这样主容器起来后就能用
这个配置信息加入集群。
其它场景其它场景:比如将 Pod 注册到一个中央数据库、配置中心等。