Bài 27. Horizontal Pod Autoscaler - Tự động scale khi có nhiều người dùng
"Nếu hôm nay ứng dụng của bạn có 100 người dùng, nhưng ngày mai bỗng có 100.000 người truy cập thì sao?"
Đó chính là bài toán mà Horizontal Pod Autoscaler (HPA) được tạo ra để giải quyết.
Một tình huống quen thuộc
Giả sử bạn có một website bán vé xem phim.
Ngày thường, chỉ có khoảng vài trăm người truy cập nên 2 Pod là đủ để phục vụ.
2 Pod
├── Pod A
└── Pod B
Nhưng đúng 8 giờ tối, chương trình khuyến mãi bắt đầu.
Hàng chục nghìn người cùng truy cập.
CPU của hai Pod nhanh chóng tăng lên 95%.
Người dùng bắt đầu thấy website phản hồi chậm.
Nếu bạn không làm gì, hệ thống có thể bị quá tải.
Cách giải quyết thủ công
Bạn có thể tự tăng số lượng Pod:
kubectl scale deployment web --replicas=10
Lúc này hệ thống sẽ có 10 Pod thay vì 2.
Vấn đề là...
- Bạn phải phát hiện hệ thống đang quá tải.
- Bạn phải tự chạy lệnh.
- Khi lượng truy cập giảm, bạn lại phải giảm số Pod để tiết kiệm tài nguyên.
Rõ ràng cách này không phù hợp với môi trường production.
1. Horizontal Pod Autoscaler là gì?
Horizontal Pod Autoscaler (HPA) là thành phần giúp Kubernetes tự động tăng hoặc giảm số lượng Pod dựa trên mức sử dụng tài nguyên hoặc các chỉ số khác.
Ví dụ:
- CPU > 70% → tạo thêm Pod.
- CPU giảm xuống 30% → giảm bớt Pod.
Bạn không cần can thiệp thủ công.
2. HPA hoạt động như thế nào?
Người dùng tăng
│
▼
CPU tăng cao
│
▼
Horizontal Pod Autoscaler
│
▼
Deployment tăng replicas
│
▼
2 Pod → 4 Pod → 8 Pod
Khi lưu lượng giảm, HPA sẽ thực hiện điều ngược lại.
8 Pod
│
Traffic giảm
│
▼
4 Pod
│
▼
2 Pod
Ví dụ đơn giản
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 70
Ý nghĩa:
- Luôn có ít nhất 2 Pod.
- Tối đa 10 Pod.
- Nếu CPU trung bình vượt 70%, Kubernetes sẽ tạo thêm Pod.
3. Khi nào nên dùng HPA?
HPA rất phù hợp với các ứng dụng có lượng truy cập thay đổi theo thời gian, chẳng hạn:
- Website thương mại điện tử.
- API Backend.
- Ứng dụng SaaS.
- Dịch vụ xử lý request.
Thay vì chạy thật nhiều Pod cả ngày, Kubernetes chỉ tạo thêm Pod khi thực sự cần.
Tổng kết
Horizontal Pod Autoscaler giúp Kubernetes trở nên "thông minh" hơn.
Thay vì bạn phải liên tục theo dõi hệ thống và tự tăng giảm số lượng Pod, HPA sẽ làm điều đó tự động dựa trên tải thực tế.
Nó giúp ứng dụng chịu tải tốt hơn, đồng thời tiết kiệm tài nguyên khi lượng truy cập giảm.
Ở bài tiếp theo, chúng ta sẽ tìm hiểu một câu hỏi khác: Log của Pod được lưu ở đâu? Đó sẽ là bước đầu tiên để xây dựng một hệ thống Logging trong Kubernetes.
All rights reserved