

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
<a name="general-nodegroups"></a>

## Création de groupes de nœuds
<a name="_creating_nodegroups"></a>

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
<a name="_creating_a_nodegroup_from_a_config_file"></a>

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
<a name="_load_balancing"></a>

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
<a name="_nodegroup_selection_in_config_files"></a>

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
<a name="node-include"></a>
+ 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
<a name="_listing_nodegroups"></a>

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
<a name="_nodegroup_immutability"></a>

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.](#nodegroup-delete)

## Dimensionnement des groupes de nœuds
<a name="_scaling_nodegroups"></a>

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.

Le dimensionnement d'un groupe de nœuds géré s'effectue 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
<a name="_scaling_a_single_nodegroup"></a>

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
<a name="_scaling_multiple_nodegroups"></a>

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
<a name="nodegroup-delete"></a>

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

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

 Les [règles d'inclusion et d'exclusion](#node-include) 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
<a name="_other_features"></a>

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
<a name="_update_labels"></a>

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 utilisant`kubectl`, par exemple :

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

### Accès SSH
<a name="_ssh_access"></a>

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)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) 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
```