Préparation de votre cluster à la mise à l'échelle automatique

Cloud privé virtuel Infrastructure classique

Avec le module complémentaire cluster-autoscaler, vous pouvez mettre automatiquement à l'échelle les pools de noeuds worker dans votre cluster Red Hat® OpenShift® on IBM Cloud® classique ou de VPC pour augmenter ou diminuer le nombre de noeuds worker dans le pool en fonction des besoins de redimensionnement de vos charges de travail planifiées. Ce module cluster-autoscaler complémentaire s'appuie sur le projet Cluster-Autoscaler de l' Kubernetes. Pour obtenir la liste des versions de module complémentaire prises en charge par version de cluster, voir Versions de module complémentaire de cluster prises en charge.

Vous ne pouvez pas activer l'autoscaler de cluster sur les pools de travailleurs qui utilisent des réservations.

Comprendre l'autoscaling

  • Le programme de mise à l'échelle automatique de cluster analyse régulièrement le cluster pour ajuster le nombre de noeuds worker dans les pools de noeuds worker qu'il gère en réponse à vos demandes de ressources de charge de travail et d'éventuels paramètres personnalisés que vous configurez, par exemple les intervalles d'analyse.

  • Toutes les minutes, le programme vérifie les situations suivantes.

    • Pods en attente d'une augmentation de capacité : un pod est considéré en attente lorsque il n'y a pas de ressources de calcul suffisantes pour qu'il soit planifié sur un noeud worker. Lorsque le programme de mise à l'échelle automatique de cluster détecte des pods en attente, il augmente le nombre de noeuds worker uniformément sur les zones pour satisfaire les demandes de ressources des charges de travail.
    • Noeuds worker sous-utilisés à réduire : par défaut, les noeuds worker qui s'exécutent avec moins de 50 % du total des ressources de calcul demandées sur une plage d'au moins 10 minutes et qui peuvent replanifier leurs charges de travail sur d'autres noeuds worker sont considérés comme sous-utilisés. Si le programme de mise à l'échelle automatique de cluster détecte des noeuds worker sous-utilisés, il réduit leur nombre un par un de sorte que vous disposiez uniquement des ressources de calcul dont vous avez besoin. Si vous le souhaitez, vous pouvez personnaliser le seuil d'utilisation par défaut de 50% sur une durée de 10 minutes.
  • L'analyse et l'augmentation ou la diminution de capacité se produit à intervalles réguliers. Selon le nombre de noeuds worker, ces opérations peuvent prendre plus de temps, par exemple 30 minutes.

  • L'autoscaler de cluster ajuste le nombre de nœuds de travail en tenant compte des demandes de ressources que vous définissez pour vos déploiements, et non de l'utilisation réelle des nœuds de travail. Si vos pods et vos déploiements ne demandent pas les quantités de ressources appropriées, vous devez ajuster leurs fichiers de configuration.

  • Le programme de mise à l'échelle automatique de cluster ne peut pas le faire à votre place. Gardez également à l'esprit que les nœuds de travail utilisent certaines ressources de calcul pour les fonctionnalités de base du cluster, les modules complémentaires par défaut et personnalisés, ainsi que les réserves de ressources.

  • En général, le programme de mise à l'échelle automatique de cluster calcule le nombre de noeuds worker dont votre cluster a besoin pour exécuter sa charge de travail. La mise à l'échelle du cluster dépend de plusieurs facteurs, notamment :

    • La taille minimale et maximale des noeuds worker par zone que vous avez définies.
    • Vos demandes de ressources de pods en attente et certaines métadonnées que vous associez à la charge de travail, telles que l'anti-affinité, les étiquettes permettant de placer les pods uniquement sur certaines variantes, ou les budgets de perturbation des pods.
    • Les pools de travailleurs gérés par l'autoscaler du cluster, éventuellement répartis sur plusieurs zones dans un cluster multizone.
  • Les versions antérieures de l'autoscaler de cluster s'appuyaient uniquement sur les nœuds de travail existants pour programmer les simulations. Par exemple, si un pool de travailleurs était réduit à 0 nœud, l'autoscaler ne disposait d'aucune information sur la capacité ou les étiquettes de ce pool, ce qui signifiait qu'il ne pouvait pas redimensionner le pool de travailleurs. Par conséquent, l'échelle zéro n'a pas été prise en charge.

  • À partir de la version 2.0.0, l'autoscaler crée un nœud modèle pour chaque pool de travailleurs. Ce modèle sert à fournir un modèle de CPU, de mémoire, d'étiquettes et de taints allouables d'un nouveau nœud dans le pool.

  • De plus, dans la version 2.0.0, deux nouveaux paramètres facultatifs sont disponibles dans l'espace kube-system``iks-ca-configmap de noms : OSReservedMemoryGi et OSReservedCPUMili.

    • Ces valeurs représentent la quantité de CPU et de mémoire que le système d'exploitation réserve sur chaque nœud de travail.
    • L'utilisation du noyau ne peut pas être ajustée à l'aide de ces valeurs, car celles-ci sont déjà définies.
    • L'autoscaler soustrait ces valeurs de la capacité du nœud lorsqu'il calcule les ressources allouables pour planifier les simulations.
    • Par défaut, l'autoscaler utilise les valeurs recommandées réservées par le système d'exploitation, mais les utilisateurs peuvent les remplacer pour ajuster la capacité pouvant être planifiée.

