Cómo crear un clúster de modo automático de EKS con AWS CLI - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Cómo crear un clúster de modo automático de EKS con AWS CLI

Los clústeres del modo automático de EKS automatizan las tareas rutinarias de administración de clústeres para computación, almacenamiento y redes. Por ejemplo, los clústeres del modo automático de EKS detectan automáticamente cuándo se necesitan nodos adicionales y aprovisionan nuevas instancias de EC2 a fin de satisfacer las demandas de la carga de trabajo.

En este tema se ofrece orientación para crear un nuevo clúster de modo automático de EKS mediante AWS CLI y, opcionalmente, implementar una carga de trabajo de muestra.

Requisitos previos

  • La versión más reciente de la Interfaz de Línea de Comandos de AWS (AWS CLI) instalada y configurada en el dispositivo. Para comprobar su versión actual, utilice aws --version. Para instalar la versión más reciente, consulte Instalación y Configuración rápida con aws configure en la Guía del usuario de la interfaz de la línea de comandos de AWS.

    • Inicie sesión en la CLI con permisos de IAM suficientes para crear recursos de AWS, como políticas de IAM, roles de IAM y clústeres de EKS.

  • La herramienta de línea de comandos kubectl instalada en el dispositivo. AWS sugiere que utilice la misma versión de kubectl que la versión de Kubernetes del clúster de EKS. Para instalar o actualizar kubectl, consulte Configuración de kubectl y eksctl.

Cómo especificar las subredes de la VPC

El modo automático de Amazon EKS implementa nodos en las subredes de la VPC. Al crear un clúster de EKS, debe especificar las subredes de la VPC en las que se implementarán los nodos. Puede utilizar las subredes de la VPC predeterminadas en la cuenta de AWS o crear una VPC dedicada para cargas de trabajo críticas.

Uso de AWS CLI:

  1. Ejecute el siguiente comando para enumerar la VPC predeterminada y sus subredes:

    aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)" --query 'Subnets[*].{ID:SubnetId,AZ:AvailabilityZone}' --output table
  2. Guarde el resultado y anote los ID de subred.

    Resultado de ejemplo:

    ----------------------------------------
    |             DescribeSubnets          |
    ----------------------------------------
    |   SubnetId        |   AvailabilityZone  |
    |--------------------|---------------------|
    |   subnet-012345678 |   us-west-2a        |
    |   subnet-234567890 |   us-west-2b        |
    |   subnet-345678901 |   us-west-2c        |
    ----------------------------------------

Roles de IAM para clústeres de modo automático de EKS

Rol de IAM de clúster

El modo automático de EKS requiere un rol de IAM de clúster para realizar acciones en la cuenta de AWS, como el aprovisionamiento de nuevas instancias de EC2. Debe crear este rol para conceder a EKS los permisos necesarios. AWS recomienda asociar las siguientes políticas administradas de AWS al rol de IAM del clúster:

Rol de IAM del nodo

Al crear un clúster de modo automático de EKS, se especifica un rol de IAM del nodo. Cuando el modo automático de EKS crea nodos para procesar cargas de trabajo pendientes, a cada nuevo nodo de instancia de EC2 se le asigna el rol de IAM del nodo. Este rol permite que el nodo se comunique con EKS, pero generalmente las cargas de trabajo que se ejecutan en el nodo no acceden a este.

Si desea conceder permisos a las cargas de trabajo que se ejecutan en un nodo, utilice EKS Pod Identity. Para obtener más información, consulte Más información sobre cómo Pod Identity de EKS concede a los pods acceso a los servicios de AWS.

Debe crear este rol y asociar la siguiente política administrada de AWS:

El modo automático de EKS también requiere un rol vinculado al servicio, que AWS crea y configura automáticamente. Para obtener más información, consulte AWSServiceRoleForAmazonEKS.

Cómo crear un rol de IAM de clúster de modo automático de EKS

Paso 1: Creación de la política de confianza

Cree una política de confianza que permita al servicio de Amazon EKS asumir el rol. Guarde la política como trust-policy.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

Paso 2: Creación del rol de IAM

Utilice la política de confianza para crear el rol de IAM del clúster:

aws iam create-role \
    --role-name AmazonEKSAutoClusterRole \
    --assume-role-policy-document file://trust-policy.json

Paso 3: Cómo anotar el ARN del rol

Recupere y guarde el ARN del nuevo rol para utilizarlo en pasos posteriores:

aws iam get-role --role-name AmazonEKSAutoClusterRole --query "Role.Arn" --output text

Paso 4: Asociación de las políticas requeridas

Asocie las siguientes políticas administradas por AWS al rol de IAM del clúster para conceder los permisos necesarios:

AmazonEKSClusterPolicy

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

AmazonEKSComputePolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy

AmazonEKSBlockStoragePolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy

AmazonEKSLoadBalancingPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy

AmazonEKSNetworkingPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy

Cómo crear un rol de IAM de nodo del modo automático de EKS

Paso 1: Creación de la política de confianza

Cree una política de confianza que permita al servicio de Amazon EKS asumir el rol. Guarde la política como node-trust-policy.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Paso 2: Creación del rol de IAM del nodo

Utilice el archivo node-trust-policy.json del paso anterior para definir qué entidades pueden asumir el rol. Ejecute el siguiente comando para crear el rol de IAM del nodo:

aws iam create-role \
    --role-name AmazonEKSAutoNodeRole \
    --assume-role-policy-document file://node-trust-policy.json

Paso 3: Cómo anotar el ARN del rol

Después de crear el rol, recupere y guarde el ARN del rol de IAM del nodo. Necesitará este ARN en los pasos siguientes. Utilice el siguiente comando para obtener el ARN:

aws iam get-role --role-name AmazonEKSAutoNodeRole --query "Role.Arn" --output text

Paso 4: Asociación de las políticas requeridas

Asocie las siguientes políticas administradas por AWS al rol de IAM del nodo para proporcionar los permisos necesarios:

AmazonEKSWorkerNodeMinimalPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy

AmazonEC2ContainerRegistryPullOnly:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

Cómo crear un clúster de modo automático de EKS

Descripción general

Para crear un clúster de modo automático de EKS mediante AWS CLI, necesitará los siguientes parámetros:

  • cluster-name: el nombre del clúster.

  • k8s-version: la versión de Kubernetes (p. ej., 1.31).

  • subnet-ids: los ID de subred identificados en los pasos anteriores.

  • cluster-role-arn: ARN del rol de IAM del clúster.

  • node-role-arn: ARN del rol de IAM del nodo.

Configuraciones de clúster predeterminadas

Revise las características y los valores predeterminados antes de crear el clúster:

  • nodePools: el modo automático de EKS incluye grupos de nodos de uso general y predeterminados del sistema. Más información sobre los grupos de nodos.

Nota: Los grupos de nodos del modo automático de EKS se diferencian de los grupos de nodos administrados de Amazon EKS, pero pueden coexistir en el mismo clúster.

  • computeConfig.enabled: automatiza las tareas de computación rutinarias, como la creación y eliminación de instancias de EC2.

  • kubernetesNetworkConfig.elasticLoadBalancing.enabled: automatiza las tareas de equilibrio de carga, incluida la creación y eliminación de equilibradores de carga elásticos.

  • storageConfig.blockStorage.enabled: automatiza las tareas de almacenamiento, como la creación y eliminación de volúmenes de Amazon EBS.

  • accessConfig.authenticationMode: requiere entradas de acceso de EKS. Más información sobre los modos de autenticación de EKS.

Ejecute el comando

Utilice el siguiente comando para crear el clúster:

aws eks create-cluster \
  --region ${AWS_REGION} \
  --cli-input-json \
  "{
      \"name\": \"${CLUSTER_NAME}\",
      \"version\": \"${K8S_VERSION}\",
      \"roleArn\": \"${CLUSTER_ROLE_ARN}\",
      \"resourcesVpcConfig\": {
        \"subnetIds\": ${SUBNETS_JSON},
        \"endpointPublicAccess\": true,
        \"endpointPrivateAccess\": true
      },
      \"computeConfig\": {
        \"enabled\": true,
        \"nodeRoleArn\":\"${NODE_ROLE_ARN}\",
        \"nodePools\": [\"general-purpose\", \"system\"]
      },
      \"kubernetesNetworkConfig\": {
        \"elasticLoadBalancing\": {
          \"enabled\": true
        }
      },
      \"storageConfig\": {
        \"blockStorage\": {
          \"enabled\": true
        }
      },
      \"accessConfig\": {
        \"authenticationMode\": \"API\"
      }
    }

Cómo comprobar el estado del clúster

Paso 1: Comprobación de la creación del clúster

Ejecute el siguiente comando para comprobar el estado del clúster. La creación del clúster generalmente tarda unos 15 minutos:

aws eks describe-cluster --name "${CLUSTER_NAME}" --output json

Paso 2: Actualización de kubeconfig

Una vez que el clúster esté listo, actualice el archivo kubeconfig local para permitir que kubectl se comunique con el clúster. Esta configuración utiliza AWS CLI para la autenticación.

aws eks update-kubeconfig --name "${CLUSTER_NAME}"

Paso 3: Verificación de los grupos de nodos

Enumere los grupos de nodos del clúster con el siguiente comando:

kubectl get nodepools

Siguientes pasos