本文主要梳理K8S中Pod创建的调度过程以及Pod调度到宿主机后的启动过程,便于日常工作中遇到此类问题的排查思路

Pod调度过程和创建过程思维导图

在这里插入图片描述
参考文档: https://github.com/jamiehannaford/what-happens-when-k8s

常见报错梳理

FailedCreatePodSandBox

create pod sandbox发生在pod调度至宿主机后,kubelet调用CRI创建pod sandbox的步骤;对照上面的思维导图;可以发现这个报错是CRI创建pod sandbox失败,包括了调用CNI分配IP和创建路由信息;一般可以结合enevts和kubelet日志以及CNI的运行日志一起排查;
案例参考: https://blog.csdn.net/root_zhong/article/details/127863032

SandboxChanged

也是sandbox相关的报错,具体也是定位kubelet日志以及CNI的运行日志定位问题
案例参考: https://blog.csdn.net/root_zhong/article/details/127855939

Pod状态为Pending

发生在Pod的调度过程;查看Pod的event,主要原因有以下几类:

  • 资源依赖; 依赖configmap,PVC等资源。
  • 资源不足; request过高,集群没有资源满足调度。
  • 使用亲和性不满足条件;
  • nodeSelector 使用有误。 污点和容忍。
  • 短暂的Pending可能Pod在pull image,可describe查看。

Pod处于Init:Error或Init CrashLoopBackOFf

init 为Pod在宿主机上启动pause容器后准备启动业务容器前的初始化容器;
解决方案; 主要是查看init容器的事件和日志

Pod处于ImagePullBackOff状态

Pod已经调度至节点,但是拉去镜像失败。
解决方案: 根据event描述,确认镜像名称是否正确,可以在目标节点手动pull测试

Pod处于CrashLoopBackOFF状态

表示容器一直处于重启,大部分是容器进程退出导致,少部分可能由于pod sandbox创建失败导致;
解决方案: 查看event事件; 确认容器退出原因,常见原因的有OOM-Kill, Liveness probe failed; 或查看容器退出前日志定位容器异常退出原因。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