Trong môi trường Kubernetes, việc quan sát và hiểu trạng thái của cluster là rất quan trọng. Nếu bạn không thể kiểm tra tình trạng của các ứng dụng đang chạy, việc quản lý chúng sẽ trở nên khó khăn, nếu không muốn nói là không thể. Đây là lúc khái niệm khả năng quan sát trở nên quan trọng, và các sự kiện trong Kubernetes đóng vai trò then chốt trong bối cảnh này.

Sự Kiện Trong Kubernetes Là Gì?

Các sự kiện trong Kubernetes là các tài nguyên cung cấp cái nhìn sâu sắc và khả năng quan sát về các khía cạnh hoạt động của cụm, chẳng hạn như lý do tại sao các hành động nhất định được thực hiện hoặc tại sao chúng thất bại. Chúng là công cụ hữu ích để hiểu trạng thái và hành vi của các tài nguyên Kubernetes. Các sự kiện được tạo ra bất cứ khi nào có sự thay đổi trong trạng thái của các tài nguyên cụm như Nodes, Pods, Containers và các đối tượng Kubernetes khác như Deployments và Services.

Điều quan trọng cần lưu ý là các sự kiện trong Kubernetes có tính tạm thời và mặc định thì, không được lưu trữ vĩnh viễn. Thay vào đó, chúng được giữ trong “etcd”, cơ sở dữ liệu khóa-giá trị của Kubernetes, và được giữ lại trong một khoảng thời gian ngắn (thường là một giờ). Điều này giúp quản lý tác động lưu trữ và hiệu suất lên cơ sở dữ liệu “etcd”.

Các Loại Sự Kiện Trong Kubernetes

Các sự kiện trong Kubernetes có thể được phân loại thành hai loại chính:

  • Sự Kiện Bình Thường: Các sự kiện này biểu thị các hoạt động dự kiến và thường xuyên trong cụm, như một Pod được lên lịch hoặc một image được pull thành công.
  • Sự Kiện Cảnh Báo: Các sự kiện cảnh báo chỉ ra các vấn đề mà người dùng cần giải quyết. Chúng có thể bao gồm việc lên lịch Pod thất bại, lỗi khi pull image, hoặc các vấn đề với giới hạn tài nguyên.

Cách Thu Thập Các Sự Kiện Trong Kubernetes

Trong Kubernetes, có hai lệnh chính để thu thập dữ liệu sự kiện: kubectl describekubectl get events.

kubectl describe

Lệnh kubectl describe <RESOURCE> cung cấp thông tin chi tiết về một tài nguyên cụ thể, bao gồm một phần có tiêu đề Events ở cuối. Dưới đây là một ví dụ về phần Events từ đầu ra của lệnh kubectl describe <POD_NAME> cho một Pod nginx đang chạy:

kubectl describe pod nginx

kubectl get events

Lệnh kubectl get events liệt kê tất cả các sự kiện trong cụm. Bạn có thể sử dụng các cờ khác nhau với lệnh này để lọc và sắp xếp nâng cao. Dưới đây là một số ví dụ:

Liệt kê các sự kiện trong một namespace cụ thể:
kubectl get events -n <namespace>
Liệt kê các sự kiện trên tất cả các namespace:
kubectl get events --all-namespaces
Truyền trực tiếp các sự kiện:
kubectl get events --watch
Sử dụng bộ chọn trường để lọc chính xác:
kubectl get events --field-selector involvedObject.name=<resource-name>
Sắp xếp các sự kiện theo dấu thời gian:
kubectl get events --sort-by='.metadata.creationTimestamp'
Sử dụng đầu ra JSON hoặc YAML cho các truy vấn phức tạp:
kubectl get events -o json

Công Cụ Để Trích Xuất Các Sự Kiện Trong Kubernetes

Như đã đề cập ở trên, các sự kiện trong Kubernetes có tính tạm thời, chỉ được lưu trữ trong một khoảng thời gian ngắn trong cơ sở dữ liệu “etcd”. Điều này đặt ra thách thức khi cần giám sát và phân tích lâu dài. Để giải quyết vấn đề này, một số công cụ bên ngoài đã được phát triển, cho phép xuất các sự kiện Kubernetes đến các điểm đích bền vững hơn để phân tích mở rộng và tích hợp với các hệ thống giám sát.

Dưới đây, chúng ta sẽ khám phá một số công cụ phổ biến được sử dụng rộng rãi để xuất và giám sát các sự kiện Kubernetes:

  • Eventrouter: Eventrouter là một công cụ theo dõi các sự kiện Kubernetes và chuyển tiếp chúng đến một điểm đích được chỉ định, chẳng hạn như một nền tảng ghi nhật ký. Điều này giúp duy trì các sự kiện vượt quá thời gian tồn tại ngắn mặc định của chúng, cho phép phân tích mở rộng và giám sát lịch sử các hoạt động của cụm.
  • kubernetes-event-exporter: Công cụ này cho phép xuất các sự kiện Kubernetes đến nhiều điểm đích với khả năng định tuyến và lọc tùy chỉnh. Nó đặc biệt hữu ích để chuyển đổi các sự kiện thành định dạng dễ tiêu thụ hơn cho các hệ thống giám sát và cảnh báo khác nhau.
  • kspan: Đây là một công cụ chuyển đổi các sự kiện Kubernetes thành các phần tử gọi là “spans”, giúp theo dõi trình tự và kết nối giữa các sự kiện khác nhau trong cụm Kubernetes của bạn. Điều này giúp dễ dàng hơn trong việc thấy cách các sự kiện liên quan và hiểu được luồng và tác động tổng thể của những gì đang xảy ra trong cụm.
  • kubewatch: Công cụ này giám sát các sự kiện Kubernetes và thông báo cho người dùng về các thay đổi. Nó phù hợp cho việc cảnh báo thời gian thực và tích hợp với các nền tảng nhắn tin khác nhau, giúp người dùng luôn được thông báo về trạng thái hoạt động của cụm.

Kết Luận

Trong bài viết này, chúng ta đã tìm hiểu về các sự kiện trong Kubernetes, bao gồm các loại khác nhau của chúng. Chúng ta đã khám phá cách thu thập dữ liệu sự kiện bằng hai lệnh chính: kubectl describe và kubectl get events, và thảo luận về việc sử dụng các cờ khác nhau với kubectl get events để lọc và sắp xếp nâng cao.

Bằng cách hiểu và sử dụng các sự kiện trên Kubernetes, bạn có thể có được những cái nhìn chi tiết về trạng thái và hành vi của cụm, giúp bạn quản lý và khắc phục sự cố các ứng dụng của mình hiệu quả hơn.