Creación de nodos de Amazon Linux en AWS Outposts - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Creación de nodos de Amazon Linux en AWS Outposts

En este tema, se describe cómo puede lanzar grupos de escalado automático de nodos de Amazon Linux en un Outpost que se registrarán con el clúster de Amazon EKS. El clúster puede estar en la Nube de AWS o en un Outpost.

Requisitos previos

Puede crear un grupo de nodos autoadministrados de Amazon Linux con eksctl o la AWS Management Console (con una plantilla de AWS CloudFormation). También puede usar Terraform.

eksctl
Requisito previo

La versión 0.189.0 o posterior de la herramienta de línea de comandos eksctl instalada en su dispositivo o AWS CloudShell. Para Instalar o actualizar eksctl, consulte la sección de Instalación en la documentación de eksctl.

Cómo lanzar nodos de Linux autoadministrados mediante eksctl
  1. Si su clúster está en la Nube de AWS y la política de IAM administrada AmazonEKS_CNI_Policy se asocia a su Rol de IAM de nodo de Amazon EKS, recomendamos asignarlo a un rol de IAM asociado a la cuenta de servicios aws-node de Kubernetes en su lugar. Para obtener más información, consulte Configuración del complemento de CNI de Amazon VPC para utilizar IRSA. Si el clúster está en su Outpost, la política debe estar asociada a su rol de nodo.

  2. El siguiente comando crea un grupo de nodos en un clúster existente. El clúster debe haberse creado con eksctl. Reemplace al-nodes por un nombre para su grupo de nodos. El nombre del grupo de nodos no puede tener más de 63 caracteres. Debe empezar por una letra o un dígito, pero también puede incluir guiones y guiones bajos como caracteres no iniciales. Reemplace my-cluster por el nombre del clúster. El nombre solo puede contener caracteres alfanuméricos (con distinción de mayúsculas y minúsculas) y guiones. Debe comenzar con un carácter alfanumérico y no puede tener más de 100 caracteres. El nombre debe ser único dentro de la Región de AWS y la Cuenta de AWS en las que va a crear el clúster. Si el clúster existe en un Outpost, reemplace id con el ID de una subred de Outpost. Si su clúster existe en la Nube de AWS, reemplace id con el ID de una subred que no especificó al crear el clúster. Reemplace instance-type con un tipo de instancia compatible con su Outpost. Reemplace los example values restantes por sus propios valores. Los nodos se crean de forma predeterminada con la misma versión de Kubernetes que el plano de control.

    Reemplace instance-type con un tipo de instancia disponible en su Outpost.

    Reemplace my-key con el nombre de su par de claves de Amazon EC2 o la clave pública. Esta clave se utiliza para SSH en sus nodos después de que se lancen. Si aún no tiene un par de claves de Amazon EC2, puede crear uno en la AWS Management Console. Para obtener más información, consulte Pares de claves de Amazon EC2 en la Guía del usuario de Amazon EC2.

    Cree el grupo de nodos con el siguiente comando.

    eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id

    Si su clúster está implementado en la Nube de AWS:

    Para obtener una lista completa de todas las opciones y valores predeterminados disponibles, consulte Soporte de AWS Outposts en la documentación de eksctl.

    Si los nodos no se unen al clúster, consulte Los nodos no pueden unirse al clúster en Solución de problemas con los clústeres y nodos de Amazon EKS y No puede asociar nodos a un clúster en Solución de problemas de los clústeres locales de Amazon EKS en AWS Outposts.

    Un ejemplo de salida sería el siguiente. Se generan varias líneas mientras se crean los nodos. Una de las últimas líneas de salida es la siguiente línea de ejemplo.

    [✔]  created 1 nodegroup(s) in cluster "my-cluster"
  3. (Opcional) Implemente una aplicación de muestra para probar el clúster y los nodos de Linux.