Pour plus d'informations, consultez la Questions fréquemment posées sur l'Autoscaler de cluster d' Kubernetes, notamment les rubriques Comment fonctionne la mise à l'échelle ascendante? et Comment fonctionne la mise à l'échelle descendante?.

Quelles sont les meilleures pratiques en matière de mise à l'échelle automatique?

Est-il possible de chager le fonctionnement de la mise à l'échelle par augmentation ou réduction ?

Oui, vous pouvez personnaliser les paramètres ou utiliser d'autres ressources d' Kubernetes s pour influencer le fonctionnement de la mise à l'échelle ascendante et descendante.

  • Pour la mise à l'échelle, vous pouvez personnaliser les valeurs du cluster autoscaler ConfigMap telles que scanInterval, expander, skipNodes, ou maxNodeProvisionTime. Passez en revue les moyens d'effectuer une mise à disposition excessive des noeuds worker afin de pouvoir effectuer une mise à l'échelle par augmentation des noeuds worker avant qu'un pool de noeuds worker soit à court de ressources. Vous pouvez également configurer des interruptions de budget de pod Kubernetes et des limites de priorité de pod afin d'affecter le fonctionnement de la mise à l'échelle par augmentation.

  • Pour réduire la capacité, personnalisez les valeurs de l'autoscaler du cluster ConfigMap, telles que scaleDownUnneededTime, scaleDownDelayAfterAdd, scaleDownDelayAfterDelete, ou scaleDownUtilizationThreshold.

Puis-je augmenter la taille minimale par zone pour déclencher une mise à l'échelle par augmentation de mon cluster pour cette taille ?

Non, le fait de définir une taille minimale (minSize) ne déclenche pas automatiquement une mise à l'échelle par augmentation. Il minSize s'agit d'un seuil garantissant que l'autoscaler du cluster ne réduise pas le nombre de nœuds de travail par zone en dessous d'un certain seuil.

  • Si votre cluster ne dispose pas encore de ce nombre de noeuds par zone, le programme de mise à l'échelle automatique de cluster n'effectue pas de mise à l'échelle par augmentation tant qu'aucune de vos demandes de ressource de charge de travail ne réclame davantage de ressources. Par exemple, si vous disposez d'un pool de noeuds worker avec un noeud worker pour trois zones (trois noeuds worker au total) et vous affectez au paramètre minSize la valeur 4 pour chaque zone, le programme de mise à l'échelle automatique de cluster ne met pas immédiatement à disposition trois autres noeuds worker par zone (12 noeuds worker au total). En revanche, la mise à l'échelle par augmentation est déclenchée par les demandes de ressource.
  • Si vous créez une charge de travail qui demande les ressources de 15 noeuds worker, le programme de mise à l'échelle automatique de cluster procède à une mise à l'échelle par augmentation du pool de noeuds worker pour répondre à la demande. Désormais, cela signifie minSize que l'autoscaler du cluster ne réduit pas le nombre de nœuds de travail à moins de quatre par zone, même si vous supprimez la charge de travail qui nécessite ce nombre.

Comment ce comportement est-il différent des pools de nœuds worker qui ne sont pas gérés par le programme de mise à l'échelle automatique de cluster ?

Lorsque vous créez un pool de noeuds worker, vous spécifiez le nombre de noeuds worker dont il dispose par zone. Le pool de noeuds worker conserve ce nombre de noeuds tant que vous n'avez pas effectué de redimensionnement ou de rééquilibrage dessus. Le pool de noeuds worker n'ajoute ou ne supprime pas de noeuds worker pour vous. Si vous disposez d'autres pods pouvant être planifiés, les pods restent à l'état En attente jusqu'à ce que vous redimensionniez le pool de noeuds worker. Lorsque vous activez le programme de mise à l'échelle automatique de cluster pour un pool de noeuds worker, les noeuds worker sont augmentés ou diminués, en réponse aux paramètres de spécification et aux demandes de ressources de vos pods. Vous n'avez pas besoin de redimensionner ou de rééquilibrer le pool de noeuds worker manuellement.

