k8s中无法进入指定的容器排障
Kubernetes排障实录:为什么我死活进不去容器?
作为Kubernetes老司机,你一定遇到过这样的抓狂时刻:想要调试容器,但kubectl exec死活进不去! 别慌,这篇实战指南帮你快速定位问题,覆盖生产环境中90%的进不去容器的疑难杂症!
一、先看门面:Pod状态正常吗?
排查口诀:先看状态再动手
-
基础检查命令:
kubectl get pods -o wide # 查看Pod状态和所在节点 kubectl describe pod [pod-name] # 查看Pod详细事件(关键!) kubectl logs [pod-name] # 查看实时日志 kubectl logs [pod-name] --previous # 查看前一个容器的日志(崩溃后必看) -
典型异常状态处理:
- Pending状态:资源不足、镜像拉取失败(重点看Events中的Warning信息)
- CrashLoopBackOff:容器反复崩溃(用
--previous看崩溃前日志) - NodeLost/Unhealthy:节点故障(检查节点kubelet状态:
systemctl status kubelet)
二、权限问题:你被关在门外了吗?
生产环境高频坑点:
-
RBAC权限不足:
- 现象:执行exec时提示
Forbidden或Unauthorized - 快速验证:让集群管理员执行以下命令
kubectl auth can-i exec pods --as system:serviceaccount:[namespace]:[serviceaccount-name] - 解决方案:在Role/RoleBinding中添加
pods/exec权限
- 现象:执行exec时提示
-
Pod安全策略拦截(PSP):
- 常见限制:禁止特权容器、限制宿主机目录挂载
- 应急排查:临时禁用PSP验证(仅限调试,生产慎用!)
kube-apiserver --disable-admission-plugins=PodSecurityPolicy
三、网络迷踪:你的请求去哪了?
生产级网络排查技巧:
-
跨节点访问检查:
# 在Pod所在节点执行 curl -v telnet://[目标PodIP]:[端口] nc -zv [目标PodIP] [端口] -
CNI插件诊断:
- Calico:检查
calico-nodePod状态calicoctl node status - Flannel:查看
/run/flannel/subnet.env配置
- Calico:检查
-
防火墙特别关注:
- NodePort范围(默认30000-32767)
- 主机防火墙(iptables/nftables)
- 云厂商安全组(重点检查入站规则)
四、容器自身:你以为的shell其实不存在
经典踩坑场景:
-
没有shell的极简镜像:
- 典型镜像:
scratch、alpine(默认没有bash) - 应急进入方法:
kubectl exec -it [pod-name] -- sh # Alpine镜像用sh kubectl exec -it [pod-name] -- /busybox/sh # 极特殊情况
- 典型镜像:
-
文件系统只读:
- 检查点:securityContext.readOnlyRootFilesystem=true
- 绕过方法(仅调试用):
securityContext: readOnlyRootFilesystem: false
五、高阶疑难:这些坑只有老司机懂
-
Terminated状态残留:
- 现象:Pod显示Running但容器已终止
- 必杀技:
docker ps -a | grep [container-id] # 查看容器退出码 journalctl -u kubelet -f # 查看kubelet日志
-
Ephemeral Containers调试术(v1.23+):
kubectl debug [pod-name] -it --image=busybox --target=[目标容器] -
节点资源枯竭:
- 检查命令:
df -h # 磁盘空间 free -h # 内存 top # CPU docker info | grep Space # Docker存储空间
- 检查命令:
六、终极武器:故障排查流程图
是否Pod Running? → 否 → kubectl describe找原因
↓是
是否有exec权限? → 否 → 检查RBAC/ServiceAccount
↓是
容器内有无shell? → 无 → 使用debug容器或修改镜像
↓有
节点网络是否通? → 否 → 检查CNI/防火墙
↓是
检查kubelet日志 → 发现容器启动失败 → 检查镜像/资源限制
记住:遇到问题先看Events日志!80%的问题都能通过kubectl describe找到线索。 希望这篇实战指南能让你在下次遇到"进不去容器"的问题时,快速定位问题,早日下班!
浙公网安备 33010602011771号