Kubernetes 实验踩坑记录:Pod 一直卡在 ContainerCreating,无法进入 CrashLoopBackOff 的排错全过程
目录
一、问题背景
最近在做 Kubernetes 实验项目,需要创建一个 故意失败的 Pod,观察 Kubernetes 的自动重启机制。
实验中创建的 Pod 使用如下命令:
command:
- /bin/sh
- -c
- echo 'I am designed to fail!'; exit 1
按照实验要求,Pod 启动后应该不断失败并重启,最终状态会变为:
CrashLoopBackOff
于是我运行了:
watch kubectl get pods
理论上应该看到 Pod 进入 CrashLoopBackOff 状态。
但是实际情况却是:
NAME READY STATUS RESTARTS AGE
crash-app-784d5bfb5c-75zq7 0/1 ContainerCreating 0 10m
Pod 一直卡在 ContainerCreating,完全没有进入 CrashLoopBackOff。
这明显不符合实验预期,于是开始排错。
二、问题分析过程
1 首先确认 Pod 状态
先查看 Pod 详细信息:
kubectl describe pod crash-app-784d5bfb5c-75zq7
发现 Pod 状态为:
Status: Pending
Reason: ContainerCreating
IP: <none>
说明:
-
Pod 已经被调度
-
但容器还没有成功启动
也就是说 容器根本还没开始运行。
2 查看 Events 日志
在 describe 输出的最后部分发现了关键报错:
FailedCreatePodSandBox
plugin type="calico" failed (add):
error getting ClusterInformation:
connection is unauthorized: Unauthorized
完整报错类似:
Failed to create pod sandbox:
failed to setup network for sandbox
plugin type="calico" failed
connection is unauthorized
到这里基本可以确定问题:
Pod 网络创建失败。
三、问题原因
Kubernetes 创建 Pod 时,流程大致如下:
调度 Pod
↓
创建 Pod Sandbox
↓
配置网络 (CNI)
↓
启动容器
而我的问题卡在:
CNI 网络插件
这里使用的是 Calico 网络插件。
报错:
plugin type="calico" failed
connection is unauthorized
说明 Calico 在访问 Kubernetes API 时认证失败,导致无法创建 Pod 网络。
因此:
-
Pod 没有 IP
-
容器无法启动
-
状态一直卡在 ContainerCreating
这也是为什么一直无法进入 CrashLoopBackOff。
因为:
容器压根没有启动。
四、解决过程
既然问题出在网络插件,就先检查系统组件。
查看 kube-system 命名空间:
kubectl get pods -n kube-system
确认核心组件状态:
calico-node
calico-kube-controllers
coredns
kube-apiserver
kube-scheduler
全部为:
Running
说明组件本身没有崩溃。
直接 重启 Calico Pod。
执行:
kubectl delete pod -n kube-system -l k8s-app=calico-node
再执行:
kubectl delete pod -n kube-system -l k8s-app=calico-kube-controllers
Kubernetes 会自动重新创建。
然后观察:
kubectl get pods -n kube-system
等它们全部变成:
Running
然后重新看你的测试 Pod
这时再次观察 Pod 状态:
kubectl get pods -w
终于看到状态变化:
ContainerCreating
↓
Running
↓
Error
↓
CrashLoopBackOff
最终结果:
NAME READY STATUS RESTARTS
crash-app-784d5bfb5c-75zq7 0/1 CrashLoopBackOff 3
实验目标成功达成。
五、本次实验总结
这次实验最大的收获是理解了 Pod 创建的完整流程:
调度
↓
创建 Sandbox
↓
配置网络
↓
启动容器
↓
执行程序
如果 Pod 卡在:
ContainerCreating
通常是:
-
CNI 网络问题
-
Volume 挂载失败
-
镜像拉取失败
而如果 Pod 状态是:
CrashLoopBackOff
则说明:
-
容器已经成功启动
-
但程序执行失败
-
Kubernetes 正在不断重启容器
六、Kubernetes 排错小技巧
遇到 Pod 异常时,推荐排查顺序:
1 查看 Pod
kubectl get pods
2 查看详细信息
kubectl describe pod POD_NAME
重点关注:
Events
3 查看日志
kubectl logs POD_NAME
4 查看系统组件
kubectl get pods -n kube-system
七、结语
这次实验虽然只是一个简单的 CrashLoopBackOff 示例,但在排错过程中让我更清楚地理解了:
-
Kubernetes Pod 创建流程
-
CNI 网络插件的作用
-
CrashLoopBackOff 的触发机制
更多推荐




所有评论(0)