为满足一定的业务需求,用户往往需要对容器服务集群进行一系列复杂的自定义配置。而当集群中的 Pod 出现某种异常时,可能一时无法直接通过异常状态准确定位异常原因。
常用命令
排查过程的常用命令如下:
查看 Pod 状态:
kubectl get pod <pod-name> -o wide
查看 Pod 的 yaml 配置:
kubectl get pod <pod-name> -o yaml
查看 Pod 事件:
kubectl describe pod <pod-name>
查看容器日志:
kubectl logs <pod-name> [-c <container-name>]
Pod 状态
下表中列举了 Pod 的状态信息:
状态 | 描述 |
Error | Pod 启动过程中发生错误。 |
NodeLost | Pod 所在节点失联。 |
Unkown | Pod 所在节点失联或其他未知异常。 |
Waiting | Pod 等待启动。 |
Pending | Pod 等待被调度。 |
ContainerCreating | Pod 容器正在被创建。 |
Terminating | Pod 正在被销毁。 |
CrashLoopBackOff | 容器退出,Kubelet 正在将它重启。 |
InvalidImageName | 无法解析镜像名称。 |
ImageInspectError | 无法校验镜像。 |
ErrImageNeverPull | 策略禁止拉取镜像。 |
ImagePullBackOff | 正在重试拉取。 |
RegistryUnavailable | 连接不到镜像中心。 |
ErrImagePull | 通用的拉取镜像出错。 |
CreateContainerConfigError | 不能创建 Kubelet 使用的容器配置。 |
CreateContainerError | 创建容器失败。 |
RunContainerError | 启动容器失败。 |
PreStartHookError | 执行 preStart hook 报错。 |
PostStartHookError | 执行 postStart hook 报错。 |
ContainersNotInitialized | 容器没有初始化完毕。 |
ContainersNotReady | 容器没有准备完毕。 |
ContainerCreating | 容器创建中。 |
PodInitializing | Pod 初始化中。 |
DockerDaemonNotReady | Docker 还没有完全启动。 |
NetworkPluginNotReady | 网络插件还没有完全启动。 |
问题定位
您可根据 Pod 的异常状态,选择对应参考文档进一步定位异常原因: