Tous les produits
Search
Centre de documentation

Container Compute Service:Mise à l'échelle planifiée (CronHPA)

Dernière mise à jour :Aug 12, 2026

Pour optimiser l'utilisation des ressources, réduire les coûts et éviter le gaspillage, Container Compute Service (ACS) fournit le composant ack-kubernetes-cronhpa-controller. Ce composant met automatiquement les ressources à l'échelle selon des plannings prédéfinis. Cette rubrique explique comment utiliser Cron Horizontal Pod Autoscaler (CronHPA) pour adapter la charge de vos workloads dans un cluster ACS selon un planning. Elle détaille également comment faire interagir CronHPA et Horizontal Pod Autoscaler (HPA) sans conflit.

Prérequis

Informations générales

Le contrôleur ack-kubernetes-cronhpa-controller met les workloads d'un cluster à l'échelle selon un planning de type cron. CronHPA fonctionne avec tout objet Kubernetes prenant en charge la sous-ressource scale, tel qu'un Deployment ou un StatefulSet. Pour plus d'informations, consultez le dépôt kubernetes-cronhpa-controller.

Le tableau suivant décrit les paramètres de la configuration CronHPA.

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
  namespace: default 
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: nginx-deployment-basic
   excludeDates:
   # exclude November 15th
   - "* * * 15 11 *"
   # exclude every Friday 
   - "* * * * * 5"
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Paramètre

Description

scaleTargetRef

scaleTargetRef désigne l'objet cible de la mise à l'échelle. Si les sous-ressources de cet objet sont éligibles, vous pouvez activer CronHPA pour celui-ci.

excludeDates

La valeur de excludeDates doit être un tableau de dates. Les tâches de mise à l'échelle ne s'exécutent pas aux dates spécifiées dans excludeDates.

Remarque

La plus petite unité temporelle excluable est le Day.

Le format est " ", correspondant à « <Secondes> <Minutes> <Heures> <Jour du mois> <Mois> <Jour de la semaine> ».

Par exemple, pour empêcher l'exécution des tâches de mise à l'échelle le 15 novembre, définissez excludeDates avec la valeur suivante :

excludeDates:
  - "* * * 15 11 *"

jobs

Une seule section spec peut contenir plusieurs tâches CronHPA. Chaque tâche se configure à l'aide des champs suivants :

  • name : permet de distinguer les tâches CronHPA. Le name de chaque tâche CronHPA doit être unique au sein de la configuration.

  • schedule : définit le planning de mise à l'échelle, similaire à une crontab. Le contrôleur kubernetes-cronhpa-controller utilise une bibliothèque Golang pour prendre en charge diverses règles. Pour plus d'informations, voir go-cron. Les expressions cron doivent respecter les règles suivantes, faute de quoi leur création échouera.

    Créez les expressions cron en suivant ces règles :

    Field name   | Mandatory?  | Allowed values  | Allowed special characters
      ----------   | ---------- | --------------  | --------------------------
      Seconds      | Yes        | 0-59            | * / , -
      Minutes      | Yes        | 0-59            | * / , -
      Hours        | Yes        | 0-23            | * / , -
      Day of month | Yes        | 1-31            | * / , - ?
      Month        | Yes        | 1-12 or JAN-DEC | * / , -
      Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?
  • targetSize : nombre de pods souhaité lors de la mise à l'échelle planifiée.

  • runOnce : si vous définissez runOnce sur true, la tâche ne s'exécute qu'une seule fois avant de se terminer.

Installer le contrôleur CronHPA

Installez le contrôleur CronHPA ack-kubernetes-cronhpa-controller en utilisant l'une des méthodes suivantes.

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, cliquez sur Add-ons.

  3. Sur la page Add-ons, cliquez sur l'onglet Manage Applications. Localisez ack-kubernetes-cronhpa-controller, cliquez sur Install, puis confirmez en cliquant sur OK dans la boîte de dialogue qui s'affiche.

Remarque

Si CronHPA n'est plus nécessaire, désinstallez son contrôleur. Pour plus d'informations sur la désinstallation de ack-kubernetes-cronhpa-controller, voir Gérer les add-ons.

Créer des tâches CronHPA

Avant de créer et d'exécuter des tâches CronHPA pour votre application, assurez-vous que le contrôleur CronHPA fonctionne normalement dans votre cluster et qu'une seule tâche HPA existe pour cette application. Pour savoir comment faire interagir CronHPA et HPA sans conflit, voir Faire interagir CronHPA et HPA sans conflit. Créez des tâches CronHPA en utilisant l'une des méthodes suivantes :

