Utilisation du composant d'ajustement automatique de grappe de Kubernetes
Découvrez comment utiliser le composant d'ajustement automatique de grappe de Kubernetes pour redimensionner automatiquement les groupes de noeuds gérés d'une grappe que vous avez créée à l'aide de Kubernetes Engine (OKE).
Vous ne pouvez pas utiliser le composant d'ajustement automatique de grappe de Kubernetes avec des groupes de noeuds virtuels.
Vous pouvez utiliser le composant d'ajustement automatique de grappe de Kubernetes pour dimensionner automatiquement les groupes de noeuds gérés d'une grappe en fonction des demandes de charge de travail des applications. Redimensionner automatiquement les groupes de noeuds d'une grappe permet de garantir la disponibilité des applications et d'optimiser les coûts.
Le composant d'ajustement automatique de grappe de Kubernetes :
- Ajoute des noeuds de travail à un groupe de noeuds lorsqu'un pod ne peut pas être programmé dans la grappe en raison de ressources insuffisantes.
- Supprime les noeuds de travail d'un groupe de noeuds lorsque les noeuds ont été sous-utilisés pendant une période prolongée et lorsque des pods peuvent être placés dans d'autres noeuds existants.
Le composant d'ajustement automatique de grappe de Kubernetes augmente ou diminue automatiquement la taille d'un groupe de noeuds en fonction des demandes de ressources, plutôt que de l'utilisation des ressources des noeuds du groupe.
Le composant d'ajustement automatique de grappe de Kubernetes fonctionne groupe de noeuds par groupe de noeuds. Vous utilisez un fichier de configuration pour spécifier les groupes de noeuds à cibler pour l'expansion et la contraction, les tailles minimales et maximales de chaque groupe de noeuds et la façon dont vous souhaitez que l'ajustement automatique soit effectué. Les groupes de noeuds non référencés dans le fichier de configuration ne sont pas gérés par le composant d'ajustement automatique de grappe de Kubernetes.
Pour permettre au composant d'ajustement automatique de grappe de Kubernetes de redimensionner automatiquement les groupes de noeuds d'une grappe en fonction des demandes de charge de travail des applications, incluez toujours des limites de demandes de ressources dans les spécifications des pods (requests:
sous resources:
).
Vous pouvez déployer le programme d'ajustement automatique de grappe de Kubernetes sur une grappe de Kubernetes de deux façons :
- en tant que programme autonome (voir Utilisation du composant d'ajustement automatique de grappe en tant que programme autonome)
- en tant que module complémentaire de grappe (voir Utilisation du composant d'ajustement automatique de grappe en tant que module complémentaire de grappe)
Pour plus d'informations sur le composant d'ajustement automatique de grappe de Kubernetes, voir Cluster Autoscaler et Frequently Asked Questions sur GitHub.
Recommandations liées à l'utilisation du composant d'ajustement automatique de grappe de Kubernetes dans les environnements de production
Tenez compte des recommandations suivantes :
- Faites en sorte qu'au moins un groupe de noeuds ne soit pas géré par le composant d'ajustement automatique de grappe de Kubernetes. Ce groupe de noeuds doit exécuter des modules complémentaires de grappe critiques et le composant d'ajustement automatique de grappe de Kubernetes lui-même. Notez également qu'il vous incombe d'ajuster manuellement tous les groupes de noeuds qui ne sont pas gérés par le composant d'ajustement automatique de grappe de Kubernetes.
- Définissez toujours plusieurs répliques pour le déploiement du composant d'ajustement automatique de grappe de Kubernetes dans le fichier de configuration. S'il n'y a qu'une réplique, qu'elle a fait l'objet d'une éviction et qu'elle ne peut pas être reprogrammée, le composant d'ajustement automatique de grappe de Kubernetes ne peut pas créer d'autres noeuds de travail.
- Dans le fichier de configuration, réglez
max-node-provision-time
à 25 minutes. En général, les nouveaux noeuds de travail sont provisionnés et passent à la condition Prêt dans un délai nettement inférieur à celui-ci. Cependant, lorsque de nombreux noeuds sont ajoutés à un groupe de noeuds en même temps, leur provisionnement peut prendre plus de temps. Notez que la console affiche un avertissement à côté des noeuds de travail dont l'initialisation prend plus de 20 minutes. Si les noeuds de travail passent à l'état Prêt dans le délai spécifié pourmax-node-provision-time
, vous pouvez ignorer cet avertissement. - Dans le fichier de configuration, vous spécifiez le nombre maximal de noeuds autorisés dans le groupe de noeuds. Assurez-vous que le nombre maximal de noeuds que vous spécifiez ne dépasse pas les limites de la location pour la forme de noeud de travail définie pour le groupe de noeuds. Le composant d'ajustement automatique de grappe de Kubernetes ne crée jamais un nombre de noeuds supérieur à la limite de la location. Si vous spécifiez un nombre supérieur à la limite de la location, le composant d'ajustement automatique de grappe de Kubernetes tente périodiquement de créer des noeuds supplémentaires, mais uniquement une fois que la limite de la location a été augmentée.
- Lors de la définition des grappes que vous souhaitez que le composant d'ajustement automatique de grappe de Kubernetes gère, nous vous recommandons de créer plusieurs groupes de noeuds et de spécifier un domaine de disponibilité pour chacun d'eux.
- Concevez toujours les applications de sorte qu'elles tolèrent les interruptions qui peuvent survenir lorsque le composant d'ajustement automatique de grappe de Kubernetes supprime des noeuds de travail ou déplace des pods vers un noeud de travail différent avant de supprimer un noeud de travail sous-utilisé. Par exemple, concevez des applications qui tirent parti des budgets d'interruption de pods (voir Définition d'un budget d'interruption pour votre application dans la documentation sur Kubernetes).
- Ne modifiez pas manuellement les groupes de noeuds gérés par le composant d'ajustement automatique de grappe de Kubernetes. Par exemple, n'ajoutez et ne supprimez pas de noeuds à l'aide de
kubectl
ni à l'aide de la console (ni de l'interface de ligne de commande ni de l'API Oracle Cloud Infrastructure). Le composant d'ajustement automatique de grappe de Kubernetes peut ignorer ces changement, ou ceux-ci peuvent modifier son comportement. Par exemple, si vous souhaitez supprimer tous les noeuds d'un groupe de noeuds géré par le composant d'ajustement automatique de grappe de Kubernetes, utilisez toujours ce composant pour ajuster le groupe de noeuds à zéro.
Paramètres du composant d'ajustement automatique de grappe de Kubernetes pris en charge
Vous contrôlez la façon dont le composant d'ajustement automatique de grappe de Kubernetes redimensionne les groupes de noeuds d'une grappe à l'aide des paramètres de configuration.
Les paramètres de configuration que vous pouvez utiliser pour gérer les grappes créées par Kubernetes Engine et la façon de les spécifier dépendent de l'utilisation du composant d'ajustement automatique de grappe de Kubernetes comme programme autonome ou comme module complémentaire de grappe.
-
Utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome
Si vous utilisez le composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome, vous spécifiez les paramètres de configuration dans un fichier de configuration.
Lorsque vous utilisez le composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome, vous ne pouvez pas utiliser les paramètres de configuration suivants pour gérer les grappes créées par le moteur de Kubernetes :
--node-autoprovisioning-enabled=true
: Non pris en charge.--gpu-total
: Non pris en charge (fournisseur de services infonuagiques spécifique).--expander=price
: Non pris en charge (fournisseur de services infonuagiques spécifique).
À l'exception des paramètres ci-dessus, vous pouvez utiliser n'importe lequel des paramètres de configuration lorsque vous utilisez le composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome.
Pour obtenir la liste complète des paramètres de configuration du composant d'ajustement automatique de grappe de Kubernetes, voir Quels sont les paramètres de l'autorité de certification? dans la FAQ du composant d'ajustement automatique de grappe sur GitHub.
-
Utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe
Si vous utilisez le composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe, vous spécifiez les paramètres de configuration dans un fichier de configuration (lors de l'utilisation de l'interface de ligne de commande ou de l'API) ou dans la console.
Lorsque vous utilisez le composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe, vous ne pouvez pas utiliser les paramètres de configuration suivants pour gérer les grappes créées par le moteur Kubernetes :
--node-autoprovisioning-enabled=true
: Non pris en charge.--gpu-total
: Non pris en charge (fournisseur de services infonuagiques spécifique).--expander=price
: Non pris en charge (fournisseur de services infonuagiques spécifique).
Notez qu'un certain nombre d'autres paramètres de configuration du composant d'ajustement automatique de grappe de Kubernetes ne sont pas non plus pris en charge lors de l'utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe.
Pour obtenir la liste des paramètres de configuration pris en charge lors de l'utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe, ainsi que les noms à utiliser lors de leur spécification, voir Arguments de configuration du composant d'ajustement automatique de grappe.
Notes sur le composant d'ajustement automatique de grappe de Kubernetes
Notez ce qui suit :
-
Le composant d'ajustement automatique de grappe de Kubernetes ajoute des noeuds aux groupes de noeuds existants dans les grappes existantes, ou en supprime. Plus précisément, notez que le composant d'ajustement automatique de grappe de Kubernetes :
- Ne crée pas de grappes supplémentaires.
- Ne crée pas de groupes de noeuds supplémentaires.
- Ne crée pas de pods supplémentaires. L'ajout de pods est pris en charge par le HPA (voir Utilisation du HPA (Horizontal Pod Autoscaler) de Kubernetes).
- N'ajuste pas les demandes et les limites d'UC et de mémoire pour les conteneurs. L'ajustement des limites est pris en charge par le VPA (voir Utilisation du VPA (Vertical Pod Autoscaler) de Kubernetes).
-
Lors de la suppression de noeuds de travail d'un groupe de noeuds, le composant d'ajustement automatique de grappe de Kubernetes respecte les règles de programmation et d'éviction des pods. Ces règles peuvent empêcher le composant d'ajustement automatique de grappe de Kubernetes de supprimer un noeud de travail.
Par exemple, par défaut, le composant d'ajustement automatique de grappe de Kubernetes ne supprime pas les noeuds qui exécutent des pods kube-system (tels que les pods coredns), à l'exception de DaemonSet ou des pods miroirs. Vous pouvez contrôler ce comportement à l'aide d'un paramètre de configuration (
skip-nodes-with-system-pods
lorsqu'il est déployé en tant que programme autonome,skipNodesWithSystemPods
lorsqu'il est déployé en tant que module complémentaire de grappe). Le paramètre est réglé àtrue
par défaut.Pour plus d'informations, voir What types of pods can prevent CA from removing a node? dans la FAQ du composant d'ajustement automatique de grappe sur GitHub.
- Si vous utilisez à la fois Terraform et le composant d'ajustement automatique de grappe de Kubernetes pour gérer les groupes de noeuds, notez que Terraform peut annuler les modifications apportées à la taille d'un groupe de noeuds par le composant d'ajustement automatique de grappe de Kubernetes. Pour éviter un tel comportement, utilisez la fonction Terraform
ignore_changes
, spécialement conçue pour les situations dans lesquelles Terraform partage la responsabilité de gérer un seul objet avec un autre processus. Par exemple, lorsqu'une ressource est créée en référence à des données qui pourraient changer à l'avenir, mais que vous ne voulez pas que ces modifications potentielles affectent la ressource après sa création. Le méta-argumentignore_changes
spécifie les attributs de ressource que Terraform doit ignorer lors de la planification des mises à jour de l'objet distant associé. Pour plus d'informations, voir Méta-Argument du cycle de vie dans la documentation sur Terraform.Par exemple :
resource "node_pool_1" "example" { # ... lifecycle { ignore_changes = [ node_config_details.size ] } }
- Lorsque vous mettez à niveau une grappe vers une nouvelle version de Kubernetes, il vous incombe de mettre à niveau manuellement le composant d'ajustement automatique de grappe de Kubernetes pour le rendre compatible avec la nouvelle version de Kubernetes. Le composant d'ajustement automatique de grappe de Kubernetes n'est pas mis à niveau automatiquement.
- Pour utiliser le composant d'ajustement automatique de grappe de Kubernetes pour gérer une grappe que vous avez créée avec Kubernetes Engine, la grappe doit exécuter certaines versions de Kubernetes comme suit :
- Lors de l'utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que programme autonome, les grappes doivent exécuter Kubernetes version 1.17 ou ultérieure.
- Lors de l'utilisation du composant d'ajustement automatique de grappe de Kubernetes en tant que module complémentaire de grappe, les grappes doivent exécuter Kubernetes version 1.25 ou ultérieure.
- Vous pouvez utiliser le composant d'ajustement automatique de grappe de Kubernetes avec des groupes de noeuds gérés, mais pas avec des groupes de noeuds virtuels.