Travailler avec des groupes de nœuds - Guide de l'utilisateur d'Eksctl

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Travailler avec des groupes de nœuds

Création de groupes de nœuds

Vous pouvez ajouter un ou plusieurs groupes de nœuds en plus du groupe de nœuds initial créé avec le cluster.

Pour créer un groupe de nœuds supplémentaire, utilisez :

eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
Note

--versionl'indicateur n'est pas pris en charge pour les groupes de nœuds gérés. Il hérite toujours de la version du plan de contrôle.

Par défaut, les nouveaux groupes de nœuds non gérés héritent de la version du plan de contrôle (--version=auto), mais vous pouvez spécifier une version différente, que vous pouvez également utiliser --version=latest pour forcer l'utilisation de la version la plus récente.

De plus, vous pouvez utiliser le même fichier de configuration que celui utilisé pour eksctl create cluster :

eksctl create nodegroup --config-file=<path>

Création d'un groupe de nœuds à partir d'un fichier de configuration

Les groupes de nœuds peuvent également être créés via une définition de cluster ou un fichier de configuration. À partir de l'exemple de fichier de configuration suivant et d'un cluster existant appelé dev-cluster :

# dev-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 managedNodeGroups: - name: ng-1-workers labels: { role: workers } instanceType: m5.xlarge desiredCapacity: 10 volumeSize: 80 privateNetworking: true - name: ng-2-builders labels: { role: builders } instanceType: m5.2xlarge desiredCapacity: 2 volumeSize: 100 privateNetworking: true

Les groupes de nœuds ng-1-workers ng-2-builders peuvent être créés à l'aide de cette commande :

eksctl create nodegroup --config-file=dev-cluster.yaml

Équilibrage de charge

Si vous avez déjà préparé l'association de groupes or/and cibles d'équilibreurs de charge classiques existants aux groupes de nœuds, vous pouvez les spécifier dans le fichier de configuration. Les groupes or/and cibles des équilibreurs de charge classiques sont automatiquement associés à l'ASG lors de la création de groupes de nœuds. Ceci n'est pris en charge que pour les groupes de nœuds autogérés définis via le champ. nodeGroups

# dev-cluster-with-lb.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 nodeGroups: - name: ng-1-web labels: { role: web } instanceType: m5.xlarge desiredCapacity: 10 privateNetworking: true classicLoadBalancerNames: - dev-clb-1 - dev-clb-2 asgMetricsCollection: - granularity: 1Minute metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupPendingInstances - GroupStandbyInstances - GroupTerminatingInstances - GroupTotalInstances - name: ng-2-api labels: { role: api } instanceType: m5.2xlarge desiredCapacity: 2 privateNetworking: true targetGroupARNs: - arn:aws:elasticloadbalancing:eu-north-1:01234567890:targetgroup/dev-target-group-1/abcdef0123456789

Sélection de groupes de nœuds dans les fichiers de configuration

Pour effectuer une delete opération create ou uniquement sur un sous-ensemble des groupes de nœuds spécifiés dans un fichier de configuration, deux indicateurs CLI acceptent une liste de globs, –0— par exemple : –1—

eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'

En utilisant l'exemple de fichier de configuration ci-dessus, on peut créer tous les groupes de nœuds de travail sauf celui des travailleurs avec la commande suivante :

eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers

Ou on pourrait supprimer le groupe de nœuds du constructeur avec :

eksctl delete nodegroup --config-file=dev-cluster.yaml --include=ng-2-builders --approve

Dans ce cas, nous devons également fournir la --approve commande pour supprimer réellement le groupe de nœuds.

Inclure et exclure des règles

  • si non --include ou si --exclude c'est spécifié, tout est inclus

  • si seul --include est spécifié, seuls les groupes de nœuds correspondant à ces globs seront inclus

  • si seul --exclude est spécifié, tous les groupes de nœuds qui ne correspondent pas à ces globs sont inclus

  • si les deux sont spécifiées, --exclude les règles ont priorité --include (c'est-à-dire que les groupes de nœuds qui correspondent aux règles des deux groupes seront exclus)

Répertorier les groupes de nœuds

Pour répertorier les détails d'un groupe de nœuds ou de tous les groupes de nœuds, utilisez :

eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>]

Pour répertorier un ou plusieurs groupes de nœuds au format YAML ou JSON, qui génèrent plus d'informations que la table de journal par défaut, utilisez :

# YAML format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=yaml # JSON format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=json

Immuabilité des groupes de nœuds

De par leur conception, les groupes de nœuds sont immuables. Cela signifie que si vous devez modifier quelque chose (autre que le dimensionnement) comme l'AMI ou le type d'instance d'un groupe de nœuds, vous devez créer un nouveau groupe de nœuds avec les modifications souhaitées, déplacer la charge et supprimer l'ancien. Consultez la section Supprimer et vider des groupes de nœuds.

Dimensionnement des groupes de nœuds

La mise à l'échelle des groupes de nœuds est un processus qui peut prendre jusqu'à quelques minutes. Lorsque l'--waitindicateur n'est pas spécifié, il s'attend à ce que le groupe de nœuds soit redimensionné de eksctl manière optimiste et renvoie le résultat dès que la demande d'API AWS a été envoyée. Pour faire eksctl attendre que les nœuds soient disponibles, ajoutez un --wait drapeau comme dans l'exemple ci-dessous.

