Quy trình chẩn đoán chuẩn:
1. kubectl get pods: xem status và số lần restart.
2. kubectl describe pod <name>: đọc mục Events ở cuối và Last State / Exit Code — đa số nguyên nhân lộ ra ở đây.
3. kubectl logs <pod>: log lần chạy hiện tại; thêm --previous để xem log của container vừa crash — bước quan trọng nhất với CrashLoopBackOff vì container hiện tại có thể chưa kịp ghi gì.
4. Container còn chạy mà app lỗi: kubectl exec -it <pod> -- sh vào kiểm tra.
CrashLoopBackOff = container start rồi chết lặp lại; kubelet restart với thời gian chờ (backoff) tăng dần. Nguyên nhân hay gặp:
- App crash ngay khi boot: thiếu env/ConfigMap/Secret, không kết nối được DB.
- Lệnh sai trong image (command/args sai đường dẫn).
- OOMKilled — exit code 137, vượt memory limit (xem Last State: Terminated, Reason: OOMKilled).
- Liveness probe quá gắt: app khởi động chậm hơn probe → bị giết dù bình thường; cần startup probe hoặc nới initialDelaySeconds.
ImagePullBackOff = kéo image thất bại:
- Sai tên/tag image hoặc tag không tồn tại trên registry.
- Registry private nhưng thiếu imagePullSecrets.
- Node không có mạng ra registry.describe ghi rõ thông báo lỗi pull (manifest not found, unauthorized...) — sửa đúng nguyên nhân đó.