Ejemplo de HPA
Referencia La
cantidad de pods en ReplicationController, Deployment, ReplicaSet o StatefulSet se puede escalar automáticamente según el uso de la CPU
# 运行 php-apache 服务器并暴露服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
创建 Horizontal Pod Autoscaler
HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右(由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核)
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
kubectl get hpa
增加负载
启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
容器内存使用到达上限,开始扩容,Hpa会根据Pod的CPU使用率动态调节Pod的数量
停止负载
终止load-generator
1.Proceso de expansión de
HPA : recopile todo el Pod HPA bajo el control del uso reciente de la CPU (utilización de la CPU)
Límite de CPU comparativo (CPUUtilización) en la condición de expansión de
las instancias de ajustes registrados (que deben cumplirse sin exceder el número máximo de instancias mínimas / instancias)
cada 30 segundos para hacer un juicio de expansión automático
El método de cálculo de la utilización de la CPU es usar el uso de la CPU (el promedio del último minuto, que se puede obtener directamente a través de métricas) dividido por la solicitud de la CPU (aquí la solicitud de la CPU es el núcleo del uso de la CPU que cuando creamos el contenedor Number) para obtener un valor promedio, que puede entenderse como: el porcentaje promedio de uso del núcleo de CPU de cada pod.
2. Algoritmo de escala de HPA:
fórmula de cálculo: TargetNumOfPods = ceil (sum (CurrentPodsCPUUtilization) / Target)
ceil () significa tomar el número entero más cercano mayor o igual a un cierto número
y enfriar durante 3 minutos después de cada expansión, y luego expandir nuevamente, mientras se encoge Tienes que esperar 5 minutos después.
Cuando la tasa de uso actual de la CPU de Pod está cerca de la tasa de uso objetivo, no se activará la expansión o la reducción:
Condición de activación: avg (CurrentPodsConsumption) / Target> 1.1 o <0.9
# 多项度量指标
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi
type: AverageValue