K8s Pod故障排查
·
K8s Pod故障排查,看完再也不怕"炸锅"
一、Pod 状态异常?一篇搞定!
1️⃣ Pending状态 — Pod调度失败
错误现象:Pod一直处于Pending状态,无法被调度到节点上 常见原因:
• 节点资源不足(CPU/内存)
• 节点选择器(nodeSelector)不匹配
• 存在污点(Taint)但没有对应的容忍配置
排查命令: # 查看Pod详情 kubectl describe pod -n
# 查看节点资源 kubectl top nodes
解决方案:
资源不足 调整资源请求或扩容节点
nodeSelector不匹配 检查Pod标签与节点标签是否匹配
污点未容忍 添加tolerations配置
tolerations:
• key: "dedicated"
operator: "Equal"
value: "log-collector"
effect: "NoSchedule"
2️⃣ CrashLoopBackOff — 容器反复崩溃
错误现象:容器启动后立即崩溃,不断重启 常见原因:
配置文件错误(文件路径不对)
权限不足(运行在root)
健康检查过于敏感
排查命令:
# 查看容器日志
kubectl logs -n --previous
# 查看详细事件
kubectl describe pod -n
解决方案:
① 配置错误:检查ConfigMap/Secret挂载路径是否正确 ② 权限问题:配置安全上下文
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
③ 健康检查调优:增加启动延迟
livenessProbe:
initialDelaySeconds: 30
failureThreshold: 3
3️⃣ ImagePullBackOff — 镜像拉取失败 📦
错误现象:Pod一直拉取不了镜像 常见原因:
镜像名称或标签错误
私有镜像需要密钥
网络问题无法访问镜像仓库
解决方案:
问题 解决方法
镜像地址错误 检查镜像名和标签是否正确
私有仓库 配置imagePullSecrets
大镜像超时 增加terminationGracePeriodSeconds
imagePullSecrets:
name: regcred
4️⃣ 网络通信异常
4️⃣ 网络通信异常 🌐 错误现象:Pod无法访问其他服务,DNS解析失败 排查命令:
# 进入容器调试
kubectl exec -it -n -- /bin/sh
# 测试DNS解析
nslookup
常见问题及解决方案: ① DNS解析失败
检查CoreDNS是否正常运行
确认ndots配置合理
② 服务不可达
检查Service是否正确暴露端口
验证网络策略是否拦截
③ 跨命名空间通信
配置NetworkPolicy允许流量
5️⃣ 存储挂载失败
错误现象:Pod无法挂载Volume 排查命令:
# 查看PVC状态
kubectl get pvc -n
# 查看存储类
kubectl get storageclass
解决方案:
PVC未绑定
:检查StorageClass配置
权限拒绝
:设置fsGroup
securityContext:
fsGroup: 2000
存储性能问题
:使用fio测试I/O
二、集群级别故障
6️⃣ Namespace卡在Terminating
强制删除方法:
# 方法1:删除finalizers
kubectl get namespace -o json | jq '.spec.finalizers=[]' | kubectl replace --raw "/api/v1/namespaces//finalize" -f -
# 方法2:强制删除
kubectl delete namespace --grace-period=0 --force
7️⃣ etcd集群故障
# 查看etcd状态
kubectl get cs
# 查看etcd日志
kubectl logs -n kube-system etcd- --tail=100
8️⃣ Worker节点NotReady
排查步骤:
# 查看节点详情
kubectl describe node
# 检查kubelet状态
systemctl status kubelet
# 查看kubelet日志
journalctl -u kubelet -n 100
常见原因:
kubelet未运行
节点资源耗尽
网络问题
证书过期
三、排查神器推荐
黄金四步法
kubectl get pods -n
# 查看Pod状态 kubectl describe pod
# 查看事件详情 kubectl logs
# 查看应用日志 kubectl exec -it -- /bin/sh
# 进入容器
必备调试工具
工具
用途
kubectl-debug 容器调试神器
netshoot 网络问题排查
kubectl-edit 在线修改资源
k9s TUI管理工具
四、防御性配置建议
1.合理资源限制
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
2. 健壮性探针
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
3.安全上下文
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
总结
错误类型
关键排查命令
Pending kubectl describe pod + kubectl top nodes
CrashLoopBackOff kubectl logs --previous
ImagePullBackOff 检查镜像地址和密钥
网络异常 kubectl exec+ nslookup
存储失败 kubectl get pvc
更多推荐
所有评论(0)