Bài 30. Debug Kubernetes - 20 lệnh kubectl bạn sẽ dùng mỗi ngày
"Ứng dụng vừa deploy lên Kubernetes nhưng không chạy. Pod cứ
CrashLoopBackOff, Service không truy cập được, Ingress trả về 502. Bạn sẽ bắt đầu từ đâu?"
Tin vui là bạn không cần nhớ hàng trăm lệnh kubectl.
Trong thực tế, khoảng 20 lệnh dưới đây đã đủ giúp bạn xử lý phần lớn sự cố hằng ngày.
Debug Kubernetes giống như khám bệnh
Hãy tưởng tượng Kubernetes là một bệnh viện.
- Pod là bệnh nhân.
- Node là phòng bệnh.
- Scheduler là người sắp xếp phòng.
- Kubelet là y tá.
- API Server là quầy tiếp nhận.
Khi ứng dụng gặp sự cố, đừng vội sửa.
Hãy chẩn đoán trước.
1. Xem tất cả Pod
kubectl get pods
Ví dụ
NAME READY STATUS AGE
web-123 1/1 Running 5m
api-456 0/1 CrashLoopBackOff 2m
redis-789 1/1 Running 1h
👉 Đây luôn là lệnh đầu tiên nên chạy.
2. Xem Pod ở mọi Namespace
kubectl get pods -A
Nhiều người mới tìm mãi không thấy Pod...
...chỉ vì nó đang nằm ở namespace khác.
3. Xem Deployment
kubectl get deployment
Giúp biết:
- Có bao nhiêu replica
- Deployment đã sẵn sàng chưa
4. Xem Service
kubectl get svc
Kiểm tra:
- ClusterIP
- NodePort
- LoadBalancer
5. Xem Ingress
kubectl get ingress
Nếu không truy cập được website, đây là nơi nên kiểm tra.
6. Xem Node
kubectl get nodes
Nếu Node bị NotReady...
...Pod cũng sẽ gặp vấn đề.
7. Xem chi tiết Pod
kubectl describe pod web-123
Đây là lệnh quan trọng nhất khi debug.
Bạn sẽ thấy:
- Event
- Image Pull Error
- Scheduling Error
- Probe Failed
Nếu chỉ nhớ một lệnh, hãy nhớ lệnh này.
8. Xem log
kubectl logs web-123
Ví dụ
Connection refused
Database timeout
NullPointerException
Rất nhiều lỗi nằm ngay trong log.
9. Theo dõi log theo thời gian thực
kubectl logs -f web-123
Giống như
tail -f
trên Linux.
10. Xem log của container cụ thể
kubectl logs web-123 -c nginx
Dùng khi Pod có nhiều container.
11. Vào bên trong Pod
kubectl exec -it web-123 -- sh
Hoặc
kubectl exec -it web-123 -- bash
Có thể kiểm tra:
- File
- Environment Variable
- Process
- DNS
Giống như SSH vào máy.
12. Xem YAML của Pod
kubectl get pod web-123 -o yaml
Khi muốn biết Kubernetes đang lưu cấu hình gì.
13. Xem sự kiện trong Cluster
kubectl get events
Nếu Pod không tạo được...
...Event thường sẽ nói lý do.
14. Kiểm tra rollout
kubectl rollout status deployment/web
Biết Deployment đã cập nhật xong chưa.
15. Rollback Deployment
kubectl rollout undo deployment/web
Deploy lỗi?
Quay lại phiên bản trước chỉ với một lệnh.
16. Xem tài nguyên sử dụng
kubectl top pods
Biết Pod đang dùng bao nhiêu:
- CPU
- Memory
17. Xem tài nguyên Node
kubectl top nodes
Nếu Node gần hết RAM...
...Pod mới có thể không được tạo.
18. Port Forward
kubectl port-forward pod/web-123 8080:80
Giúp truy cập ứng dụng từ máy local mà không cần Ingress.
Rất tiện khi debug.
19. Xóa Pod
kubectl delete pod web-123
Đừng lo.
Nếu Pod thuộc Deployment...
ReplicaSet sẽ tạo Pod mới ngay lập tức.
20. Áp dụng cấu hình mới
kubectl apply -f deployment.yaml
Lệnh quen thuộc nhất khi làm việc với Kubernetes.
Mẹo ghi nhớ
Đừng cố học thuộc 20 lệnh một lúc.
Hãy nhớ theo nhóm:
| Mục đích | Lệnh |
|---|---|
| Xem tài nguyên | get |
| Xem chi tiết | describe |
| Xem log | logs |
| Vào Pod | exec |
| Áp dụng YAML | apply |
| Xóa | delete |
| Kiểm tra rollout | rollout |
| Xem tài nguyên CPU/RAM | top |
Chỉ cần thành thạo 8 nhóm lệnh này, bạn đã có thể xử lý phần lớn các tình huống thường gặp.
Tổng kết
Kubernetes có hàng trăm câu lệnh, nhưng trong công việc hằng ngày, bạn sẽ liên tục quay lại một nhóm rất nhỏ:
getdescribelogsexeceventsrollouttopapply
Đây chính là "bộ đồ nghề" của mọi Kubernetes Engineer.
Ở bài tiếp theo, chúng ta sẽ bước sang một chủ đề quan trọng hơn:
Helm - Nói lời tạm biệt với hàng trăm file YAML.
Bạn sẽ thấy vì sao hầu hết các dự án Kubernetes thực tế đều sử dụng Helm thay vì quản lý YAML thủ công.
All Rights Reserved