Descripción de las configuraciones de escalabilidad
La versión v2
de la API de HPA permite ajustar algunos aspectos de su comportamiento con una nueva clave en el archivo YAML denominada spec.behavior
. Acepta otras dos claves: scaleDown
y scaleUp
, que definen cómo se comporta el HPA en el escalado y la reducción verticales.
Para cada una de estas claves, se permiten los siguientes valores:
Clave | Tipo | Descripción |
---|---|---|
stabilizationWindowSeconds | int | Período en el que el HPA busca métricas para calcular el estado deseado. El valor predeterminado de scaleDown es cinco minutos y no hay ningún período de estabilización para scaleUp . |
selectPolicy | cadena | Tipo de directiva seleccionado para usar. Este valor puede ser Min , Max o Disabled . |
directivas | matriz de HPAScalingPolicy |
Matriz de directivas que se pueden aplicar. |
El objeto HPAScalingPolicy
se define como un objeto con las claves siguientes:
Clave | Tipo | Descripción |
---|---|---|
type | string | Tipo de directiva, que puede ser Percent o Pods . |
value | int | Valor de la directiva. |
periodSeconds | int | Cantidad de tiempo necesaria para que se vuelva a aplicar esta directiva. |
Las directivas de escalado permiten ajustar la manera en que funciona el escalado. Por ejemplo, puede deshabilitar completamente la operación de reducción vertical estableciendo una directiva scaleDown
en Disabled
, como se muestra en el siguiente ejemplo:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: contoso-website
namespace: hpa-contoso
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: contoso-website
minReplicas: 1
maxReplicas: 10
behavior:
scaleDown:
selectPolicy: Disabled
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
También puede establecer el número de réplicas que se escalarán horizontalmente mediante la definición de una directiva scaleUp
, como la siguiente:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: contoso-website
namespace: hpa-contoso
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: contoso-website
minReplicas: 1
maxReplicas: 10
behavior:
scaleUp:
selectPolicy: Max
stabilizationWindowSeconds: 120
policies:
- type: Percent
value: 30
periodSeconds: 60
- type: Pods
value: 7
periodSeconds: 90
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
En este manifiesto, le indica al HPA que busque los últimos 120 segundos de métricas para calcular el estado deseado y obtener el máximo de estos valores. Una vez hecho esto, calcula el 30 % de los pods existentes, redondea este número y lo compara con el valor fijo de siete pods. Dado que se establece selectPolicy
en Max
, toma el mayor número de esos dos números y aplica esa directiva y, a continuación, espera periodSeconds
antes de volver a aplicar las directivas.
Por ejemplo, supongamos que el sitio web se ejecuta con 18 pods y, a continuación, experimenta un pico que dura aproximadamente 120 segundos. El estado deseado se halla calculando el 30 % de los pods que están actualmente en ejecución, que es 5,4 (redondeado a 6). Este valor se compara con el número de pods de la segunda directiva, que es 7. Dado que la clave selectPolicy
se establece en Max
, usa el valor mayor de esos dos valores. A continuación, el HPA se escala en 7 y espera 90 segundos antes de volver a escalar verticalmente. Si el pico continuó hasta 25 pods, el cálculo se realiza de nuevo. El 30 % de 25 pods es 7,5 (redondeado a 8), que es mayor que 7. Ahora el HPA crea ocho nuevos pods y espera 60 segundos antes de volver a escalarlos verticalmente.