Kubernetes Troubleshooting 2024: Phá băng 5 sự cố kinh điển

Giới thiệu: Kubernetes – “Gã khổng lồ” phức tạp cần bí kíp debug

Kubernetes chiếm 78% thị phần container orchestration (theo CNCF), nhưng 67% DevOps engineer thừa nhận gặp khó khăn khi troubleshoot. Bài viết này tập trung giải quyết 5 sự cố kinh điển mà mọi cluster đều gặp phải, kèm workflow debug từng bước và command thực chiến.

Phần 1: Pod CrashLoopBackOff – Khi container “tự sát” liên tục

1.1 Phân tích nguyên nhân qua 3 lớp

  • Lỗi ứng dụng:

    kubectl logs 
    <pod_name> --previous  # Check log phiên bản trước
    kubectl describe pod 
    <pod_name> | grep "Exit Code"  # Tìm exit code
    • Exit Code 137: OOMKilled (thiếu memory) → Tăng resources.limits.memory
    • Exit Code 1: Lỗi runtime (file config sai, missing dependency)
  • Lỗi Probe Config:

    livenessProbe:
    httpGet:
      path: /healthz
      port: 8080
    initialDelaySeconds: 5  # Nếu ứng dụng khởi động chậm, tăng giá trị này
    • Sử dụng `kubectl get events –field-selector involvedObject.name= ` để xem event cảnh báo probe fail

1.2 Case Study thực tế:

  • Ứng dụng Java bị CrashLoopBackOff do thiếu JAVA_OPTS: "-XX:+UseContainerSupport" → Container không nhận đúng memory limit

Phần 2: Node Not Ready – Khi worker node “đơ” không rõ nguyên do

2.1 Diagnostic Flow từ A-Z

  1. Kiểm tra trạng thái node:

    kubectl get nodes -o wide
    kubectl describe node 
    <node_name>  # Tìm section "Conditions"
    • DiskPressure/MemoryPressure: Xóa pod không cần thiết hoặc scale down deployment
    • NetworkUnavailable: Kiểm tra CNI plugin (Calico/Flannel) có running?
  2. SSH vào node lỗi và audit systemd service:

    journalctl -u kubelet --since "10 minutes ago" | grep -i error
    systemctl status containerd  # Kiểm tra container runtime

2.2 Bài học đắt giá:

  • Node Not Ready xảy ra khi tham số --node-ip trong Kubelet config sai → Fix bằng cách cập nhật đúng IP vào /var/lib/kubelet/kubeadm-flags.env

Phần 3: NetworkPolicy chặn traffic – Lỗi “mạng” khó nhằn

3.1 Bộ công cụ chuẩn đoán network:

  • Kiểm tra connectivity giữa các pod:
    kubectl run -it --rm debug-pod --image=nicolaka/netshoot -- ping 
    <target_pod_ip>
  • Trace iptables rules trên node:
    iptables-save | grep 
    <namespace>  # Tìm rule liên quan đến NetworkPolicy

3.2 Ví dụ thực tế:

  • NetworkPolicy block egress traffic đến Redis do sai label selector:
    egress:
    - to:
        - podSelector:
            matchLabels:
              app: redis  # Sai label so với thực tế (app: redis-db)

Phần 4: PVC Pending – Storage không mount được

4.1 Debug CSI Driver issues:

  1. Kiểm tra PVC/PV binding:
    kubectl get pvc -n 
    <namespace>
    kubectl describe pvc 
    <pvc_name>  # Tìm event "FailedBinding"
  2. Kiểm tra storage class:
    kubectl get storageclass  # Xem volumeBindingMode: Immediate/WaitForFirstConsumer

4.2 Lỗi thường gặp trên AWS EKS:

  • Worker node không có IAM role permission để gọi AWS EBS API → Attach policy AmazonEBSCSIDriverPolicy vào node role

Phần 5: Kube-API Server Overload – Cluster “sập” tập thể

5.1 Tối ưu API Server Performance

  • Giảm tải LIST request:

    kubectl get --raw /metrics | grep apiserver_request_total  # Tìm endpoint bị query quá nhiều

    → Sử dụng HorizontalPodAutoscaler với custom metrics thay vì query API liên tục

  • Tuning etcd:

    etcdctl check perf  # Kiểm tra latency
    etcdctl defrag      # Chống phân mảnh database

5.2 Case Study điển hình:

  • Prometheus scrape metrics từ 1000+ pod gây DDoS API Server → Chuyển sang dùng Prometheus Operator với ServiceMonitor và thêm label filter

Kết luận: Troubleshooting Kubernetes – Nghệ thuật phân tích hệ thống phân tán

  • Golden Rules:
    1. Luôn bắt đầu từ kubectl describekubectl logs
    2. Reproduce lỗi với ephemeral debug container (netshoot, busybox)
    3. Giám sát metrics etcd, API Server, Kubelet từ đầu
Article Thumbnail
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận