查看集群状态和节点信息
当你发现应用无法启动或调度异常时,第一反应应该是检查集群整体是否健康。使用 kubectl get nodes 能快速列出所有节点及其状态。
kubectl get nodes输出中如果看到某个节点状态不是 Ready,那问题可能出在 kubelet 或网络插件上。这时候可以进一步查看节点详细信息:
kubectl describe node <node-name>这个命令会显示资源使用情况、条件状态以及最近的事件,比如内存不足或磁盘压力,这些都可能导致 Pod 被驱逐。
排查Pod问题
服务访问不了?先查 Pod。用下面这条命令查看命名空间下的所有 Pod:
kubectl get pods -n <namespace>如果看到 Pod 状态是 CrashLoopBackOff,说明容器启动后很快崩溃。这时候得看日志:
kubectl logs <pod-name> -n <namespace>如果是多容器 Pod,记得指定容器名:
kubectl logs <pod-name> -c <container-name> -n <namespace>如果 Pod 还没成功创建,可以用 describe 查原因:
kubectl describe pod <pod-name> -n <namespace>这里经常能看到拉取镜像失败、配置挂载错误或者资源限制过严等提示。
进入容器调试
有些问题光看日志不够,比如环境变量对不对、配置文件生没生成。这时候进容器里看看最直接:
kubectl exec -it <pod-name> -n <namespace> -- sh如果容器里没有 sh,试试 bash:
kubectl exec -it <pod-name> -n <namespace> -- bash进去之后可以查目录结构、测试网络连通性,甚至手动运行启动命令看报错。
检查服务和服务发现
明明 Pod 正常,但服务访问不了?可能是 Service 配置没对上。先看服务有没有正确指向 Pod:
kubectl get svc <service-name> -n <namespace>重点关注 ClusterIP 和端口映射。然后查对应的 Endpoints:
kubectl get endpoints <service-name> -n <namespace>如果 Endpoints 为空,说明标签选择器不匹配,去检查 Pod 的 label 是否和 Service 的 selector 一致。
查看部署和副本集
Deployment 控制着应用的期望状态。如果副本数不对,或者更新卡住,可以直接看它的状态:
kubectl get deploy <deployment-name> -n <namespace>再结合 describe 看是否有滚动更新失败:
kubectl describe deploy <deployment-name> -n <namespace>有时候是因为镜像不存在或资源不足导致新版本起不来。
临时排错工具 Pod
线上突然断网,怀疑是 DNS 有问题?可以起一个临时 Pod 来测试:
kubectl run debug --image=busybox:1.35 -it --rm -- sh进到容器里用 nslookup 或 wget 测试服务域名,能快速判断是不是集群内部网络出了问题。用完自动清理,不会留下残留。
查看资源配置和限制
Pod 总被杀掉?可能是触发了资源限制。查看 Pod 的资源配置:
kubectl get pod <pod-name> -n <namespace> -o yaml | grep -A 5 resources如果 limits 设置得太低,比如内存只有 128Mi,而应用实际需要更多,就会被 OOMKilled。调整 deployment 中的 resource 配置就能解决。