k8s Pod状态详解
在 Kubernetes 中,Pod 是最小的可部署的计算单元,它是一组容器的集合,共享同一个网络命名空间、存储卷等资源。
Kubernetes 中的 Pod 有以下几种状态:
- Pending(挂起):Pod 已经被 Kubernetes API 接受,但它的容器镜像还没有被拉取,或者 Pod 所需的节点资源(CPU、内存等)还没有满足。在这个状态中,Pod 是不可调度的。
- Running(运行):Pod 已经调度到了节点上并且所有容器都已经创建,至少有一个容器仍在运行中或者在启动过程中。
- Succeeded(成功):Pod 中的所有容器都已经正常终止,并且不会再重启。
- Failed(失败):Pod 中至少有一个容器已经以非零状态退出。
- Unknown(未知):无法获取 Pod 的状态。这种状态通常是由于与 Pod 相关的 API 调用失败或者 Pod 控制器处于错误状态导致的。
除了上述状态之外,Pod还有一些特殊的条件状态,它们记录了 Pod 的一些细节信息,例如 Pod 是否处于调度中、容器镜像是否拉取成功等。这些状态和条件状态可以通过 kubectl describe pod
命令获取,这些条件状态:
- PodScheduled:表示 Pod 是否已经被调度到了节点上。
- ContainersReady:表示 Pod 中的所有容器是否已经准备就绪。
- Initialized:表示 Pod 中的所有容器是否已经初始化。
- Ready:表示 Pod 是否已经准备就绪,即所有容器都已经启动并且可以接收流量。
- CrashLoopBackOff: 容器退出,kubelet正在将它重启
- InvalidImageName: 无法解析镜像名称
- ImageInspectError: 无法校验镜像
- ErrImageNeverPull: 策略禁止拉取镜像
- ImagePullBackOff: 正在重试拉取
- RegistryUnavailable: 连接不到镜像中心
- ErrImagePull:通用的拉取镜像出错
- CreateContainerConfigError: 不能创建kubelet使用的容器配置
- CreateContainerError: 创建容器失败
- m.internalLifecycle.PreStartContainer 执行hook报错
- RunContainerError: 启动容器失败
- PostStartHookError: 执行hook报错
- ContainersNotInitialized: 容器没有初始化完毕
- ContainersNotReady: 容器没有准备完毕
- ContainerCreating:容器创建中
- PodInitializing:pod 初始化中
- DockerDaemonNotReady:docker还没有完全启动
- NetworkPluginNotReady: 网络插件还没有完全启动
- Evicte: pod被驱赶