AWS Management Console
Paso 1: lanzar nodos autoadministrados de Amazon Linux mediante la AWS Management Console
  1. Descargue la versión más reciente de la plantilla de AWS CloudFormation.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  3. Seleccione Create stack (Crear pila) y, a continuación, seleccione With new resources (standard) (Con nuevos recursos [estándar]).

  4. Para Especificar plantilla, seleccione Cargar un archivo de plantilla y, a continuación, elija Elegir archivo. Seleccione el archivo amazon-eks-nodegroup.yaml que ha descargado en el paso anterior y, a continuación, seleccione Siguiente.

  5. En la página Especificar detalles de la pila, ingrese los siguientes parámetros según corresponda y luego seleccione Siguiente:

    • Nombre de pila: elija un nombre para la pila de AWS CloudFormation. Por ejemplo, puede llamarla al-nodes. El nombre solo puede contener caracteres alfanuméricos (con distinción de mayúsculas y minúsculas) y guiones. Debe comenzar con un carácter alfanumérico y no puede tener más de 100 caracteres. El nombre debe ser único dentro de la Región de AWS y la Cuenta de AWS en las que va a crear el clúster.

    • ClusterName: ingrese el nombre del clúster. Si este nombre no coincide con el nombre del clúster, los nodos no pueden unirse al clúster.

    • ClusterControlPlaneSecurityGroup: elija el valor de SecurityGroups en la salida de AWS CloudFormation que generó al crear la VPC.

      En los siguientes pasos, se muestra una operación para recuperar el grupo aplicable.

      1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home#/clusters.

      2. Elija el nombre del clúster.

      3. Elija la pestaña Redes.

      4. Use el valor de Grupo de seguridad adicional como referencia al realizar una selección en la lista desplegable ClusterControlPlaneSecurityGroup.

    • NodeGroupName: escriba un nombre para el grupo de nodos. Este nombre se puede utilizar más adelante para identificar el grupo de nodos de Auto Scaling que se crea para los nodos.

    • NodeAutoScalingGroupMinSize: ingrese el número mínimo de nodos al que se pueda reducir horizontalmente el grupo de escalado automático de nodos.

    • NodeAutoScalingGroupDesiredCapacity: escriba el número deseado de nodos que desea escalar cuando se crea la pila.

    • NodeAutoScalingGroupMaxSize: ingrese el número máximo de nodos que pueda alcanzar el grupo de Auto Scaling de nodos.

    • NodeInstanceType: elija un tipo de instancia para los nodos. Si su clúster se ejecuta en la Nube de AWS, para obtener más información, consulte Elección de un tipo de instancia de nodo de Amazon EC2 óptimo. Si su clúster se ejecuta en un Outpost, solo puede seleccionar un tipo de instancia disponible en su Outpost.

    • NodeImageIdSSMParam: rellenado previamente con el parámetro de Amazon EC2 Systems Manager de una AMI optimizada recientemente para Amazon EKS para una versión de Kubernetes variable. Para utilizar otra versión secundaria de Kubernetes compatible con Amazon EKS, reemplace 1.XX por una versión admitida diferente. Recomendamos especificar la misma versión de Kubernetes que el clúster.

      Para utilizar la AMI acelerada optimizada para Amazon EKS, reemplace amazon-linux-2 por amazon-linux-2-gpu. Para utilizar la AMI Arm optimizada para Amazon EKS, reemplace amazon-linux-2 por amazon-linux-2-arm64.

      nota

      La AMI del nodo de Amazon EKS se basa en Amazon Linux. Puede realizar un seguimiento de los eventos de seguridad o privacidad de Amazon Linux 2 en el Centro de seguridad de Amazon Linux o suscribirse a la fuente RSS asociada. Los eventos de seguridad y privacidad incluyen información general del problema, qué paquetes están afectados y cómo actualizar las instancias para corregir el problema.

    • NodeImageId: (opcional) si utiliza su propia AMI personalizada (en lugar de la AMI optimizada para Amazon EKS), ingrese un ID de AMI de nodo para su Región de AWS. Si especifica un valor aquí, anula cualquier valor del campo NodeImageIdSSMParam.

    • NodeVolumeSize: especifique un tamaño de volumen raíz para los nodos en GiB.

    • NodeVolumeType: especifique un tipo de volumen raíz para sus nodos.

    • KeyName: ingrese el nombre de un par de claves SSH de Amazon EC2 que pueda utilizar para conectar mediante SSH con los nodos después de haberlos lanzado. Si aún no tiene un par de claves de Amazon EC2, puede crear uno en la AWS Management Console. Para obtener más información, consulte Pares de claves de Amazon EC2 en la Guía del usuario de Amazon EC2.

      nota

      Si no proporciona un par de claves aquí, se produce un error al crear la pila de AWS CloudFormation.

    • BootstrapArguments: hay varios argumentos opcionales que puede pasar a sus nodos. Para obtener más información, consulte la información de uso del script de arranque en GitHub. Si agrega nodos a un clúster local de Amazon EKS en AWS Outposts (en el que las instancias del plano de control de Kubernetes se ejecutan en AWS Outposts) y el clúster no tiene una conexión a Internet de entrada y salida (también conocidos como clústeres privados), debe proporcionar los siguientes argumentos de arranque (como una sola línea).

      --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}
    • DisableIMDSv1: cada nodo admite de forma predeterminada la versión 1 (IMDSv1) e IMDSv2 del servicio de metadatos de la instancia. Puede desactivar IMDSv1. Para evitar que los nodos y Pods futuros del grupo de nodos usen IMDSv1, establezca DisableIMDSv1 en true (verdadero). Para obtener más información, consulte Configuración del servicio de metadatos de instancia. Para obtener más información sobre cómo restringir el acceso en sus nodos, consulte Restringir el acceso al perfil de instancias asignado al nodo de trabajo.

    • VpcId: ingrese el ID de la VPC que ha creado. Antes de elegir una VPC, revise Requisitos y consideraciones de la VPC.

    • Subredes: si su clúster está en un Outpost, elija al menos una subred privada en la VPC. Antes de elegir las subredes, revise Requisitos y consideraciones de las subredes. Puede ver qué subredes son privadas abriendo cada enlace de subred desde la pestaña Redes de su clúster.

  6. Seleccione las opciones que desee en la página Configurar las opciones de pila y, a continuación, elija Siguiente.

  7. Seleccione la casilla de verificación situada a la izquierda de I acknowledge that AWS CloudFormation might create IAM resources. (Reconozco que podría crear recursos de IAM) y luego seleccione Create stack (Crear pila).

  8. Una vez completada la creación de la pila, selecciónela en la consola y elija Salidas.

  9. Anote el valor de NodeInstanceRoles correspondiente al grupo de nodos creado. Lo necesitará al configurar los nodos de Amazon EKS de .

