运维
运维相关知识和内容
Kubernetes故障排查实战:从CrashLoopBackOff到问题解决
摘要
Kubernetes故障排查实战指南,详解CrashLoopBackOff、ImagePullBackOff、OOMKilled等高频错误的修复方法,提供容器启动问题分析、netshoot工具使用和Java应用调优的完整流程。
一、K8s故障排查基础
1.1 常用诊断命令
# 查看Pod状态 kubectl get pod -n namespace -o wide # 查看Pod详情 kubectl describe pod-n namespace # 查看Pod日志 kubectl logs-n namespace --previous # 进入Pod调试 kubectl exec -it-n namespace -- /bin/sh # 查看资源使用 kubectl top pod -n namespace
1.2 故障排查流程
检查Pod状态
查看事件日志
检查容器日志
分析资源配置
二、CrashLoopBackOff详解
2.1 原因分析
CrashLoopBackOff表示容器启动后立即崩溃:
常见原因:
- 应用启动失败
- 配置错误
- 健康检查失败
- 资源不足
- 依赖服务不可用
2.2 诊断步骤
# 1. 查看Pod事件 kubectl describe pod myapp-xxx # 2. 查看容器日志 kubectl logs myapp-xxx --previous -n namespace # 3. 检查配置 kubectl get configmap -n namespace -o yaml
2.3 解决方案
场景1:应用配置错误
apiVersion: v1 kind: Pod metadata: name: myapp spec: containers: - name: myapp image: myapp:v1 env: - name: DATABASE_URL valueFrom: secretKeyRef: name: db-config key: url
场景2:健康检查超时
readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3
三、ImagePullBackOff
3.1 诊断与解决
# 1. 检查镜像名称
kubectl get pod myapp -o jsonpath='{.spec.containers[0].image}'
# 2. 测试镜像拉取
kubectl run test --image=--rm -it私有仓库认证:
apiVersion: v1 kind: Secret metadata: name: regcred type: kubernetes.io/dockerconfigjson data: .dockerconfigjson:--- apiVersion: v1 kind: Pod metadata: name: myapp spec: imagePullSecrets: - name: regcred containers: - name: myapp image: registry.example.com/myapp:v1
四、OOMKilled问题
4.1 解决方案
resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "1Gi" cpu: "500m"
Java应用特殊配置:
env: - name: JAVA_OPTS value: "-Xmx512m -Xms256m -XX:+UseG1GC"
五、网络问题排查
5.1 使用netshoot工具
kubectl run netshoot --rm -it --image=nicolaka/netshoot -- /bin/bash # DNS调试 dig myservice.namespace.svc.cluster.local # 网络连通性 curl -v http://myservice:8080/health
六、总结
Kubernetes故障排查需要系统化方法:
1. 先看状态,再看事件
2. 查看日志,找根因
3. 资源、网络、依赖逐一排查
4. 做好监控,防患于未然