Méthode 1 : Créer une tâche lors de la création de l'application

Dans l'assistant de création d'application, sur la page Advanced, accédez à la section Scaling. Sélectionnez Enable en regard de CronHPA. Pour les étapes détaillées de création d'une application, voir Créer un workload sans état (Deployment) ou Créer un workload avec état (StatefulSet).

Si un message indique que le composant ack-kubernetes-cronhpa-controller n'est pas installé, cliquez sur Install pour l'installer.

La console ACK vérifie automatiquement la présence du composant CronHPA. S'il est absent, un bouton Install apparaît. Une fois le composant CronHPA installé, les paramètres de configuration de la tâche de mise à l'échelle planifiée s'affichent. Le tableau suivant décrit ces paramètres.

Paramètre

Description

Saisissez un nom pour la tâche CronHPA. Ce nom doit être unique.

Desired Number of Replicas

Nombre de réplicas de pods à atteindre lors de la mise à l'échelle planifiée.

Scaling Schedule

Définit le planning de mise à l'échelle.

Pour plus d'informations sur la configuration du planning d'une tâche CronHPA, voir predefined-schedules.

Méthode 2 : Créer une tâche pour une application existante

L'exemple suivant illustre la création d'une tâche CronHPA pour une application existante, ici une application sans état.

  1. Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Workloads > Deployments.

  3. Sur la page Deployments, localisez l'application concernée, puis cliquez sur Details dans la colonne Actions.

  4. Cliquez sur l'onglet Pod Scaling et configurez la tâche de mise à l'échelle planifiée.

    • Si le composant CronHPA n'est pas installé, un bouton Install apparaît. Cliquez sur Install puis passez à l'étape suivante.

    • Si le contrôleur CronHPA est déjà installé, suivez les étapes ci-dessous.

  5. Cliquez sur Create à droite de CronHPA. Dans la boîte de dialogue Create, définissez les paramètres de la tâche.

    Le tableau suivant décrit ces paramètres.

    Paramètre

    Description

    Job Name

    Saisissez un nom pour la tâche CronHPA. Ce nom doit être unique.

    Desired Number of Replicas

    Nombre de réplicas de pods à atteindre lors de la mise à l'échelle planifiée.

    Scaling Schedule

    Définit le planning de mise à l'échelle. Pour plus d'informations sur la configuration du planning d'une tâche CronHPA, voir predefined-schedules.

Créer ou modifier des tâches CronHPA

  1. Suivez les étapes décrites dans Créer une tâche CronHPA de mise à l'échelle planifiée pour accéder à la page Pod Scaling.

  2. Dans l'onglet Pod Scaling, sous la section CronHPA, localisez la tâche cible et cliquez sur Add or Modify Job dans la colonne Actions.

  3. Dans la boîte de dialogue Edit, cliquez sur Add Task pour créer une nouvelle tâche, ou sélectionnez une tâche existante pour la modifier. Une fois terminé, cliquez sur OK.

    Le formulaire de configuration comprend les champs suivants : Job Name, Desired Number of Replicas et Scaling Schedule (ce dernier offrant cinq options : By Hour, By Day, By Week, By Month ou cron expression). Si vous choisissez cron expression, saisissez-la dans le champ prévu au format : Seconds Minutes Hours Day-of-month Month Day-of-week (par exemple, 1 2 3 4 * * correspond au 4 de chaque mois à 03:02:01).

    Remarque

    Vous pouvez supprimer une tâche CronHPA. Dans la boîte de dialogue Edit, les tâches existantes apparaissent sous forme de tags. Supprimez une tâche en cliquant sur l'icône de suppression située à côté de son nom. Pour ajouter une nouvelle tâche, saisissez un nom dans le champ Job Name et cliquez sur Add Job. Validez vos modifications en cliquant sur OK.

Modèles CronHPA et HPA

CronHPA

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	
	

HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-deployment-basic-hpa
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	
	

Faire interagir CronHPA et HPA sans conflit

CronHPA et HPA s'appliquent aux workloads tels que les Deployments ou les StatefulSets. Leur utilisation simultanée pour mettre un workload à l'échelle peut entraîner des conflits. Pour résoudre ce problème, CronHPA permet de cibler l'objet HPA lui-même, garantissant ainsi la compatibilité avec les fonctionnalités HPA.

Les configurations de CronHPA et HPA révèlent les éléments suivants :

  • Tous deux utilisent le champ spec.scaleTargetRef pour identifier la cible de mise à l'échelle.

  • CronHPA applique des règles crontab définies dans spec.jobs pour planifier la mise à l'échelle des réplicas.

  • HPA déclenche les activités de mise à l'échelle en fonction de l'utilisation des ressources.