Paso 2: permitir a los nodos unirse al clúster
  1. Verifique si ya tiene el ConfigMap de aws-auth.

    kubectl describe configmap -n kube-system aws-auth
  2. Si se le muestra un ConfigMap de aws-auth, actualícelo según sea necesario.

    1. Abra el icono ConfigMap para editar.

      kubectl edit -n kube-system configmap/aws-auth
    2. Añada una nueva entrada de mapRoles según sea necesario. Establezca el valor de rolearn en el valor de NodeInstanceRole que registró en el procedimiento anterior.

      [...] data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
    3. Guarde el archivo y salga del editor de texto.

  3. Si recibe un error que indica “Error from server (NotFound): configmaps "aws-auth" not found, aplique el ConfigMap bursátil.

    1. Descargue el mapa de configuración.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. En el archivo aws-auth-cm.yaml, establezca el rolearn al valor de NodeInstanceRole que ha registrado en el procedimiento anterior. Puede hacerlo con un editor de texto o reemplazando my-node-instance-role y ejecute el siguiente comando:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. Aplique la configuración. Este comando puede tardar varios minutos en finalizar.

      kubectl apply -f aws-auth-cm.yaml
  4. Observe el estado de los nodos y espere a que aparezca el estado Ready.

    kubectl get nodes --watch

    Ingrese Ctrl+C para obtener un símbolo del intérprete de comandos.

    nota

    Si recibe cualquier error de tipo de recurso o autorización, consulte Acceso denegado o no autorizado (kubectl) en el tema de solución de problemas.

    Si los nodos no se unen al clúster, consulte Los nodos no pueden unirse al clúster en Solución de problemas con los clústeres y nodos de Amazon EKS y No puede asociar nodos a un clúster en Solución de problemas de los clústeres locales de Amazon EKS en AWS Outposts.

  5. Instale el controlador de CSI de Amazon EBS. Para obtener más información, consulte Installation (Instalación) en GitHub. En la sección Set up driver permission (Configurar permiso de controlador), asegúrese de seguir las instrucciones de la opción Using IAM instance profile (Uso del perfil de instancia de IAM). Debe usar la clase de almacenamiento gp2. No se admite la clase de almacenamiento gp3.

    Para crear una clase de almacenamiento gp2 en el clúster, realice los siguientes pasos.

    1. Ejecute el siguiente comando para crear un archivo gp2-storage-class.yaml.

      cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
    2. Aplique el manifiesto al clúster.

      kubectl apply -f gp2-storage-class.yaml
  6. (Solo para nodos de GPU) Si ha elegido un tipo de instancia de GPU y la AMI acelerada optimizada para Amazon EKS, debe aplicar el complemento de dispositivo NVIDIA para Kubernetes como un DaemonSet en su clúster. Reemplace vX.X.X con la versión Plugin de dispositivo NVidia/K8S deseada antes de ejecutar el siguiente comando.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
Paso 3: acciones adicionales
  1. (Opcional) Implemente una aplicación de muestra para probar el clúster y los nodos de Linux.

  2. Si el clúster se implementa en un Outpost, omita este paso. Si el clúster se implementa en la Nube de AWS, la siguiente información es opcional. Si la política de IAM administrada AmazonEKS_CNI_Policy se asocia a su Rol de IAM de nodo de Amazon EKS, recomendamos asignarla a un rol de IAM asociado a la cuenta de servicios aws-node de Kubernetes en su lugar. Para obtener más información, consulte Configuración del complemento de CNI de Amazon VPC para utilizar IRSA.