Kubernetes là một hệ thống phức tạp và việc gặp lỗi là điều không thể tránh khỏi. Bài viết này sẽ giúp bạn nhận diện và khắc phục các lỗi phổ biến trong Kubernetes.
1. Lỗi Pod Không Khởi Chạy
Kiểm tra trạng thái Pod
kubectl get pods -n <namespace>
Nếu Pod ở trạng thái Pending
hoặc CrashLoopBackOff
, tiếp tục kiểm tra:
kubectl describe pod <pod-name> -n <namespace>
Nguyên nhân phổ biến & Cách khắc phục:
- Thiếu tài nguyên (CPU, RAM): Kiểm tra giới hạn tài nguyên
kubectl top pod <pod-name>
Giải pháp: Tăng giới hạn tài nguyên trong YAML:
resources: requests: memory: "512Mi" cpu: "250m"
- Không tìm thấy Image hoặc Image bị lỗi:
kubectl logs <pod-name> -n <namespace>
Kiểm tra image name, tag, registry và đảm bảo có quyền truy cập.
2. Lỗi Service Không Truy Cập Được
Kiểm tra trạng thái Service:
kubectl get svc -n <namespace>
Nếu Service không có External IP:
kubectl describe svc <service-name> -n <namespace>
Nguyên nhân & Cách khắc phục:
- Service type là ClusterIP nhưng cần NodePort hoặc LoadBalancer:
type: NodePort
- Pod không lắng nghe đúng port:
Kiểm tra
targetPort
trong Service YAML khớp vớicontainerPort
của Pod.
3. Lỗi Volume Không Mount Được
kubectl get pvc -n <namespace>
Nếu PVC ở trạng thái Pending
, kiểm tra StorageClass:
kubectl get storageclass
Nguyên nhân & Cách khắc phục:
- StorageClass không tồn tại hoặc cấu hình sai: Chọn StorageClass khác hoặc sửa lại YAML của PVC.
- Node không có quyền truy cập vào Persistent Volume: Kiểm tra sự gắn kết của PV vào Node.
4. Lỗi Node Không Ready
kubectl get nodes
Nếu Node ở trạng thái NotReady
, kiểm tra logs của Kubelet:
journalctl -u kubelet -f
Nguyên nhân & Cách khắc phục:
- Thiếu tài nguyên trên Node: Kiểm tra với
kubectl describe node <node-name>
. - Kubelet gặp lỗi: Restart lại dịch vụ Kubelet.
systemctl restart kubelet
5. Lỗi CrashLoopBackOff
Nếu container liên tục bị restart, kiểm tra logs:
kubectl logs <pod-name> -n <namespace>
Nguyên nhân & Cách khắc phục:
- Lỗi cấu hình môi trường (ENV variables): Kiểm tra giá trị biến môi trường.
- Ứng dụng bị lỗi: Chạy thử container trên local để debug.
- Lỗi Readiness/Liveness Probes: Nếu probe sai, có thể sửa YAML:
livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10
6. Debug & Monitoring Kubernetes
Sử dụng kubectl debug:
kubectl debug node/<node-name> -it --image=busybox
Kiểm tra logs của Control Plane:
kubectl logs -n kube-system etcd-master
Sử dụng Prometheus + Grafana để giám sát:
- Cài đặt Prometheus Operator
- Cấu hình AlertManager để cảnh báo lỗi
Đây là danh sách lỗi phổ biến và cách khắc phục. Nếu bạn gặp vấn đề cụ thể, hãy mô tả chi tiết ở phần bình luận để mình và mọi người cùng hỗ trợ.