

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Trabaja con grupos de nodos
<a name="general-nodegroups"></a>

## Crear grupos de nodos
<a name="_creating_nodegroups"></a>

Puede añadir uno o más grupos de nodos además del grupo de nodos inicial creado junto con el clúster.

Para crear un grupo de nodos adicional, usa:

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

**nota**  
 `--version`el indicador no es compatible con los grupos de nodos gestionados. Siempre hereda la versión del plano de control.

De forma predeterminada, los nuevos grupos de nodos no administrados heredan la versión del plano de control (`--version=auto`), pero puedes especificar una versión diferente y utilizarla también `--version=latest` para forzar el uso de la versión más reciente.

Además, puedes usar el mismo archivo de configuración que se usó para: `eksctl create cluster`

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

### Crear un grupo de nodos a partir de un archivo de configuración
<a name="_creating_a_nodegroup_from_a_config_file"></a>

Los grupos de nodos también se pueden crear mediante una definición de clúster o un archivo de configuración. Dado el siguiente ejemplo de archivo de configuración y un clúster existente llamado: `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
```

Los nodos se agrupan `ng-1-workers` y se `ng-2-builders` pueden crear con este comando:

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

#### Equilibrio de carga
<a name="_load_balancing"></a>

Si ya te has preparado para adjuntar los grupos or/and objetivo de los balanceadores de cargas clásicos existentes a los grupos de nodos, puedes especificarlos en el archivo de configuración. Los grupos or/and objetivo de los balanceadores de cargas clásicos se asocian automáticamente al ASG al crear grupos de nodos. Esto solo es compatible con los grupos de nodos autogestionados definidos mediante el campo. `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
```

## Selección de grupos de nodos en los archivos de configuración
<a name="_nodegroup_selection_in_config_files"></a>

Para realizar una `delete` operación `create` o solo en un subconjunto de los grupos de nodos especificados en un archivo de configuración, hay dos indicadores de CLI que aceptan una lista de globos y, `0` por ejemplo: `1`

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

Con el archivo de configuración del ejemplo anterior, se pueden crear todos los grupos de nodos de trabajadores excepto el de trabajadores con el siguiente comando:

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

O se puede eliminar el grupo de nodos de los constructores con:

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

En este caso, también necesitamos proporcionar el `--approve` comando para eliminar realmente el grupo de nodos.

### Incluir y excluir reglas
<a name="node-include"></a>
+ si no `--include` o `--exclude` se especifica, todo está incluido
+ si solo `--include` se especifica, solo se incluirán los grupos de nodos que coincidan con esos globos
+ si solo `--exclude` se especifica, se incluyen todos los grupos de nodos que no coincidan con esos globos
+ si se especifican ambos, `--exclude` las reglas tienen prioridad sobre ellas `--include` (es decir, se excluirán los grupos de nodos que coincidan con las reglas de ambos grupos)

## Listado de grupos de nodos
<a name="_listing_nodegroups"></a>

Para enumerar los detalles de un grupo de nodos o de todos los grupos de nodos, usa:

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

Para enumerar uno o más grupos de nodos en formato YAML o JSON, que generan más información que la tabla de registro predeterminada, usa:

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

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

## Inmutabilidad del grupo de nodos
<a name="_nodegroup_immutability"></a>

Por diseño, los grupos de nodos son inmutables. Esto significa que si necesitas cambiar algo (además de escalar), como la AMI o el tipo de instancia de un grupo de nodos, tendrás que crear un nuevo grupo de nodos con los cambios deseados, mover la carga y eliminar el anterior. Consulte la sección [Eliminar y](#nodegroup-delete) drenar grupos de nodos.

## Escalar grupos de nodos
<a name="_scaling_nodegroups"></a>

El escalado de grupos de nodos es un proceso que puede tardar unos minutos. Cuando no se especifica el `--wait` indicador, espera `eksctl` con optimismo que el grupo de nodos se escale y regresa tan pronto como se envíe la solicitud de la API de AWS. Para `eksctl` esperar a que los nodos estén disponibles, añada una `--wait` marca como la que se muestra a continuación.

**nota**  
Escalar un grupo de nodos down/in (es decir, reducir el número de nodos) puede provocar errores, ya que dependemos únicamente de los cambios en el ASG. Esto significa que los nodos removed/terminated no se agotan de forma explícita. Esta puede ser un área de mejora en el futuro.

El escalado de un grupo de nodos gestionado se consigue llamando directamente a la API de EKS que actualiza la configuración de un grupo de nodos gestionado.

### Escalar un único grupo de nodos
<a name="_scaling_a_single_nodegroup"></a>

Se puede escalar un grupo de nodos mediante el comando: `eksctl scale nodegroup`

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

Por ejemplo, para escalar un grupo de nodos `cluster-1` a 5 nodos, `ng-a345f4e1` ejecuta:

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

También se puede escalar un grupo de nodos mediante un archivo de configuración que se pasa a `--config-file` y especificando el nombre del grupo de nodos con el que se debe escalar. `--name` Eksctl buscará en el archivo de configuración y descubrirá ese grupo de nodos, así como sus valores de configuración de escalado.

Si el número deseado de nodos está `NOT` dentro del rango del número mínimo actual y máximo actual, se mostrará un error específico. Estos valores también se pueden transmitir con indicadores `--nodes-min` y `--nodes-max` respectivamente.

### Escalar varios grupos de nodos
<a name="_scaling_multiple_nodegroups"></a>

Eksctl puede descubrir y escalar todos los grupos de nodos que se encuentran en un archivo de configuración que se transfiere. `--config-file`

De forma similar a escalar un solo grupo de nodos, se aplica el mismo conjunto de validaciones a cada grupo de nodos. Por ejemplo, el número deseado de nodos debe estar dentro del rango del número mínimo y máximo de nodos.

## Eliminar y drenar grupos de nodos
<a name="nodegroup-delete"></a>

Para eliminar un grupo de nodos, ejecuta:

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

 Las [reglas de inclusión y exclusión](#node-include) también se pueden usar con este comando.

**nota**  
Esto agotará todos los pods de ese grupo de nodos antes de que se eliminen las instancias.

Para omitir las reglas de desalojo durante el proceso de vaciado, ejecuta:

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

Todos los nodos se acordonan y todos los pods se expulsan de un grupo de nodos al eliminarlos, pero si necesitas drenar un grupo de nodos sin eliminarlo, ejecuta:

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

Para desacordonar un grupo de nodos, ejecuta:

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

Para ignorar las reglas de desalojo, como la configuración, ejecuta: PodDisruptionBudget 

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

Para acelerar el proceso de drenaje, puede especificar `--parallel <value>` el número de nodos que se van a drenar en paralelo.

## Otras características
<a name="_other_features"></a>

También puedes habilitar el acceso SSH y ASG y otras funciones para un grupo de nodos, por ejemplo:

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

### Actualiza las etiquetas
<a name="_update_labels"></a>

No hay comandos específicos `eksctl` para actualizar las etiquetas de un grupo de nodos, pero se puede lograr fácilmente usando`kubectl`, por ejemplo:

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

### Acceso SSH
<a name="_ssh_access"></a>

Puede habilitar el acceso SSH para los grupos de nodos configurando uno de ellos `publicKeyName` y `publicKeyPath` en su configuración de `publicKey` grupo de nodos. Como alternativa, puede usar [AWS Systems Manager (SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) para establecer SSH en los nodos, configurando el grupo de nodos con: `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
```