这是 Kubernetes/Helm 排障里最典型、也最容易卡人的场景之一。
你现在遇到的是 CrashLoopBackOff,而且容器起不来、进不去,这是完全可以系统性快速定位的。
我给你一套 “不进容器,也能 5 分钟定位 80% 问题”的标准流程(K3s/containerd 适用)。
容器起不来 ≠ 没有信息
👉 真正的线索在 Pod / Container 的 状态、事件、上一次日志
而不是 exec 进去。
kubectl describe pod wikiserver-6cd5d85c6b-bvw67
重点看 三个地方👇
找这段:
Containers:
wiki:
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: ...
Finished: ...
Exit CodeReason在 Containers: 下面找:
Command:
Args:
👉 80% 的 CrashLoop 是命令/参数/环境变量错误
最底部:
Events:
Type Reason Message
---- ------ -------
Warning BackOff Back-off restarting failed container
或者更关键的:
FailedMountFailedPullCreateContainerConfigError⚠️ CrashLoop 时,必须加 --previous
kubectl logs wikiserver-6cd5d85c6b-bvw67 -c wiki --previous
即使容器已经死了,也能看到上一次启动的 stderr/stdout
这是最快定位错误的方式。
说明容器 还没真正执行到应用代码。
kubectl describe pod ... | grep -A5 Image
检查:
imagePullSecrets错误表现:
ImagePullBackOffErrImagePullcommand:
- /app/start.sh
但镜像里:
👉 立即验证:
kubectl get pod ... -o yaml | sed -n '/command:/,/env:/p'
kubectl describe pod ... | grep -A10 Mounts
常见错误:
kubectl get pod ... -o yaml | sed -n '/env:/,/resources:/p'
很多应用(wiki 类):
/data 没权限👉 通常 Exit Code = 1 / 126 / 127
docker inspect <image> | grep Architecture
exec format error⚠️ 调试专用,解决后要还原
command: ["sleep", "3600"]
然后:
kubectl exec -it <pod> -c wiki -- sh
你可以:
kubectl debug pod/wikiserver-6cd5d85c6b-bvw67 \
-it \
--image=busybox \
--target=wiki
共享 namespace,直接看文件 / 进程 / env
helm template wikiserver ./chart
重点看:
helm get values wikiserver
helm get manifest wikiserver
| 症状 | 第一反应 |
|---|---|
| CrashLoopBackOff | kubectl describe pod |
| 起不来 | kubectl logs --previous |
| 没日志 | command / mount / env |
| Helm 安装 | helm template |
| 想进容器 | sleep + exec |
你只要贴下面 3 样东西(脱敏即可):
1️⃣
kubectl describe pod wikiserver-6cd5d85c6b-bvw67
2️⃣
kubectl logs wikiserver-6cd5d85c6b-bvw67 -c wiki --previous
3️⃣
helm get manifest wikiserver
我可以直接告诉你是哪一行配置导致 CrashLoop。
这种问题,基本都是“第一次 Helm 上线必踩的坑”。