View a markdown version of this page

Trabaja con grupos de nodos - Guía del usuario de Eksctl

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

Creación de grupos de nodos

Puedes 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

--versionla marca no es compatible con los grupos de nodos administrados. Siempre hereda la versión del plano de control.

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

Además, puedes usar el mismo archivo de configuración usado para: eksctl create cluster

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

Crear un grupo de nodos a partir de un archivo de configuración

Los grupos de nodos también se pueden crear a través de un archivo de configuración o definición de clúster. 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

Si ya te has preparado para conectar 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 carga clásicos se asocian automáticamente al ASG al crear grupos de nodos. Esto solo es compatible con los grupos de nodos autogestionados definidos en 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

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, por ejemplo: –0— –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 de ejemplo anterior, se pueden crear todos los grupos de nodos de los trabajadores excepto el de los 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.

Reglas de inclusión y exclusión

  • si no --exclude es --include así o 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 prevalecen sobre las reglas --include (es decir, se excluirán los grupos de nodos que coincidan con las reglas de ambos grupos)

Listar grupos de nodos

Para mostrar 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, lo que genera 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 de grupos de nodos

Por diseño, los grupos de nodos son inmutables. Esto significa que si necesitas cambiar algo (aparte de la escala), 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. Consulta la sección Eliminar y vaciar grupos de nodos.

Escalar grupos de nodos

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 a la API de AWS. Para eksctl esperar hasta que los nodos estén disponibles, añada una --wait marca como la del ejemplo siguiente.

nota

Escalar un grupo de nodos down/in (es decir, reducir el número de nodos) puede provocar errores, ya que dependemos exclusivamente de los cambios en el ASG. Esto significa que los nodos en cuestión 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 administrado se logra llamando directamente a la API de EKS que actualiza la configuración de un grupo de nodos administrado.

Escalar un único grupo de nodos

Un grupo de nodos se puede escalar 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 usando un archivo de configuración pasado --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 y máximo actual de nodos, se mostrará un error específico. Estos valores también se pueden pasar con banderas --nodes-min y --nodes-max respectivamente.

Escalar varios grupos de nodos

Eksctl puede descubrir y escalar todos los grupos de nodos que se encuentran en un archivo de configuración que se envía con él. --config-file

De manera 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

Para eliminar un grupo de nodos, ejecuta:

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

Las reglas de inclusión y exclusión también se pueden usar con este comando.

nota

Esto agotará todos los pods de ese grupo de nodos antes de eliminar las instancias.

Para saltarte las reglas de desalojo durante el proceso de descarga, ejecuta:

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

Se acordonan todos los nodos y se expulsan todos los pods de un grupo de nodos al eliminarlos, pero si necesitas vaciar 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

También puedes habilitar el acceso SSH, 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

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

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

Acceso SSH

Puedes habilitar el acceso SSH para grupos de nodos configurando uno de los publicKeyName y publicKeyPath en la configuración de publicKey tu grupo de nodos. Como alternativa, puede usar AWS Systems Manager (SSM) para acceder mediante SSH a 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