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
--version
l'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'--wait
indicateur 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