Comment fonctionne la mise à l'échelle automatique du GPU?

La mise à l'échelle automatique des nœuds de travail GPU n'est prise en charge qu'avec la version de cluster autoscaler 1.2.4 et les versions ultérieures, et uniquement avec les saveurs de nœuds de travail GPU NVIDIA. La mise à l'échelle se produit lorsqu'un pod passe en état d'attente en raison d'une pénurie de ressources GPU. L'autoscaler fait ensuite évoluer la grappe en ajoutant des nœuds supplémentaires. La réduction d'échelle se produit lorsque l'utilisation passe en dessous de la valeur configurée scaleDownGPUUtilizationThreshold. Dans ce cas, le nœud est considéré comme devant être réduit.

Puis-je effectuer une mise à l'échelle automatique de plusieurs pools de noeuds worker en même temps ?

Oui, après avoir installé le programme de mise à l'échelle automatique de cluster, vous pouvez choisir les pools de noeuds worker du cluster sur lesquels doit porter la mise à l'échelle automatique dans la mappe de configuration (configmap). Vous ne pouvez exécuter qu'un seul programme de mise à l'échelle automatique par cluster. Créez et activez la mise à l'échelle automatique sur les pools de noeuds worker autre que le pools de noeuds worker par défaut, car ce dernier comprend des composants système qui peuvent empêcher la mise à l'échelle par réduction automatique.

Comment puis-je être certain que le programme de mise à l'échelle automatique de cluster répond aux besoins en ressources de mon application ?

L'outil d'ajustement automatique de la taille du cluster adapte la taille de votre cluster en fonction des demandes de ressources liées à votre charge de travail. À ce titre, précisez les demandes de ressources pour tous vos déploiements, car ce sont ces demandes que l'autoscaler du cluster utilise pour calculer le nombre de nœuds de travail nécessaires à l'exécution de la charge de travail. N'oubliez pas que la mise à l'échelle automatique est basée sur l'utilisation de calcul demandé par vos configurations de charge de travail, et ne tient pas compte d'autres facteurs comme le coût des machines.

Puis-je réduire un pool de noeuds worker à zéro (0) noeud ?

Oui. À partir de la version de l'add-on Cluster 2.0.0 Autoscaler, vous pouvez réduire certains pools de travailleurs à zéro nœud.

Pourquoi est-ce utile?
La mise à l'échelle vers zéro permet de réduire les coûts lorsqu'aucune charge de travail n'est en cours d'exécution. L'autoscaler rétablit automatiquement les nœuds lorsque cela est nécessaire.
Comment cela fonctionne-t-il ?
Lorsqu'il n'y a pas de pods à exécuter, l'autoscaler peut réduire le pool de travailleurs à 0 nœuds. Si de nouveaux pods ont besoin de ressources, l'autoscaler redimensionne automatiquement le pool.
Que devez-vous faire?
  • Vérifiez la version de votre module complémentaire et assurez-vous que vous utilisez v2.0.0 ou une version ultérieure.
  • Définissez minSize = 0 pour le pool de travailleurs dans votre configuration d'autoscaler. Si vous avez activé les ALB publics, définissez minSize = 2 par zone pour une haute disponibilité.
Quelle est l'exigence en matière de quorum du cluster?
Notez que l'ensemble du cluster ne peut pas être réduit à zéro. Un nombre minimum de nœuds doit rester actif pour assurer le bon fonctionnement du cluster et maintenir etcd le quorum. Si ce quorum est atteint, vous pouvez réduire à zéro les autres pools de travailleurs.

Puis-je optimiser mes déploiements pour la mise à l'échelle automatique ?

Oui, vous pouvez ajouter plusieurs fonctions Kubernetes à votre déploiement afin d'ajuster la façon dont le programme de mise à l'échelle automatique de cluster prend en compte vos demandes de mise à l'échelle pour vos ressources.

  • Teintez votre pool de noeuds worker pour autoriser uniquement les déploiements ou les pods ayant la tolérance correspondante à être déployés sur votre pool de noeuds worker.
  • Ajoutez un libellé au pool de noeuds worker autre que le pool de noeuds worker par défaut. Ce libellé est utilisé dans votre configuration de déploiement pour spécifier nodeAffinity ou nodeSelector, ce qui limite les charges de travail pouvant être déployées sur les noeuds worker dans le pool de noeuds worker avec ce libellé.
  • Utilisez les budgets de perturbation des pods pour éviter toute replanification ou suppression soudaine de vos pods.
  • Si vous utilisez la priorité des pods, vous pouvez modifier le seuil de priorité afin de définir quels types de priorité déclenchent une augmentation de capacité. Par défaut, la limite de priorité est zéro (0).

