Configurez CronHPA pour ajuster les paramètres minReplicas et maxReplicas de l'HPA, au lieu de mettre à l'échelle directement le Deployment.
Si vous déployez HPA et CronHPA via la console ACK , ACK les configure automatiquement. Ignorez cette rubrique.
Fonctionnement
Par défaut, CronHPA et HPA définissent tous deux leur scaleTargetRef sur le même Deployment. La dernière action écrase le résultat de la précédente.
La solution : définissez le scaleTargetRef de CronHPA sur la ressource HPA plutôt que sur le Deployment. Avec cette configuration :
CronHPA lit les valeurs
minReplicas,maxReplicasetdesiredReplicasde l'HPA avant d'agir.CronHPA ajuste les paramètres
minReplicasoumaxReplicasde l'HPA en fonction de latargetSizeplanifiée.L'HPA met à l'échelle les pods via le Deployment et son ReplicaSet.
CronHPA ne modifie jamais directement le nombre de pods, ce qui élimine les conflits.
Configurer CronHPA pour cibler HPA
Dans une configuration classique, CronHPA et HPA pointent tous deux vers le même Deployment :
Exemple de modèle CronHPA (avant modification)
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
Exemple de modèle 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
Pour résoudre le conflit, modifiez le champ scaleTargetRef dans votre manifeste CronHPA afin qu'il pointe vers la ressource HPA :
| Champ | Avant | Après |
|---|---|---|
apiVersion |
apps/v1 |
autoscaling/v2 |
kind |
Deployment |
HorizontalPodAutoscaler |
name |
nginx-deployment-basic |
hpa-sample |
Exemple : CronHPA configuré pour adapter la capacité au trafic des heures ouvrables
Supposons que hpa-sample gère le trafic de 09:00 à 17:00 (UTC+8). Configurez CronHPA pour augmenter la capacité à 09:00 et la réduire à 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
Règles de compatibilité
Lorsque CronHPA cible HPA, il agit comme un plancher dynamique pour les réplicas : il augmente minReplicas pour monter en charge et diminue minReplicas pour descendre en charge, sans définir directement le nombre de pods. L'HPA effectue la mise à l'échelle dans ces limites en fonction des métriques.
Le tableau suivant illustre l'interaction entre CronHPA et HPA dans chaque condition de mise à l'échelle.
En-têtes du tableau :
HPA (min/max) :
minReplicas/maxReplicasde l'HPA.CronHPA souhaité :
targetSizede la tâche CronHPA.Réplicas actuels : Nombre de pods en cours d'exécution.
Réplicas finaux : Nombre de pods après la mise à l'échelle.
| HPA (min/max) | CronHPA souhaité | Réplicas actuels | Réplicas finaux | Comportement |
|---|---|---|---|---|
| 1/10 | 5 | 5 | 5 | La valeur souhaitée est égale à la valeur actuelle. Les paramètres minReplicas et maxReplicas restent inchangés. Aucune mise à l'échelle. |
| 1/10 | 4 | 5 | 5 | La valeur souhaitée est inférieure à la valeur actuelle. Aucune mise à l'échelle. |
| 1/10 | 6 | 5 | 6 | La valeur souhaitée dépasse la valeur actuelle. CronHPA définit minReplicas sur 6. L'HPA met à l'échelle sur 6. Nouveau HPA (min/max) : 6/10. |
| 5/10 | 4 | 5 | 5 | La valeur souhaitée est inférieure à la valeur actuelle. Aucune mise à l'échelle. CronHPA définit minReplicas sur 4. Nouveau HPA (min/max) : 4/10. |
| 5/10 | 11 | 5 | 11 | La valeur souhaitée dépasse maxReplicas. CronHPA définit les paramètres minReplicas et maxReplicas sur 11. L'HPA met à l'échelle sur 11. Nouveau HPA (min/max) : 11/11. |