数码教程网
柔彩主题三 · 更轻盈的阅读体验

Kubernetes常见问题整理:新手避坑指南

发布时间:2025-12-31 01:11:43 阅读:84 次

Pod 一直处于 Pending 状态

刚搭好集群,部署一个应用却发现 Pod 卡在 Pending 状态。这种情况很常见,多数是因为资源不足。比如节点的 CPU 或内存不够分配,调度器就找不到合适的位置放下这个 Pod。这时候可以执行 kubectl describe pod <pod-name> 查看事件记录,通常会看到 Insufficient cpumemory 的提示。

服务无法通过 ClusterIP 访问

定义了一个 Service,但其他 Pod 就是连不上。先确认目标 Pod 是否处于 Running 状态,并且标签(label)和 Service 的 selector 完全匹配。一个小疏忽,比如写错了一个 label 值,就会导致流量根本没被转发过去。可以用 kubectl get svckubectl 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,避免断流。