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 gestionados por Amazon EKS son una función que automatiza el aprovisionamiento y la administración del ciclo de vida de los nodos (instanciasEC2 ) para los clústeres de Kubernetes de Amazon EKS. Los clientes pueden aprovisionar grupos de nodos optimizados para sus clústeres y EKS los mantendrá actualizados con las versiones más recientes de Kubernetes y del sistema operativo host.

Un grupo de nodos gestionado por EKS es un grupo de escalado automático e EC2 instancias asociadas que AWS administra para un clúster de Amazon EKS. Cada grupo de nodos utiliza la AMI Amazon Linux 2 optimizada para Amazon EKS. 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 el clúster, que puede abarcar varias subredes y zonas de disponibilidad de VPC de AWS para lograr una alta disponibilidad.

NUEVA plantilla de lanzamiento: compatibilidad con grupos de nodos administrados

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 utilizando el nodeGroups campo para definir los grupos de nodos no gestionados, y los grupos de nodos gestionados se definen con el campo. managedNodeGroups

Creación de grupos de nodos gestionados

$ eksctl create nodegroup

Nuevos clústeres

Para crear un clúster nuevo con un grupo de nodos gestionado, ejecute

eksctl create cluster

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

nota

Los grupos de nodos administrados no tienen una paridad de funciones completa 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 gestionado aquí.

Es posible tener un clúster con grupos de nodos gestionados y no gestionados. 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

NEW Support para AMI personalizadas, grupos de seguridadinstancePrefix,instanceName,ebsOptimized,volumeType,volumeName,volumeEncrypted,volumeKmsKeyID,volumeIOPS,maxPodsPerNode,preBootstrapCommands,overrideBootstrapCommand, y 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 la especificación de 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 el clúster, describe el nuevo grupo de nodos gestionado en el managedNodeGroups campo y ejecuta:

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

Actualización de los grupos de nodos gestionados

Puede actualizar un grupo de nodos a la última versión de la versión de AMI optimizada para EKS para el tipo de AMI que esté utilizando en cualquier momento.

Si su grupo de nodos es de la misma versión de Kubernetes que el clúster, puede actualizar a la última versión de AMI para esa versión de Kubernetes del tipo de AMI que esté utilizando. Si su grupo de nodos es la versión de Kubernetes anterior a la versión de Kubernetes del clúster, puede 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 gestionado a la última versión de la AMI:

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

El grupo de nodos se puede actualizar a la última versión de 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 lanzamiento de AMI específica en lugar de a la última versión, pase--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 de forma personalizada AMIs, 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

Gestión de actualizaciones paralelas para nodos

Se pueden actualizar varios nodos gestionados simultáneamente. Para configurar las actualizaciones paralelas, defina el grupo updateConfig de nodos al crear el grupo de nodos. Puede encontrar un ejemplo updateConfig aquí.

Para evitar que sus cargas de trabajo se pierdan debido a la actualización de varios nodos a la vez, puede limitar el número de nodos que pueden dejar de estar disponibles durante una actualización especificándolo en el maxUnavailable campo de unaupdateConfig. Como alternativamaxUnavailablePercentage, utilice esta opción, 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 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 UpdateConfigsección de un grupo de nodos gestionado. En esta sección se definen dos campos. MaxUnavailableyMaxUnavailablePercentage. Tus grupos de nodos no se ven afectados durante la actualización, por lo que no es de esperar un tiempo de inactividad.

El comando update nodegroup debe usarse con un archivo de configuración que use la bandera. --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

Los grupos de nodos gestionados por EKS comprueban automáticamente la configuración del grupo de nodos y los nodos para detectar problemas de estado y los notifican a través de la API y la consola 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 etiquetas

EKS Managed Nodegroups permite 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 del clúster o grupo de nodos.

Para establecer etiquetas nuevas 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 desconfigurar 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 admite grupos de nodos gestionados. La sintaxis para escalar un grupo de nodos administrado o no administrado 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