Giới thiệu
Chào các bạn, hôm nay mình sẽ hướng dẫn các bạn cách cấu hình health check cho ứng dụng chạy trên Kubernetes. Chúng ta sẽ tìm hiểu về các loại probe: Liveness, Readiness và Startup Probe. Việc này rất quan trọng trong quản lý và vận hành ứng dụng để đảm bảo chúng luôn ở trạng thái sẵn sàng phục vụ người dùng.
Tại sao cần Health Check?
Trong quá trình triển khai ứng dụng, việc đảm bảo rằng ứng dụng luôn hoạt động là cực kỳ quan trọng. Nếu ứng dụng gặp sự cố mà không được phát hiện kịp thời, người dùng có thể gặp phải lỗi 500 hoặc trải nghiệm không tốt. Chẳng hạn, nếu một ứng dụng cần thời gian dài để khởi động hoặc đang thực hiện kết nối với cơ sở dữ liệu, người dùng có thể nhận được thông báo lỗi trong khi ứng dụng vẫn chưa sẵn sàng phục vụ.
Kubernetes cung cấp giải pháp cho các vấn đề này thông qua việc cấu hình health check, giúp tự động thực hiện các hành động cần thiết, chẳng hạn như khởi động lại ứng dụng khi phát hiện lỗi.
Chuẩn bị
Trước khi bắt đầu, bạn cần truy cập vào cluster Kubernetes của mình. Chúng ta sẽ sử dụng một ứng dụng đơn giản để minh họa. Hãy tạo một thư mục mới tên là k8s-healthcheck
và tạo file deployment.yml
với nội dung sau:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-healthcheck
spec:
selector:
matchLabels:
app: demo-healthcheck
template:
metadata:
labels:
app: demo-healthcheck
spec:
containers:
- name: myapp
image: maitrungduc1410/viblo-k8s-healthcheck
imagePullPolicy: Always
ports:
- containerPort: 3000
name: myport
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
Tiếp theo, tạo file svc.yml
để định nghĩa service:
yaml
apiVersion: v1
kind: Service
metadata:
name: demo-healthcheck
spec:
selector:
app: demo-healthcheck
ports:
- name: mysvc
protocol: TCP
port: 80
targetPort: myport
type: LoadBalancer
Sau khi tạo xong hai file này, áp dụng chúng vào Kubernetes:
bash
kubectl apply -f deployment.yml --kubeconfig=./kubernetes-config
kubectl apply -f svc.yml --kubeconfig=./kubernetes-config
Liveness Probe
Liveness Probe giúp kiểm tra xem ứng dụng có đang hoạt động hay không. Nếu không, Kubernetes sẽ tự động khởi động lại ứng dụng. Để sử dụng Liveness Probe, chúng ta cần cập nhật file deployment.yml
như sau:
yaml
livenessProbe:
httpGet:
path: /liveness
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
Áp dụng lại file để cập nhật cấu hình:
bash
kubectl apply -f deployment.yml --kubeconfig=./kubernetes-config
Startup Probe
Startup Probe nhằm đảm bảo rằng ứng dụng đã khởi động thành công. Nếu ứng dụng mất nhiều thời gian để khởi động, bạn có thể sử dụng Startup Probe để kiểm tra. Cấu hình như sau:
yaml
startupProbe:
httpGet:
path: /healthz
port: myport
failureThreshold: 30
periodSeconds: 10
Readiness Probe
Readiness Probe kiểm tra xem ứng dụng đã sẵn sàng để nhận lưu lượng hay chưa. Nếu ứng dụng chưa sẵn sàng, Kubernetes sẽ xóa pod khỏi service endpoint. Dưới đây là cấu hình cho Readiness Probe:
yaml
readinessProbe:
httpGet:
path: /readiness
port: myport
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 1
successThreshold: 3
So Sánh Giữa Các Loại Probe
Loại Probe | Mục Đích | Hành Động Khi Failed | Giai Đoạn Thực Hiện | Ảnh Hưởng Đến Traffic |
---|---|---|---|---|
Liveness Probe | Đảm bảo container luôn chạy | Khởi động lại container | Suốt vòng đời của container | Không ảnh hưởng trực tiếp |
Startup Probe | Đảm bảo container đã khởi động thành công | Không có hành động cụ thể | Chỉ khi khởi động | Không ảnh hưởng trực tiếp |
Readiness Probe | Đảm bảo container sẵn sàng tiếp nhận traffic | Xóa pod khỏi Service Endpoint | Suốt vòng đời của container | Ảnh hưởng đến traffic |
Kết Luận
Trong bài viết này, chúng ta đã tìm hiểu cách cấu hình health check cho ứng dụng trên Kubernetes với các loại probe khác nhau và ứng dụng của chúng. Việc sử dụng đúng các loại probe giúp đảm bảo ứng dụng luôn hoạt động hiệu quả và phục vụ tốt nhất cho người dùng.
Chúc các bạn thành công và hẹn gặp lại trong những bài viết tiếp theo!
source: viblo