Lorsque CronHPA et HPA sont tous deux déployés, ils risquent de mettre à l'échelle les pods de la même application spécifiée par scaleTargetRef. Indépendants et ignorant leurs états respectifs, le contrôleur CronHPA et le contrôleur HPA ajustent séparément les pods de l'application. La dernière activité de mise à l'échelle écrase alors la précédente.

Solution de compatibilité entre CronHPA et HPA

Comme mentionné précédemment, le conflit se résout si CronHPA connaît l'état actuel de HPA. Pour y parvenir, ACK configure le champ scaleTargetRef de CronHPA afin qu'il pointe vers l'objet HPA lui-même plutôt que vers l'objet workload final. Lors d'une opération de mise à l'échelle, CronHPA identifie d'abord le véritable scaleTargetRef via l'objet HPA, puis ajuste l'objet workload en conséquence. Cela empêche les contrôleurs de s'écraser mutuellement et garantit une mise à l'échelle cohérente et prévisible.

image

Le modèle YAML suivant présente les configurations permettant à CronHPA et HPA d'interagir sans conflit :

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: cronhpa-sample
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      name:  nginx-deployment-basic-hpa
   jobs:
   - name: "scale-down"
     schedule: "30 */1 * * * *"
     targetSize: 1
     runOnce: false
   - name: "scale-up"
     schedule: "0 */1 * * * *"
     targetSize: 3
     runOnce: false

Selon la définition CronHPA, un objet CronHPA peut déterminer les valeurs de spec.minReplicas, spec.maxReplicas et status.desiredReplicas dans le HPA. Il connaît également le nombre actuel de réplicas du workload spécifié par spec.scaleTargetRef. CronHPA interagit avec HPA en ajustant ce dernier. Il compare son nombre cible de réplicas au nombre actuel pour décider s'il doit mettre le workload à l'échelle ou augmenter la limite supérieure du HPA. De même, il utilise la plus petite valeur entre son nombre cible et la configuration HPA pour déterminer s'il faut modifier la limite inférieure du HPA.

Le tableau suivant détaille les règles permettant à CronHPA et HPA d'interagir sans conflit.

HPA (min/max)

CronHPA

Deployment

Résultat de la mise à l'échelle

Description

1/10

5

5

  • HPA (min/max): 1/10

  • Deployment: 5

Si le nombre de pods souhaité par CronHPA est égal au nombre actuel, CronHPA ne modifie ni le maximum ni le minimum de pods dans la configuration HPA. Aucune activité de mise à l'échelle n'est déclenchée.

1/10

4

5

  • HPA (min/max): 1/10

  • Deployment: 5

Lorsque le nombre de pods souhaité par CronHPA est inférieur au nombre actuel, aucune activité de mise à l'échelle n'est déclenchée.

1/10

6

5

  • HPA (min/max): 6/10

  • Deployment: 6

  • Quand le nombre de pods souhaité par CronHPA dépasse le nombre actuel, CronHPA ajoute des pods pour atteindre le nombre souhaité.

  • Si le nombre de pods souhaité par CronHPA excède la valeur minReplicas de la configuration HPA, CronHPA modifie cette valeur minReplicas.

5/10

4

5

  • HPA (min/max): 4/10

  • Deployment: 5

  • Dans le cas où le nombre de pods souhaité par CronHPA est inférieur au nombre actuel, aucune activité de mise à l'échelle n'est déclenchée.

  • Si le nombre de pods souhaité par CronHPA est inférieur à la valeur minReplicas de la configuration HPA, CronHPA ajuste cette valeur minReplicas.

5/10

11

5

  • HPA (min/max): 11/11

  • Deployment: 11

  • Si le nombre de pods souhaité par CronHPA est supérieur au nombre actuel, CronHPA ajoute des pods pour atteindre le nombre souhaité.

  • Lorsque le nombre de pods souhaité par CronHPA dépasse la valeur maxReplicas de la configuration HPA, CronHPA modifie cette valeur maxReplicas.

Les paramètres du tableau sont décrits ci-dessous :

  • HPA (min/max) : nombres minimum et maximum de pods définis dans la configuration HPA.

  • CronHPA : nombre de pods souhaité spécifié dans la configuration CronHPA.

  • Deployment : nombre de réplicas de l'application avant la mise à l'échelle.

Plutôt que de modifier directement le nombre de pods du Deployment, CronHPA déclenche le HPA pour effectuer la mise à l'échelle. Cette approche résout le conflit entre CronHPA et HPA.