Kubernetes故障克星:19个高频问题速查与秒解指南(2025版)
随着云原生技术的普及,Kubernetes已成为现代应用部署的事实标准。然而,其复杂性也带来了独特的故障排查挑战。本文将聚焦19个高频故障场景,提供快速定位和解决方案,助您成为Kubernetes故障排除专家。
一、集群基础问题排查
1. 节点状态异常
bash
复制下载
csharp
# 检查节点状态
kubectl get nodes
kubectl describe node <node-name>
# 常见故障:节点NotReady
# 解决方案:检查kubelet状态
systemctl status kubelet
journalctl -u kubelet -n 50 --no-pager
# 重启kubelet(谨慎操作)
sudo systemctl restart kubelet
2. 网络插件故障
Calico/Flannel等CNI插件问题常导致Pod间通信失败:
bash
复制下载
perl
# 检查网络插件Pod状态
kubectl get pods -n kube-system | grep -E 'calico|flannel|cilium'
# 重启网络插件(如果允许)
kubectl delete pods -n kube-system -l k8s-app=calico-node
二、Pod与容器层故障
3. Pod一直处于Pending状态
bash
复制下载
perl
# 查看具体原因
kubectl describe pod <pod-name>
# 常见原因及解决方案:
# 1. 资源不足:检查节点资源
kubectl describe nodes | grep -A 5 -B 5 "Allocatable"
# 2. 不满足节点选择器/污点容忍
# 调整节点选择器或添加容忍
4. Pod崩溃循环(CrashLoopBackOff)
bash
复制下载
perl
# 查看Pod日志
kubectl logs <pod-name> --previous
# 进入Pod调试(如果Pod能短暂运行)
kubectl exec -it <pod-name> -- /bin/sh
# 检查应用启动命令和参数
kubectl describe pod <pod-name> | grep -A 10 "Command"
5. 镜像拉取失败(ImagePullBackOff)
yaml
复制下载
yaml
# 检查镜像仓库认证
apiVersion: v1
kind: Secret
metadata:
name: regcred
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: <base64-encoded-docker-config>
三、服务与网络问题
6. Service无法访问
bash
复制下载
csharp
# 检查Service端点
kubectl get endpoints <service-name>
# 如果没有端点,检查Selector匹配
kubectl get pods --show-labels | grep <selector-label>
# 临时端口转发调试
kubectl port-forward svc/<service-name> 8080:80
7. Ingress控制器问题
bash
复制下载
csharp
# 检查Ingress控制器状态
kubectl get pods -n ingress-nginx
# 查看Ingress事件
kubectl describe ingress <ingress-name>
# 检查IngressClass配置
kubectl get ingressclass
四、存储与配置问题
8. PVC一直处于Pending状态
bash
复制下载
yaml
# 检查StorageClass
kubectl get storageclass
# 检查PV/PVC详情
kubectl describe pvc <pvc-name>
kubectl describe pv <pv-name>
# 动态供应失败时,可创建静态PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
9. ConfigMap/Secret更新未生效
bash
复制下载
bash
# 查看Pod挂载的配置
kubectl exec <pod-name> -- cat /etc/config/app.properties
# 强制重新部署(触发配置更新)
kubectl rollout restart deployment/<deployment-name>
五、资源与调度优化
10. 内存/CPU限制导致OOMKilled
yaml
复制下载
yaml
# 合理设置资源限制
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
# 监控资源使用
kubectl top pods
kubectl describe pod <pod-name> | grep -A 5 "Limits"
11. 节点资源压力
bash
复制下载
perl
# 检查节点资源分配
kubectl describe nodes | grep -A 10 "Allocated resources"
# 驱逐低优先级Pod(如有配置)
kubectl get pods --all-namespaces -o wide | grep Evicted
六、高级调试技巧
12. 使用临时调试容器
bash
复制下载
ini
# Kubernetes 1.18+ 支持临时容器
kubectl debug <pod-name> -it --image=busybox --target=<container-name>
13. 网络策略调试
bash
复制下载
css
# 检查网络策略影响
kubectl get networkpolicy --all-namespaces
# 创建测试Pod验证连通性
kubectl run test-pod --image=busybox --rm -it --restart=Never -- ping <target-pod-ip>
七、自动修复与预防
14. 配置健康检查
yaml
复制下载
yaml
# 添加就绪和存活探针
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
15. 使用PodDisruptionBudget保证可用性
yaml
复制下载
yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: myapp-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: myapp
八、监控与日志聚合
16. 集中日志收集
bash
复制下载
ini
# 快速查看相关Pod日志
kubectl logs -l app=myapp --tail=50
# 多容器Pod日志查看
kubectl logs <pod-name> -c <container-name>
17. 性能指标监控
bash
复制下载
bash
# 安装Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 查看资源使用情况
kubectl top nodes
kubectl top pods -A
九、安全与权限问题
18. RBAC权限不足
bash
复制下载
csharp
# 检查用户/服务账户权限
kubectl auth can-i create pods --as system:serviceaccount:default:my-sa
# 查看详细的RBAC配置
kubectl get rolebindings,clusterrolebindings --all-namespaces
19. Pod安全策略违规
bash
复制下载
csharp
# 检查PodSecurityPolicy
kubectl get psp
# 查看被拒绝的Pod事件
kubectl get events --field-selector=reason=FailedCreate
总结:构建系统化排障流程
- 快速诊断 :使用
kubectl get和describe获取资源状态 - 日志分析:深入容器日志查找错误线索
- 网络验证:检查服务发现和网络策略
- 资源配置:确认请求和限制设置合理
- 权限检查:验证RBAC和PSP配置
- 集群健康:监控组件状态和资源使用
记住这些命令和技巧,结合自动化监控告警,您将能大幅缩短Kubernetes故障恢复时间。随着Kubernetes生态的演进,保持对新版本特性和最佳实践的了解同样重要。2025年的Kubernetes环境更加智能化,但坚实的故障排查基本功仍然是每个云原生工程师的核心竞争力。