Note

La mise à l'échelle d'un groupe de nœuds down/in (c'est-à-dire la réduction du nombre de nœuds) peut entraîner des erreurs car nous nous appuyons uniquement sur les modifications apportées à l'ASG. Cela signifie que le ou les nœuds removed/terminated ne sont pas explicitement drainés. Cela pourrait être un domaine à améliorer à l'avenir.

La mise à l'échelle d'un groupe de nœuds gérés est réalisée en appelant directement l'API EKS qui met à jour la configuration d'un groupe de nœuds gérés.

Dimensionnement d'un seul groupe de nœuds

Un groupe de nœuds peut être redimensionné à l'aide de la commande : eksctl scale nodegroup

eksctl scale nodegroup --cluster=<clusterName> --nodes=<desiredCount> --name=<nodegroupName> [ --nodes-min=<minSize> ] [ --nodes-max=<maxSize> ] --wait

Par exemple, pour étendre le groupe de nœuds ng-a345f4e1 cluster-1 à 5 nœuds, exécutez :

eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1

Un groupe de nœuds peut également être redimensionné en utilisant un fichier de configuration transmis --config-file et en spécifiant le nom du groupe de nœuds avec lequel le dimensionnement doit être effectué. --name Eksctl recherchera le fichier de configuration et découvrira ce groupe de nœuds ainsi que ses valeurs de configuration de dimensionnement.

Si le nombre de nœuds souhaité se situe NOT dans la plage du nombre minimum actuel et du nombre maximum actuel de nœuds, une erreur spécifique sera affichée. Ces valeurs peuvent également être transmises avec des drapeaux --nodes-min et --nodes-max respectivement.

Mise à l'échelle de plusieurs groupes de nœuds

Eksctl peut découvrir et redimensionner tous les groupes de nœuds trouvés dans un fichier de configuration transmis avec. --config-file

Comme pour le dimensionnement d'un seul groupe de nœuds, le même ensemble de validations s'applique à chaque groupe de nœuds. Par exemple, le nombre de nœuds souhaité doit être compris entre le nombre minimum et maximum de nœuds.

Suppression et vidange de groupes de nœuds

Pour supprimer un groupe de nœuds, exécutez :

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>

Les règles d'inclusion et d'exclusion peuvent également être utilisées avec cette commande.

Note

Cela drainera tous les pods de ce groupe de nœuds avant que les instances ne soient supprimées.

Pour ignorer les règles d'expulsion pendant le processus de vidange, exécutez :

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Tous les nœuds sont bouclés et tous les pods sont expulsés d'un groupe de nœuds lors de la suppression, mais si vous devez vider un groupe de nœuds sans le supprimer, exécutez :

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>

Pour débloquer un groupe de nœuds, exécutez :

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo

Pour ignorer les règles d'expulsion telles que PodDisruptionBudget les paramètres, exécutez :

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Pour accélérer le processus de vidange, vous pouvez spécifier --parallel <value> le nombre de nœuds à drainer en parallèle.

Autres fonctions

Vous pouvez également activer l'accès SSH, ASG et d'autres fonctionnalités pour un groupe de nœuds, par exemple :

eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access

Mettre à jour les étiquettes

Il n'existe aucune commande spécifique eksctl pour mettre à jour les étiquettes d'un groupe de nœuds, mais cela peut être facilement réalisé en utilisantkubectl, par exemple :

kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo

Accès SSH

Vous pouvez activer l'accès SSH pour les groupes de nœuds en configurant l'un des publicKeyName et publicKeyPath dans la configuration de publicKey votre groupe de nœuds. Vous pouvez également utiliser AWS Systems Manager (SSM) pour accéder à des nœuds en SSH, en configurant le groupe de nœuds avec : enableSsm

managedNodeGroups: - name: ng-1 instanceType: m5.large desiredCapacity: 1 ssh: # import public key from file publicKeyPath: ~/.ssh/id_rsa_tests.pub - name: ng-2 instanceType: m5.large desiredCapacity: 1 ssh: # use existing EC2 key publicKeyName: ec2_dev_key - name: ng-3 instanceType: m5.large desiredCapacity: 1 ssh: # import inline public key publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqZEdzvHnK/GVP8nLngRHu/GDi/3PeES7+Bx6l3koXn/Oi/UmM9/jcW5XGziZ/oe1cPJ777eZV7muEvXg5ZMQBrYxUtYCdvd8Rt6DIoSqDLsIPqbuuNlQoBHq/PU2IjpWnp/wrJQXMk94IIrGjY8QHfCnpuMENCucVaifgAhwyeyuO5KiqUmD8E0RmcsotHKBV9X8H5eqLXd8zMQaPl+Ub7j5PG+9KftQu0F/QhdFvpSLsHaxvBzA5nhIltjkaFcwGQnD1rpCM3+UnQE7Izoa5Yt1xoUWRwnF+L2TKovW7+bYQ1kxsuuiX149jXTCJDVjkYCqi7HkrXYqcC1sbsror someuser@hostname" - name: ng-4 instanceType: m5.large desiredCapacity: 1 ssh: # enable SSH using SSM enableSsm: true