+1

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ỏ:

  • get
  • describe
  • logs
  • exec
  • events
  • rollout
  • top
  • apply

Đâ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

Viblo
Let's register a Viblo Account to get more interesting posts.