Puis-je utiliser des taches et des tolérances avec des pools de noeuds worker mis à l'échelle automatiquement ?

Oui, mais prenez soin d'appliquer des taches au niveau du pool de noeuds worker de sorte que tous les noeuds worker existants et futurs puissent recevoir la même tache. Vous devez ensuite inclure une tolérance correspondante dans la configuration de vos charges de travail afin que celles-ci soient planifiées sur votre pool de travailleurs à dimensionnement automatique portant la marque correspondante. N'oubliez pas que si vous déployez une charge de travail qui n'est pas tolérée par le pool de noeuds worker auquel une tache est appliquée, l'augmentation des noeuds worker n'est pas envisagée et d'autres noeuds worker peuvent être commandés même si le cluster dispose d'une capacité suffisante. Cependant, le pool de noeuds worker auquel une tache est appliquée reste identifié comme sous-utilisé si l'utilisation de ses ressources est inférieure au seuil défini (par défaut 50 %) et est donc pris en compte dans la diminution.

Préparer les clusters pour l'autoscaling

Avant d'installer le module de programme de mise à l'échelle automatique du cluster IBM Cloud, vous pouvez configurer votre cluster afin de le préparer à la mise à l'échelle automatique.

Le module complémentaire de mise à l'échelle automatique de cluster n'est pas pris en charge pour les noeuds worker bare metal.

  1. Avant de commencer, installez la CLI et les plug-ins requis.

    • interface de ligne de commande IBM Cloud (ibmcloud)
    • Plug-in IBM Cloud Kubernetes Service (ibmcloud oc)
    • Plug-in IBM Cloud Container Registry (ibmcloud cr)
    • Kubernetes (kubectl)
  2. Créez un cluster standard.

  3. Accédez à votre cluster Red Hat OpenShift.

  4. Confirmez que vos données d'identification pour IBM Cloud Identity and Access Management sont stockées dans le cluster. Le programme de mise à l'échelle automatique de cluster utilise ce secret pour l'authentification des données d'identification. Si le secret est manquant, créez-le en redéfinissant des données d'identification.

    oc get secrets -n kube-system | grep storage-secret-store
    
  5. Planifiez la mise à l'échelle automatique d'un pool de noeuds worker autre que le pool de noeuds worker default, car le pool de noeuds worker default comprend des composants système qui peuvent empêcher automatiquement la mise à l'échelle par réduction. Ajoutez une étiquette au pool de travailleurs afin de pouvoir définir l'affinité des nœuds pour les charges de travail que vous souhaitez déployer sur le pool de travailleurs pour lequel la mise à l'échelle automatique est activée. Par exemple, vous pouvez inclure le libellé app: nginx. Sélectionnez l'une des options suivantes :

    • Créez un pool de noeuds worker VPC ou classique autre que le pool de noeuds worker default avec le libellé que vous souhaitez utiliser pour les charges de travail à exécuter sur le pool de noeuds worker automatiquement mis à l'échelle.
    • Ajoutez le libellé à un pool de noeuds worker existant autre que le pool de noeuds worker default.
  6. Confirmez que votre pool de noeuds worker dispose des libellés nécessaires pour la mise à l'échelle automatique. Dans la sortie, vous voyez le libellé ibm-cloud.kubernetes.io/worker-pool-id requis et le libellé que vous avez créé précédemment pour l'affinité des noeuds. Si vous ne voyez pas ces étiquettes, ajoutez un pool de travailleurs, puis ajoutez votre étiquette pour l'affinité des nœuds.

    ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels
    

    Exemple de sortie d'un pool de noeuds worker disposant de ce libellé.

    Labels:             ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5
    
  7. Appliquez une tache aux pools de noeuds worker que vous souhaitez mettre à l'échelle automatiquement de sorte que le pool de noeuds worker n'accepte pas les charges de travail à l'exception de celles que vous souhaitez exécuter sur le pool de noeuds worker mis à l'échelle automatiquement. Pour en savoir plus sur les taints et les tolerations, consultez la documentation de la communauté Kubernetes. Par exemple, vous pouvez définir une tache de use=autoscale:NoExecute. Dans cet exemple, le taint NoExecute expulse les pods qui ne disposent pas de la tolérance correspondant à ce taint.

Etapes suivantes

Après avoir préparé votre cluster, installez le module complémentaire cluster autoscaler.