Pod 一直处于 Pending 状态
刚搭好集群,部署一个应用却发现 Pod 卡在 Pending 状态。这种情况很常见,多数是因为资源不足。比如节点的 CPU 或内存不够分配,调度器就找不到合适的位置放下这个 Pod。这时候可以执行 kubectl describe pod <pod-name> 查看事件记录,通常会看到 Insufficient cpu 或 memory 的提示。
服务无法通过 ClusterIP 访问
定义了一个 Service,但其他 Pod 就是连不上。先确认目标 Pod 是否处于 Running 状态,并且标签(label)和 Service 的 selector 完全匹配。一个小疏忽,比如写错了一个 label 值,就会导致流量根本没被转发过去。可以用 kubectl get svc 和 kubectl get pods --show-labels 对照检查。
ConfigMap 更新后容器没生效
改了 ConfigMap 的内容,结果容器里的配置还是老样子。这是因为 Kubernetes 不会自动把更新推送到已运行的 Pod。除非你用了特殊的工具像 Reloader,否则得手动滚动重启 Deployment:
kubectl rollout restart deployment/<deployment-name>这样才会触发重建,加载新的配置。
节点状态变成 NotReady
某个节点突然显示 NotReady,上面的 Pod 全部失联。可能原因包括 kubelet 崩溃、网络插件出问题,或者服务器本身负载过高。登录到该节点查看 kubelet 日志:
systemctl status kubelet如果发现服务挂了,尝试重启:sudo systemctl restart kubelet再观察状态是否恢复。
Ingress 配置了却打不开网页
明明写了 Ingress 规则,浏览器访问却返回 404 或连接超时。首先要确认是否已经部署了 Ingress Controller,比如 Nginx Ingress Controller。没有它,Ingress 资源只是个空壳。其次检查 host 和 path 是否写对,TLS 配置有没有证书路径错误。有时候本地 hosts 没配好,也会误以为是 Ingress 问题。
删除命名空间卡住,一直处于 Terminating
想清理一个命名空间,删了半天还是 Terminating。这通常是由于其中某些资源没被正确清理,比如自定义资源(CRD)或持久卷(PV)。可以用以下命令查看卡住的原因:
kubectl get namespace <namespace-name> -o json然后用编辑工具打开,删除 finalizers 字段,保存后命名空间就会被释放。但这一步要小心,相当于强制跳过清理流程。
滚动更新时服务中断
更新 Deployment 时,用户反映页面短暂打不开。默认的更新策略可能让新旧 Pod 交替出现空窗期。解决办法是在 Deployment 中设置合理的 readinessProbe 和滚动更新参数:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1保证至少有一个可用 Pod,避免断流。