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
--includeou--excludeest spécifié, tout est inclus -
si only
--includeest spécifié, seuls les groupes de nœuds correspondant à ces globs seront inclus -
si only
--excludeest spécifié, tous les groupes de nœuds qui ne correspondent pas à ces globs sont inclus -
si les deux sont spécifiés,
--excludeles 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