View a markdown version of this page

Grupos de nodos gestionados por EKS - 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.

Grupos de nodos gestionados por EKS

Los grupos de nodos administrados por Amazon EKS son una función que automatiza el aprovisionamiento y la administración del ciclo de vida de los nodos (instancias EC2) para los clústeres de Kubernetes de Amazon EKS. Los clientes pueden aprovisionar grupos de nodos optimizados para sus clústeres y EKS mantendrá sus nodos actualizados con las versiones más recientes de Kubernetes y del sistema operativo host.

Un grupo de nodos administrado por EKS es un grupo de escalado automático y las instancias EC2 asociadas que AWS administra para un clúster de Amazon EKS. Cada grupo de nodos usa la AMI de Amazon EKS-optimized Amazon Linux 2. Amazon EKS facilita la aplicación de correcciones de errores y parches de seguridad a los nodos, así como su actualización a las versiones más recientes de Kubernetes. Cada grupo de nodos lanza un grupo de escalado automático para su clúster, que puede abarcar varias subredes y zonas de disponibilidad de VPC de AWS para lograr una alta disponibilidad.

NUEVA compatibilidad con plantillas de lanzamiento para grupos de nodos gestionados

nota

El término «grupos de nodos no gestionados» se ha utilizado para referirse a los grupos de nodos que eksctl ha admitido desde el principio (representados mediante el campo). nodeGroups El ClusterConfig archivo sigue usando el nodeGroups campo para definir los grupos de nodos no administrados, y los grupos de nodos administrados se definen con el campo. managedNodeGroups

Creación de grupos de nodos gestionados

$ eksctl create nodegroup

Nuevos clústeres

Para crear un nuevo clúster con un grupo de nodos administrado, ejecuta

eksctl create cluster

Para crear varios grupos de nodos administrados y tener más control sobre la configuración, se puede usar un archivo de configuración.

nota

Los grupos de nodos administrados no tienen una paridad total de funciones con los grupos de nodos no administrados.

# cluster.yaml # A cluster with two managed nodegroups --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large minSize: 2 maxSize: 3

Puedes encontrar otro ejemplo de un archivo de configuración para crear un grupo de nodos administrado aquí. https://github.com/eksctl-io/eksctl/blob/main/examples/15-managed-nodes.yaml

Es posible tener un clúster con grupos de nodos administrados y no administrados. Los grupos de nodos no administrados no aparecen en la consola EKS de AWS, pero eksctl get nodegroup muestran ambos tipos de grupos de nodos.

# cluster.yaml # A cluster with an unmanaged nodegroup and two managed nodegroups. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 nodeGroups: - name: ng-1 minSize: 2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large privateNetworking: true minSize: 2 maxSize: 3

NUEVO soporte para AMI personalizadas, grupos de seguridad,,instancePrefix,,instanceName,ebsOptimized,volumeType,volumeName,, volumeEncryptedvolumeKmsKeyID, y volumeIOPS maxPodsPerNode preBootstrapCommands overrideBootstrapCommand disableIMDSv1

# cluster.yaml # A cluster with a managed nodegroup with customization. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: custom-ng ami: ami-0e124de4755b2734d securityGroups: attachIDs: ["sg-1234"] maxPodsPerNode: 80 ssh: allow: true volumeSize: 100 volumeName: /dev/xvda volumeEncrypted: true # defaults to true, which enforces the use of IMDSv2 tokens disableIMDSv1: false overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh managed-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=custom-ng,eks.amazonaws.com/nodegroup-image=ami-0e124de4755b2734d'

Si solicitas un tipo de instancia que solo esté disponible en una zona (y la configuración de eksctl requiere que se especifiquen dos), asegúrate de añadir la zona de disponibilidad a tu solicitud de grupo de nodos:

# cluster.yaml # A cluster with a managed nodegroup with "availabilityZones" --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: flux-cluster region: us-east-2 version: "1.23" availabilityZones: ["us-east-2b", "us-east-2c"] managedNodeGroups: - name: workers instanceType: hpc6a.48xlarge minSize: 64 maxSize: 64 labels: { "fluxoperator": "true" } availabilityZones: ["us-east-2b"] efaEnabled: true placement: groupName: eks-efa-testing

Esto puede ocurrir con tipos de instancias, como la familia Hpc6, que solo están disponibles en una zona.

Clústeres existentes

eksctl create nodegroup --managed

Consejo: si utilizas un ClusterConfig archivo para describir todo tu clúster, describe tu nuevo grupo de nodos gestionado managedNodeGroups sobre el terreno y ejecuta:

eksctl create nodegroup --config-file=YOUR_CLUSTER.yaml

Actualizar los grupos de nodos gestionados

Puede actualizar un grupo de nodos a la versión más reciente de la EKS-optimized AMI para el tipo de AMI que esté utilizando en cualquier momento.

