Configure CronHPA para ajustar los valores de minReplicas y maxReplicas de HPA en lugar de escalar el Deployment directamente.
Si despliega HPA y CronHPA mediante la consola de ACK , ACK los configura automáticamente. Puede omitir este tema.
Funcionamiento
De forma predeterminada, tanto CronHPA como HPA establecen su scaleTargetRef en el mismo Deployment. El componente que actúa en último lugar sobrescribe el resultado del otro.
La solución consiste en establecer el scaleTargetRef de CronHPA en el recurso HPA en lugar del Deployment. Con esta configuración:
CronHPA lee los valores de
minReplicas,maxReplicasydesiredReplicasde HPA antes de actuar.CronHPA ajusta
minReplicasomaxReplicasde HPA según eltargetSizeprogramado.HPA escala los pods a través del Deployment y su ReplicaSet.
CronHPA nunca modifica el recuento de pods directamente, lo que elimina los conflictos.
Configuración de CronHPA para usar HPA como objetivo
En una configuración típica, CronHPA y HPA apuntan al mismo Deployment:
Plantilla de ejemplo de CronHPA (antes de la modificación)
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
jobs:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "0 */1 * * * *"
targetSize: 11
Plantilla de ejemplo de HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
minReplicas: 4
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Para resolver el conflicto, modifique scaleTargetRef en el manifiesto de CronHPA para que apunte al recurso HPA:
|
Campo |
Antes |
Después |
|
|
|
|
|
|
|
|
|
|
|
|
Ejemplo: CronHPA configurado para escalar el tráfico en horario laboral
Suponga que hpa-sample gestiona el tráfico de 09:00 a 17:00 (UTC+8). Configure CronHPA para escalar horizontalmente hacia afuera a las 09:00 y hacia adentro a las 17:00:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: autoscaling/v2
# Set the resource type to HPA.
kind: HorizontalPodAutoscaler
# Specify the name of the HPA resource.
name: hpa-sample
jobs:
- name: "scale-up-9am"
schedule: "0 0 9 * * * "
targetSize: 20
runOnce: false
- name: "scale-down-5pm"
schedule: "0 0 17 * * *"
targetSize: 3
runOnce: false
Reglas de compatibilidad
Cuando CronHPA tiene como objetivo a HPA, actúa como un límite dinámico inferior para las réplicas: aumenta minReplicas para escalar hacia afuera y reduce minReplicas para escalar hacia adentro, sin definir el recuento de pods directamente. HPA realiza el escalado dentro de esos límites según las métricas.
A continuación se muestra cómo interactúan CronHPA y HPA bajo cada condición de escalado.
Encabezados de la tabla:
HPA (mín./máx.): Valores de
minReplicasymaxReplicasde HPA.Objetivo de CronHPA: Valor de
targetSizedel job de CronHPA.Réplicas actuales: Recuento de pods en ejecución.
Réplicas finales: Recuento de pods después del escalado.
|
HPA (mín./máx.) |
Objetivo de CronHPA |
Réplicas actuales |
Réplicas finales |
Comportamiento |
|
1/10 |
5 |
5 |
5 |
El objetivo es igual al valor actual. |
|
1/10 |
4 |
5 |
5 |
El objetivo es menor que el valor actual. No se realiza escalado. |
|
1/10 |
6 |
5 |
6 |
El objetivo supera el valor actual. CronHPA establece |
|
5/10 |
4 |
5 |
5 |
El objetivo es menor que el valor actual. No se realiza escalado. CronHPA establece |
|
5/10 |
11 |
5 |
11 |
El objetivo supera |