Giới Thiệu
Trong môi trường Kubernetes, Probes là công cụ quan trọng giúp kiểm soát trạng thái của các pod, từ đó đảm bảo hệ thống hoạt động ổn định và hiệu quả. Khi cấu hình không chính xác hoặc bỏ qua các probes có thể dẫn đến tình trạng downtime đáng tiếc, làm gián đoạn dịch vụ cho người dùng. Với vai trò là một SRE (Site Reliability Engineer), việc này không thể chấp nhận được. Thông qua bài viết này, mình sẽ chia sẻ kinh nghiệm về cách cấu hình các probes trong Kubernetes để đảm bảo ứng dụng của bạn luôn sẵn sàng và hoạt động mượt mà.
Những Điều Cần Biết Trước Khi Bắt Đầu
Trước khi đi sâu vào việc cấu hình probes, bạn cần hiểu cách thức cài đặt một service đơn giản trên Kubernetes và vai trò của các probes. Nếu bạn chưa nắm rõ về vấn đề này, vui lòng tham khảo bài viết Kubernetes Best Practices: Liveness và Readiness Health Checks.
Phân Loại Probes Trong Kubernetes
Tính đến phiên bản 1.29, Kubernetes hỗ trợ 3 loại probes cơ bản: Startup Probe, Readiness Probe, và Liveness Probe. Chúng ta sẽ cùng nhau tìm hiểu về từng loại prob và cách thức cấu hình chúng.
1. Startup Probe
Startup Probe là loại probe đầu tiên được thực hiện khi pod khởi động. Chỉ khi Startup Probe thành công, Readiness và Liveness Probe mới được kích hoạt. Probe này không bắt buộc nhưng rất hữu ích khi ứng dụng cần thời gian lâu để khởi động, như các ứng dụng Java.
Ví dụ cấu hình Startup Probe:
startupProbe:
httpGet:
path: /healthz
port: 5000
failureThreshold: 30
periodSeconds: 10
Trong cấu hình này, Kubernetes sẽ chờ tối đa 300 giây (tính từ failureThreshold
và periodSeconds
) trước khi đánh giá pod không thể khởi động. Nếu sau thời gian này, pod không nhận được phản hồi thành công từ /healthz
, Kubernetes sẽ kill pod.
2. Readiness Probe
Readiness Probe giúp xác định liệu pod có thể nhận traffic hay chưa. Nếu không cấu hình Readiness, khi pod vừa khởi động, IP pod sẽ ngay lập tức được thêm vào endpoint của service, bất kể ứng dụng đã sẵn sàng xử lý request hay chưa. Điều này có thể dẫn đến lỗi timeout hoặc yêu cầu không được xử lý.
Cấu hình Readiness Probe:
readinessProbe:
httpGet:
path: /readyz
port: 5000
initialDelaySeconds: 20
periodSeconds: 15
failureThreshold: 3
Là một DevOps, bạn cần đảm bảo logic API healthcheck phải kiểm tra kết nối đến database và các hệ thống phụ trợ cần thiết. Nếu ứng dụng trả về 200 cho tất cả các request mà không thực hiện kiểm tra thực sự, nguy cơ cao xảy ra lỗi.
3. Liveness Probe
Liveness Probe được sử dụng để xác định trạng thái sống chết của pod và quyết định có nên restart pod hay không. Trong các trường hợp pod bị treo nhưng vẫn ở trạng thái Running, Liveness Probe sẽ giúp phát hiện tình trạng này.
Ví dụ cấu hình Liveness Probe:
livenessProbe:
httpGet:
path: /healthz
port: 5000
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
Logic cho API Liveness chỉ cần trả về 200 để xác nhận pod vẫn hoạt động.
Thực Hành Tốt Nhất Khi Sử Dụng Probes
-
Sử dụng hai API khác nhau cho liveness và readiness: Điều này giúp tăng cường khả năng kiểm tra và đảm bảo chất lượng dịch vụ.
-
Sử dụng chung một API cho liveness và readiness: Trong trường hợp này,
failureThreshold
cho Liveness nên cao hơn so với Readiness, cho phép K8s tạm dừng traffic trước khi tiến hành restart pod.
Kết Luận
Qua bài viết này, mình hy vọng đã giúp bạn hiểu rõ hơn về việc cấu hình các Probes trong Kubernetes. Điều này không chỉ cải thiện hiệu suất của ứng dụng mà còn gia tăng sự ổn định cho hệ thống. Nếu bạn có bất kỳ câu hỏi hay thảo luận nào, hãy để lại comment nhé. Chúc bạn thành công!
Nếu bạn thấy bài viết này hữu ích, hãy theo dõi và chia sẻ để nhận thêm nhiều thông tin bổ ích khác nhé!
source: viblo