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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