View a markdown version of this page

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 dernière version.

En outre, 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 et 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 êtes déjà prêt à associer des 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 et, –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 workers sauf celui des workers 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 des constructeurs avec :

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

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

Inclure et exclure des règles

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

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

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

  • si les deux sont spécifiés, --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ère 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 la mise à l'échelle), comme l'AMI ou le type d'instance d'un groupe de nœuds, vous devrez créer un nouveau groupe de nœuds avec les modifications souhaitées, déplacer la charge et supprimer l'ancien. Consultez la section Suppression et vidange de 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é, s'attend eksctl avec optimisme à ce que le groupe de nœuds soit redimensionné et revient 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 indicateur 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 basons uniquement sur les modifications apportées à l'ASG. Cela signifie que le ou les nœuds en cours removed/terminated ne sont pas explicitement vidés. Ce point pourrait être amélioré à l'avenir.

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

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 il doit être redimensionné. --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.

Dimensionnement 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 la mise à l'échelle 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 le nombre maximum de nœuds.

Supprimer et vider des 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 videra 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éconnecter 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 à vider 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 facilement être 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 groupes de publicKey nœuds publicKeyName et publicKeyPath dans la configuration de votre groupe de nœuds. Vous pouvez également utiliser AWS Systems Manager (SSM) pour accéder aux nœuds via 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