0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Chi Tiết Về Readiness và Liveness Checks Trong Kubernetes: Đảm Bảo Ứng Dụng Luôn Hoạt Động Ổn Định

Đăng vào 5 ngày trước

• 4 phút đọc

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 Copy
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 Copy
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 Copy
@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 Copy
@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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào