Bài 25. Vì sao Kubernetes phải liên tục "khám sức khỏe" Pod?
"Ứng dụng của bạn vẫn đang chạy... nhưng có chắc là nó còn hoạt động?"
Đó là một câu hỏi nghe có vẻ kỳ lạ, nhưng lại là nguyên nhân của rất nhiều sự cố trong thực tế.
Một tình huống quen thuộc
Hãy tưởng tượng bạn có một ứng dụng web đang chạy trên Kubernetes.
Sau vài giờ hoạt động, ứng dụng bị kẹt vì rò rỉ bộ nhớ (Memory Leak).
Container vẫn còn tồn tại.
Pod vẫn hiển thị trạng thái Running.
Nhưng mỗi khi người dùng gửi request...
👉 Họ chỉ nhận được lỗi hoặc phải chờ rất lâu.
Đối với Kubernetes, Pod vẫn còn sống.
Đối với người dùng, ứng dụng đã chết.
Vậy Kubernetes làm sao để biết khi nào một Pod thực sự khỏe mạnh?
1. Kubernetes "khám sức khỏe" Pod
Để giải quyết vấn đề này, Kubernetes sẽ định kỳ kiểm tra tình trạng của Pod bằng Probe.
Bạn có thể hình dung Probe giống như một cuộc gọi hỏi thăm:
"Bạn còn hoạt động bình thường không?"
Nếu Pod trả lời đúng, Kubernetes sẽ để nó tiếp tục phục vụ.
Nếu không, Kubernetes sẽ có hành động phù hợp.
Có 3 loại Probe
1. Liveness Probe
Câu hỏi:
"Bạn còn sống không?"
Nếu câu trả lời là Không, Kubernetes sẽ khởi động lại Pod.
Đây là cách Kubernetes tự động xử lý các trường hợp ứng dụng bị treo hoặc rơi vào trạng thái không thể phục hồi.
2. Readiness Probe
Câu hỏi:
"Bạn đã sẵn sàng phục vụ người dùng chưa?"
Nếu câu trả lời là Chưa, Pod vẫn chạy nhưng không nhận request mới.
Điều này rất hữu ích khi ứng dụng cần thời gian để kết nối cơ sở dữ liệu hoặc tải dữ liệu trước khi phục vụ.
3. Startup Probe
Câu hỏi:
"Bạn đã khởi động xong chưa?"
Một số ứng dụng mất vài phút để khởi động.
Nếu chỉ dùng Liveness Probe, Kubernetes có thể hiểu nhầm rằng ứng dụng bị lỗi và liên tục khởi động lại nó.
Startup Probe giúp Kubernetes kiên nhẫn chờ ứng dụng khởi động hoàn tất trước khi bắt đầu các kiểm tra khác.
2. Hãy tưởng tượng Probe như một bệnh viện
- 🟢 Startup Probe: "Bệnh nhân đã tỉnh sau ca phẫu thuật chưa?"
- 🟢 Readiness Probe: "Bệnh nhân đã đủ khỏe để tiếp khách chưa?"
- 🟢 Liveness Probe: "Bệnh nhân còn dấu hiệu sinh tồn không?"
Mỗi Probe có một nhiệm vụ khác nhau, nhưng đều nhằm đảm bảo ứng dụng luôn hoạt động ổn định.
Kết luận
Một Pod có trạng thái Running không đồng nghĩa với việc ứng dụng đang hoạt động tốt.
Probe giúp Kubernetes biết khi nào cần:
- Khởi động lại Pod bị treo.
- Tạm ngừng gửi request đến Pod chưa sẵn sàng.
- Kiên nhẫn chờ những ứng dụng khởi động chậm.
Đây là một trong những tính năng quan trọng nhất giúp Kubernetes có thể tự động vận hành ứng dụng mà không cần con người can thiệp liên tục.
Bài tiếp theo
Ở bài sau, chúng ta sẽ tìm hiểu Requests và Limits để trả lời câu hỏi:
Làm sao ngăn một Pod chiếm hết CPU và RAM của cả Node?
All rights reserved