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.
Trabaje con grupos de nodos
Crear grupos de nodos
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
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
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
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
-
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
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
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 drenar 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 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
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
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
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 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 drenarán en paralelo.
Otras características
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
Actualizar 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
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) 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