1 概述
HorizontalPodAutoscaler 是水平 Pod 自動擴縮器的配置,它根據指定的指標自動管理實現 scale 子資源的任何資源的副本數。
2 Deployment自動擴容
2.1 什麼是PHA
Kubernetes實現Pod的擴縮容需要通過手動來實現,但線上的業務情況比較複雜,依賴於純手動的方式不太現實。所以希望系統能自動感知Pod的壓力來完成擴縮容,比如:當Pod的CPU達到了50%則擴容,當Pod的CPU低於50%自動縮容。
為此Kubernetes提供了這樣的一個資源對象HPA(Horizontal-Pod-Autoscaler),專門用來實現Pod的水平自動擴縮容。PHA通過監控分析一些控制器控制的所有Pod的負載變化情況來確定是否需要調整Pod的副本數量。
2.2 自動擴縮容算法
算法:副本數 = [當前副本數 * (當前指標 / 期望指標)]
當前指標:當前Pod已經到到了百分之多少的壓力;
期望指標:當Pod達到期望的指標百分比時就要進行擴容;
例如,當前副本為1,當前指標值為250%,而期望的指標值為50%,則副本數會擴大5倍。
2.3 動態擴縮容實踐
1、創建deployment
cat deploy-hpa.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-hpa
spec:
replicas: 1
selector:
matchLabels:
app: demoapp
template:
metadata:
labels:
app: demoapp
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
lifecycle:
postStart:
exec:
command: ["sh", "-c", "echo demoapp v1.0!! NodeName: ${node_name} PodIP: ${pod_ip} > /usr/share/nginx/html/index.html"]
env:
- name: pod_ip
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: node_name
valueFrom:
fieldRef:
fieldPath: spec.nodeName
resources:
requests:
cpu: 6m
limits:
cpu: 10m
2、創建負載均衡
apiVersion: v1
kind: Service
metadata:
name: svc-hpa
spec:
selector:
app: demoapp
ports:
- port: 80
targetPort: 80
3、創建hpa,設定cpu超過50%,則觸發自動創建Pod副本
cat hpa-demoapp.yml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-demoapp
spec:
maxReplicas: 5
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: deploy-hpa
targetCPUUtilizationPercentage: 50
4、模擬負載
頻繁請求
while sleep 0.01; do curl http://10.96.125.61;done
降低請求頻率
while sleep 1; do curl http://10.96.125.61;done