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
Vous avez créé un cluster ACS.
Vous êtes connecté à un cluster Kubernetes via kubectl.
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 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 :
|
jobs |
Une seule section
|
Installer le contrôleur CronHPA
Installez le contrôleur CronHPA ack-kubernetes-cronhpa-controller en utilisant l'une des méthodes suivantes.
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, cliquez sur Add-ons.
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.
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.
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez Workloads > Deployments.
Sur la page Deployments, localisez l'application concernée, puis cliquez sur Details dans la colonne Actions.
-
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.
-
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
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.
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.
-
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).RemarqueVous 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.scaleTargetRefpour identifier la cible de mise à l'échelle.CronHPA applique des règles crontab définies dans
spec.jobspour 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.
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 |
| 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 |
| 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 |
|
|
5/10 | 4 | 5 |
|
|
5/10 | 11 | 5 |
|
|
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.