运维

运维相关知识和内容

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 故障排查流程

  1. 检查Pod状态

  2. 查看事件日志

  3. 检查容器日志

  4. 分析资源配置

二、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. 做好监控,防患于未然