Horizontal Pod Autoscaler là chế độ tự động scale (nhân bản POD) dựa vào mức độ hoạt động của CPU đối với POD, nếu một POD quá tải – nó có thể nhân bản thêm POD khác và ngược lại – số nhân bản dao động trong khoảng min, max cấu hình.
Ví dụ, với ReplicaSet rsapp trên đang thực hiện nhân bản có định 3 POD (replicas), nếu muốn có thể tạo ra một HPA để tự động scale (tăng giảm POD) theo mức độ đang làm việc CPU, có thể dùng lệnh dưới, với rs-prometheus là 1 replicaSet.
root@k8s-standalone:/home# kubectl autoscale rs rs-prometheus --max=2 --min=1
horizontalpodautoscaler.autoscaling/rs-prometheus autoscaled
Lệnh trên tạo ra một hpa có tên rs-prometheus, có dùng tham chiếu đến replicaSet có tên rs-prometheus để scale các POD với thiết lập min, max các POD
Để liệt kê các hpa gõ lệnh
root@k8s-standalone:/home# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
rs-prometheus ReplicaSet/rs-prometheus <unknown>/80% 1 2 2 71s
Để xóa hpa rs-prometheus sử dụng lệnh
root@k8s-standalone:/home# kubectl delete hpa/rs-prometheus
horizontalpodautoscaler.autoscaling "rs-prometheus" deleted
Để linh loạt và quy chuẩn, nên tạo ra HPA (HorizontalPodAutoscaler) từ cấu hình file yaml
, ví dụ như dưới, hpa sẽ hực hiện scale CPU hoạt động ở 50% so với CPU mà POD yêu cầu.
cat > ./prometheus_hpa.yaml << OEF
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: rs-prometheus-scaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: ReplicaSet
name: rs-prometheus
minReplicas: 5
maxReplicas: 10
#
targetCPUUtilizationPercentage: 50
OEF
Thực hiện lệnh để triển khai
root@k8s-standalone:/home# kubectl apply -f /home/prometheus_hpa.yaml
horizontalpodautoscaler.autoscaling/rs-prometheus-scaler created
Thực hiện kiểm tra lại hpa ta có kết quả
root@k8s-standalone:/home# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
rs-prometheus-scaler ReplicaSet/rs-prometheus <unknown>/50% 5 10 0 13s
Mặc dù có thể sử dụng ReplicaSet một cách độc lập, tuy nhiên trong triển khai hiện nay hay dùng Deployment, với Deployment nó sở hữu một ReplicaSet riêng. Bài tiếp theo sẽ nói về Deployment