Saltar al contenido

¿Cómo creo varios grupos de nodos para los nodos de Amazon EKS mediante eksctl?

5 minutos de lectura
0

Quiero crear varios grupos de nodos para los nodos de Amazon Elastic Kubernetes Service (Amazon EKS) mediante eksctl.

Resolución

Puedes crear un grupo de nodos mediante eksctl con parámetros predeterminados. o con parámetros personalizados y un archivo de configuración para varios grupos de nodos.

Nota: Para instalar la versión más reciente de eksctl, consulta Installation options for Eksctl (Opciones de instalación de Eksctl).

Para confirmar que eksctl está configurado e instalado en tu máquina local, abre la terminal o línea de comandos que prefieras y ejecuta el siguiente comando:

eksctl version

A continuación, elige una de las siguientes resoluciones según el tipo de parámetros que desees utilizar.

Crear un grupo de nodos con parámetros predeterminados

  1. Para crear un grupo de nodos adicional con parámetros predeterminados, ejecuta este comando:

    eksctl create nodegroup --cluster=CLUSTER_NAME --name=NODEGROUP_NAME --region REGION_NAME

    Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster, NODEGROUP_NAME por el nombre del grupo de nodos y REGION_NAME por tu región de AWS.

    Los parámetros predeterminados son los siguientes:

    Instance type = m5.largeAMI : latest AWS EKS AMI
    Nodes-desired capacity = 2
    Nodes-min capacity =2
    Nodes-max capacity=2

    Nota: De forma predeterminada, los nuevos grupos de nodos heredan la versión de Kubernetes del plano de control. Puedes especificar una versión diferente de Kubernetes (por ejemplo, version=1.27). Para usar la versión más reciente de Kubernetes, ejecuta el comando –version=latest.

  2. Para confirmar que los nuevos grupos de nodos están asociados al clúster y comprobar que los nodos se han unido al clúster, ejecuta el siguiente comando:

    kubectl get nodes
    eksctl get nodegroups --cluster CLUSTER_NAME --region REGION_NAME

    Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster y REGION_NAME por tu región.

  3. En el resultado, confirma que el estado del grupo de nodos es ACTIVE y que el estado del nodo es READY.
    Ejemplo de estado de un grupo de nodos:

    eksctl get nodegroups --cluster yourClusterName --region yourRegionName
    CLUSTER    NODEGROUP       STATUS  CREATED                MIN SIZE  MAX SIZE  DESIRED CAPACITY  INSTANCE TYPE  IMAGE ID     ASG NAME                      TYPE  
    clusterName example-workers ACTIVE  2023-10-28T14:30:00Z  2         2         2                 m5.large      AL2_x86_64   eks-example-workers-11223344  managed

    Ejemplo de estado de nodo:

    kubectl get nodes
    NAME                                          STATUS  ROLES  AGE  VERSION
    ip-192-168-100-101.us-west-2.compute.internal Ready   <none> 4h   v1.27.1-eks-1
    ip-192-168-100-102.us-west-2.compute.internal Ready   <none> 4h   v1.27.1-eks-1

Crear un grupo de nodos con parámetros personalizados

  1. Define los parámetros del nuevo grupo de nodos en un archivo de configuración. Por ejemplo:

    kind: ClusterConfig
    apiVersion: eksctl.io/v1alpha5
    metadata:
        name: CLUSTER_NAME
        region: REGION_NAME
    nodeGroups:
      - name: NODEGROUP_NAME
        availabilityZones: ["AVAILABILITY_ZONE"]
        desiredCapacity: 3
        instanceType: m5.large
        iam:
          instanceProfileARN: "arn:aws:iam::444455556666:instance-profile/eks-nodes-base-role" #Attaching IAM role
          instanceRoleARN: "arn:aws:iam::444455556666:role/eks-nodes-base-role"
        privateNetworking: true
        securityGroups:
          withShared: true
          withLocal: true
          attachIDs: ['SECURITY_GROUP_ID']
        ssh:
          publicKeyName: 'KEY-PAIR-NAME'
        kubeletExtraConfig:
            kubeReserved:
                cpu: "300m"
                memory: "300Mi"
                ephemeral-storage: "1Gi"
            kubeReservedCgroup: "/kube-reserved"
            systemReserved:
                cpu: "300m"
                memory: "300Mi"
                ephemeral-storage: "1Gi"
        tags:
          'environment': 'development'
      - name: ng-2-builders #example of a nodegroup that uses 50% spot instances and 50% on demand instances:
        minSize: 2
        maxSize: 5
        instancesDistribution:
          maxPrice: 0.017
          instanceTypes: ["t3.small", "t3.medium"] # At least two instance types should be specified
          onDemandBaseCapacity: 0
          onDemandPercentageAboveBaseCapacity: 50
          spotInstancePools: 2
        tags:
          'environment': 'production'

    Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster, REGION_NAME por tu región de AWS y NODEGROUP_NAME por el nombre del grupo de nodos. SECURITY_GROUP_ID por el ID de tu grupo de seguridad, KEY_PAIR_NAME por el nombre de tu par de claves y AVAILABILITY_ZONE por tu zona de disponibilidad.

    Para obtener más información sobre los parámetros compatibles y los tipos de grupos de nodos, consulta Grupos de nodos.

  2. Para crear un grupo de nodos adicional con el archivo de configuración, ejecuta el siguiente comando:

    eksctl create nodegroup --config-file=CONFIG_FILE

    Nota: Sustituye CONFIG_FILE por el nombre del archivo de configuración.

  3. (Opcional) El comando del paso 2 despliega una pila de AWS CloudFormation para crear recursos para el grupo de nodos de EKS. Para comprobar el estado de la pila, accede a la consola de CloudFormation y confirma que la región de AWS es la misma que la del clúster.
    Cuando la pila esté en estado CREATE_COMPLETE, el comando eksctl se cierra correctamente.

  4. Para confirmar que los nuevos grupos de nodos están asociados al clúster y comprobar que los nodos se han unido al clúster, ejecuta el siguiente comando:

    kubectl get nodes
    eksctl get nodegroups --cluster CLUSTER_NAME --region REGION_NAME

    Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster y REGION_NAME por tu región.

    En el resultado, confirma que el estado del grupo de nodos es ACTIVE y que el estado del nodo es READY.

    Ejemplo de estado de un grupo de nodos:

    eksctl get nodegroups --cluster yourClusterName --region yourRegionName
    CLUSTER    NODEGROUP       STATUS  CREATED                MIN SIZE  MAX SIZE  DESIRED CAPACITY  INSTANCE TYPE  IMAGE ID     ASG NAME                      TYPE  
    clusterName example-workers ACTIVE  2023-10-28T14:30:00Z  2         2         3                 m5.large      AL2_x86_64   eks-example-workers-11223344  managed

    Ejemplo de estado de nodo:

    kubectl get nodes
    NAME                                          STATUS  ROLES  AGE  VERSION
    ip-192-168-100-101.us-west-2.compute.internal Ready   <none> 4h   v1.27.1-eks-1
    ip-192-168-100-102.us-west-2.compute.internal Ready   <none> 4h   v1.27.1-eks-1
    ip-192-168-100-103.us-west-2.compute.internal Ready   <none> 4h   v1.27.1-eks-1