K8s 故障排查面试题
核心定位 本文整理 Kubernetes 故障排查类面试题,重点覆盖 Pod Pending、CrashLoopBackOff、ImagePullBackOff、Service 不通、发布异常、存储挂载失败和节点异常。
1. Pod 一直 Pending 怎么排查
1.1. 参考答案
排查顺序:
- 查看 Pod 事件。
- 检查节点资源是否足够。
- 检查 nodeSelector、nodeAffinity、taint/toleration。
- 检查 PVC 是否绑定成功。
- 检查调度器是否正常。
kubectl describe pod <pod_name> -n <namespace>
kubectl get nodes
kubectl describe node <node_name>
kubectl get pvc -n <namespace>
常见原因包括资源不足、节点污点未容忍、亲和性规则不满足、PVC 未绑定和镜像拉取前置条件异常。
2. Pod CrashLoopBackOff 怎么排查
2.1. 参考答案
CrashLoopBackOff 表示容器启动后反复退出,Kubelet 按退避策略重启容器。
排查顺序:
- 查看容器日志。
- 查看上一次崩溃日志。
- 查看退出码和事件。
- 检查启动命令、环境变量、配置文件和依赖服务。
- 检查探针是否配置过严。
kubectl logs <pod_name> -n <namespace>
kubectl logs <pod_name> -n <namespace> --previous
kubectl describe pod <pod_name> -n <namespace>
3. ImagePullBackOff 怎么排查
3.1. 参考答案
ImagePullBackOff 表示镜像拉取失败后进入退避重试。
常见原因:
| 原因 | 排查点 |
|---|---|
| 镜像名或 tag 错误 | 检查 image 字段 |
| 私有仓库认证失败 | 检查 imagePullSecrets |
| 节点无法访问仓库 | 检查 DNS、网络、防火墙 |
| 镜像架构不匹配 | 检查 amd64 / arm64 |
| 仓库限流或不可用 | 检查仓库状态 |
kubectl describe pod <pod_name> -n <namespace>
kubectl get secret -n <namespace>
4. Service 访问不通怎么排查
4.1. 参考答案
Service 不通应按链路排查:
Client → Service → EndpointSlice/Endpoints → Pod IP → 容器端口
排查命令:
kubectl get svc -n <namespace>
kubectl get endpoints -n <namespace>
kubectl get endpointslice -n <namespace>
kubectl get pod -o wide -n <namespace>
kubectl describe svc <svc_name> -n <namespace>
重点检查:
- Service selector 是否匹配 Pod labels。
- targetPort 是否等于容器实际监听端口。
- Pod 是否 Ready。
- NetworkPolicy 是否限制访问。
- kube-proxy 或 CNI 是否异常。
5. Deployment 发布后不可用怎么排查
5.1. 参考答案
排查顺序:
- 查看 Deployment rollout 状态。
- 查看 ReplicaSet 和 Pod 状态。
- 查看新 Pod 日志和事件。
- 检查 readinessProbe 是否导致流量未接入。
- 必要时回滚。
kubectl rollout status deploy/<deploy_name> -n <namespace>
kubectl get rs -n <namespace>
kubectl describe deploy <deploy_name> -n <namespace>
kubectl rollout undo deploy/<deploy_name> -n <namespace>
6. PVC 挂载失败怎么排查
6.1. 参考答案
排查顺序:
- 查看 PVC 是否 Bound。
- 查看 StorageClass 是否存在。
- 查看 PV 是否可用。
- 查看 CSI Controller 和 CSI Node 是否正常。
- 查看 Pod 事件中的 mount 错误。
kubectl get pvc,pv -n <namespace>
kubectl get storageclass
kubectl describe pvc <pvc_name> -n <namespace>
kubectl describe pod <pod_name> -n <namespace>
7. 节点 NotReady 怎么排查
7.1. 参考答案
排查顺序:
- 查看节点状态和条件。
- 检查 kubelet 是否运行。
- 检查容器运行时是否正常。
- 检查磁盘、内存、PID 和网络压力。
- 检查 CNI 插件和节点心跳。
kubectl describe node <node_name>
systemctl status kubelet
crictl ps
journalctl -u kubelet -n 200
8. 面试总结
标准回答 Kubernetes 故障排查应先看资源状态,再看事件、日志和控制器链路。Pod Pending 通常看调度条件和 PVC;CrashLoopBackOff 看容器日志、退出码和探针;ImagePullBackOff 看镜像地址、认证和节点网络;Service 不通按 Service、Endpoint、Pod、端口和网络策略逐层排查;发布异常看 Deployment、ReplicaSet、Pod 和 rollout;节点 NotReady 则重点检查 kubelet、容器运行时、资源压力和 CNI。
关联文档
- K8s 全场景常见问题完整排查手册:系统化排查 Kubernetes 常见故障。
- Pod 长期 Pending 排查:深入分析 Pod 调度失败问题。
- K8s 发布故障排查:排查 Deployment 发布与回滚问题。
- K8s Pod 详解:理解 Pod 状态和生命周期。
