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
--excludees--includeasí o se especifica, todo está incluido -
si solo
--includese especifica, solo se incluirán los grupos de nodos que coincidan con esos globos -
si solo
--excludese especifica, se incluyen todos los grupos de nodos que no coincidan con esos globos -
si se especifican ambos,
--excludelas 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