Si tu grupo de nodos es la misma versión de Kubernetes que el clúster, puedes actualizarlo a la versión de AMI más reciente para esa versión de Kubernetes del tipo de AMI que estés usando. Si tu grupo de nodos es la versión anterior de Kubernetes de la versión de Kubernetes del clúster, puedes actualizar el grupo de nodos a la última versión de AMI que coincida con la versión de Kubernetes del grupo de nodos, o actualizar a la última versión de AMI que coincida con la versión de Kubernetes del clúster. No puedes revertir un grupo de nodos a una versión anterior de Kubernetes.

Para actualizar un grupo de nodos administrado a la versión más reciente de AMI:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster

El grupo de nodos se puede actualizar a la versión más reciente de la AMI para una versión específica de Kubernetes mediante:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --kubernetes-version=<kubernetes-version>

Para actualizar a una versión de AMI específica en lugar de a la versión más reciente, sigue estos pasos: --release-version

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --release-version=1.19.6-20210310
nota

Si los nodos gestionados se implementan mediante AMI personalizadas, se debe seguir el siguiente flujo de trabajo para implementar una nueva versión de la AMI personalizada.

  • El despliegue inicial del grupo de nodos debe realizarse mediante una plantilla de lanzamiento, p. ej.

    managedNodeGroups: - name: launch-template-ng launchTemplate: id: lt-1234 version: "2" #optional (uses the default version of the launch template if unspecified)
  • cree una nueva versión de la AMI personalizada (mediante la consola AWS EKS).

  • cree una nueva versión de la plantilla de lanzamiento con el nuevo ID de AMI (mediante la consola AWS EKS).

  • actualice los nodos a la nueva versión de la plantilla de lanzamiento. p. ej.

    eksctl upgrade nodegroup --name nodegroup-name --cluster cluster-name --launch-template-version new-template-version

Gestionar las actualizaciones paralelas de los nodos

Se pueden actualizar varios nodos gestionados de forma simultánea. Para configurar las actualizaciones paralelas, defina el updateConfig de un grupo de nodos al crear el grupo de nodos. Puedes encontrar un ejemplo updateConfig aquí. https://github.com/eksctl-io/eksctl/blob/main/examples/15-managed-nodes.yaml

Para evitar que sus cargas de trabajo pierdan tiempo de inactividad debido a la actualización de varios nodos a la vez, puede limitar la cantidad de nodos que pueden dejar de estar disponibles durante una actualización especificándolo en el maxUnavailable campo de unupdateConfig. También puede utilizarmaxUnavailablePercentage, que define el número máximo de nodos no disponibles como un porcentaje del número total de nodos.

Tenga en cuenta que maxUnavailable no puede ser superior amaxSize. Además, maxUnavailable y maxUnavailablePercentage no se puede usar simultáneamente.

Esta función solo está disponible para los nodos gestionados.

Actualización de grupos de nodos gestionados

eksctlpermite actualizar la UpdateConfig sección de un grupo de nodos gestionado. Esta sección define dos campos. MaxUnavailableyMaxUnavailablePercentage. Tus grupos de nodos no se ven afectados durante la actualización, por lo que no deberías esperar tiempos de inactividad.

El comando update nodegroup debe usarse con un archivo de configuración que utilice la marca. --config-file El grupo de nodos debe contener una nodeGroup.updateConfig sección. Puede encontrar más información aquí.

Problemas de salud de Nodegroup

EKS Managed Nodegroups comprueba automáticamente la configuración de su grupo de nodos y grupos de nodos para detectar problemas de estado y los notifica a través de la consola y la API de EKS. Para ver los problemas de estado de un grupo de nodos:

eksctl utils nodegroup-health --name=managed-ng-1 --cluster=managed-cluster

Administrar las etiquetas

Los grupos de nodos gestionados por EKS permiten adjuntar etiquetas que se aplican a los nodos de Kubernetes del grupo de nodos. Esto se especifica mediante el labels campo de eksctl durante la creación de un clúster o grupo de nodos.

Para establecer nuevas etiquetas o actualizar las etiquetas existentes en un grupo de nodos:

eksctl set labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by=eks,kubernetes.io/role=worker

Para desactivar o eliminar etiquetas de un grupo de nodos:

eksctl unset labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by,kubernetes.io/role

Para ver todas las etiquetas configuradas en un grupo de nodos:

eksctl get labels --cluster managed-cluster --nodegroup managed-ng-1

Escalar los grupos de nodos gestionados

eksctl scale nodegrouptambién es compatible con los grupos de nodos gestionados. La sintaxis para escalar un grupo de nodos gestionado o no gestionado es la misma.

eksctl scale nodegroup --name=managed-ng-1 --cluster=managed-cluster --nodes=4 --nodes-min=3 --nodes-max=5

Más información