Nguồn: https://www.tuanh.net/blog/devops/readiness-and-liveness-checks-in-kubernetes
Trong Kubernetes, Readiness Probes (Kiểm tra Sẵn sàng) và Liveness Probes (Kiểm tra Sống) là hai cơ chế quan trọng giúp duy trì sự ổn định và hiệu suất cho các ứng dụng chạy trong môi trường container. Bài viết này sẽ giới thiệu chi tiết về hai khái niệm này và trình bày cách sử dụng chúng để triển khai hệ thống microservice trong Kubernetes.
1. Kiểm Tra Sẵn Sàng (Readiness Probe)
Readiness Probes cho phép Kubernetes xác định thời điểm nào một Pod đã sẵn sàng để xử lý lưu lượng truy cập. Nếu một Pod chưa sẵn sàng, nó sẽ không nhận lưu lượng từ một Service và không tham gia vào quá trình cân bằng tải. Để đảm bảo rằng ứng dụng trong Pod khả dụng để phục vụ yêu cầu, Kubernetes sẽ kiểm tra các điều kiện của Readiness Probe, chẳng hạn như yêu cầu HTTP GET, kiểm tra socket TCP hoặc thực thi các lệnh tùy chỉnh. Khi kiểm tra thành công, Pod sẽ được thêm vào danh sách các Pod sẵn sàng và có thể nhận lưu lượng.
Cấu hình Readiness Probe
Bạn có thể cấu hình Readiness Probe trong phần thông số kỹ thuật của container trong một deployment YAML như sau:
yaml
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
Các thông số bao gồm:
- path: Đường dẫn URL mà Kubernetes sẽ yêu cầu để xác định sự sẵn sàng.
/health
là một điểm cuối phổ biến và thường dùng cho các kiểm tra sức khỏe. - port: Số cổng mà ứng dụng đang lắng nghe yêu cầu.
- initialDelaySeconds: Thời gian chờ trước khi bắt đầu kiểm tra.
- periodSeconds: Thời gian giữa các lần kiểm tra liên tiếp.
2. Kiểm Tra Sống (Liveness Probe)
Liveness Probes được sử dụng để xác định khi nào một Pod bị treo hoặc gặp sự cố và cần được khởi động lại. Khi Liveness Probe thất bại, Kubernetes sẽ tự động khởi động lại Pod để khôi phục trạng thái hoạt động của nó. Các Liveness Probe cũng được cấu hình tương tự như Readiness Probe và có thể là yêu cầu HTTP GET, kiểm tra socket TCP hoặc lệnh tùy chỉnh.
Cấu hình Liveness Probe
Ví dụ cấu hình Liveness Probe trong deployment YAML:
yaml
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
Các tham số bao gồm:
- path: Điểm cuối HTTP mà Kubernetes sẽ gửi yêu cầu GET để kiểm tra tính sống của Pod.
- port: Cổng mà ứng dụng đang lắng nghe yêu cầu HTTP.
- initialDelaySeconds: Thời gian chờ trước khi bắt đầu kiểm tra tính sống.
- periodSeconds: Thời gian giữa các lần kiểm tra tính sống.
3. Các Điều Kiện Thường Dùng Để Kiểm Tra
3.1 Điều Kiện Đánh Giá Readiness
Một Readiness Probe kiểm tra xem ứng dụng đã sẵn sàng để phục vụ lưu lượng hay chưa. Một số điều kiện thường kiểm tra bao gồm:
- Kết nối cơ sở dữ liệu: Xác minh rằng ứng dụng có thể kết nối với cơ sở dữ liệu hoặc các dịch vụ khác mà nó phụ thuộc.
- Khởi tạo tài nguyên: Đảm bảo rằng tất cả các tài nguyên cần thiết đã được khởi tạo và sẵn sàng.
- Hoàn thành khởi động: Kiểm tra xem ứng dụng đã hoàn tất quá trình khởi động hay chưa.
- Dịch vụ phụ thuộc: Đảm bảo tất cả các dịch vụ bên ngoài mà ứng dụng cần đều đang hoạt động.
Ví dụ về mã kiểm tra readiness:
java
@GetMapping("/readiness")
public ResponseEntity<String> readiness() {
boolean dbReady = checkDatabaseConnection();
boolean externalServiceReady = checkExternalService();
if (dbReady && externalServiceReady) {
return ResponseEntity.ok("Application is ready");
} else {
return ResponseEntity.status(503).body("Application is not ready");
}
}
3.2 Điều Kiện Đánh Giá Liveness
Kiểm tra sống còn xác định liệu ứng dụng còn hoạt động hay không. Điều này đảm bảo rằng ứng dụng không rơi vào trạng thái không phản hồi. Các điều kiện bao gồm:
- Sức khỏe ứng dụng: Kiểm tra xem ứng dụng có đáp ứng yêu cầu không.
- Tài nguyên hệ thống: Kiểm tra các tài nguyên hệ thống để đảm bảo ứng dụng không gặp phải tình trạng cạn kiệt tài nguyên.
- Trạng thái tiến trình: Xác nhận rằng ứng dụng vẫn đang chạy và không gặp phải các vấn đề nghiêm trọng.
Ví dụ về mã kiểm tra liveness:
java
@GetMapping("/liveness")
public ResponseEntity<String> liveness() {
return ResponseEntity.ok("Application is alive");
}
4. Kết Luận
Tóm lại, việc sử dụng đúng cách Readiness Probe và Liveness Probe là rất quan trọng để đảm bảo sự ổn định và hiệu suất cho ứng dụng container. Kiểm tra Sẵn sàng giúp xác định thời điểm nào một Pod có thể nhận lưu lượng, trong khi Kiểm tra Sống đảm bảo rằng ứng dụng không ở trong trạng thái treo bằng cách khởi động lại các Pod khi cần. Cấu hình chính xác các kiểm tra này không chỉ cải thiện việc quản lý Pod mà còn nâng cao độ tin cậy và trải nghiệm của người dùng.
Hiểu và áp dụng những kỹ thuật này sẽ giúp bạn tối ưu hóa hệ thống Kubernetes, đảm bảo ứng dụng hoạt động mượt mà và phản hồi nhanh chóng cho người dùng.
source: viblo