Xử lý sự cố container không khởi động được trong môi trường cloud-native: 7 điểm kiểm tra then chốt

Hiện tượng container khởi động thất bại và phương pháp chẩn đoán

Các trạng thái bất thường phổ biến:

  • CrashLoopBackOff: Container khởi động rồi dừng ngay lập tức
  • ImagePullBackOff: Lỗi xác thực kho chứa hình ảnh
  • ContainerCreating: Vấn đề gắn kết volume hoặc mạng

Quy trình chẩn đoán

  1. Kiểm tra trạng thái Pod bằng lệnh:
    kubectl describe pod <tên_pod>
  2. Xem nhật ký container:
    kubectl logs <tên_pod> --previous
  3. Kiểm tra cấu hình tài nguyên
Hiện tượngNguyên nhânGiải pháp
ImagePullBackOffLỗi tên hình ảnh hoặc xác thựcKiểm tra cấu hình imagePullSecrets
CrashLoopBackOffLỗi script khởi độngPhân tích nhật ký bằng kubectl logs

Các điểm kiểm tra then chốt

1. Xác thực kho chứa hình ảnh

Thực hiện kiểm tra bằng lệnh:

kubectl describe pod <tên_pod>

Phân tích phần Events để xác định lỗi kết nối hoặc xác thực

2. Cấu hình tài nguyên

Cấu hình mẫu:

resources:
  requests:
    memory: "256Mi"
    cpu: "200m"
  limits:
    memory: "512Mi"
    cpu: "500m"

Giải thích:

  • requests: tài nguyên tối thiểu cần thiết
  • limits: giới hạn tài nguyên để tránh chiếm dụng quá mức

3. Cấu hình lưu trữ

Mẫu khai báo PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-storage
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Kiểm tra trạng thái bằng lệnh:

kubectl get pvc

4. Cấu hình mạng

Kiểm tra file cấu hình CNI:

/etc/cni/net.d/

Đảm bảo tồn tại cấu hình đúng định dạng JSON

5. Chính sách bảo mật

Mẫu SecurityContext:

securityContext:
  runAsUser: 1001
  runAsNonRoot: true
  capabilities:
    drop:
      - ALL
    add:
      - NET_BIND_SERVICE

Giải thích:

  • Chặn tất cả capability mặc định
  • Chỉ cho phép binding cổng mạng

6. Cấu hình Toleration

Mẫu cấu hình:

tolerations:
- key: "env"
  operator: "Equal"
  value: "prod"
  effect: "NoExecute"

Giải thích:

  • Cho phép Pod chạy trên node có đánh dấu taint

7. Cơ chế kiểm tra sức khỏe

Mẫu cấu hình probe:

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 10

Giải thích:

  • Phân biệt giữa liveness và readiness probe
  • Thiết lập thời gian delay phù hợp với thời gian khởi động ứng dụng

Thẻ: Kubernetes container troubleshooting cloud-native DevOps

Đăng vào ngày 23 tháng 5 lúc 01:26