Lanzamiento de nodos de Windows autoadministrados - Amazon EKS

Lanzamiento de nodos de Windows autoadministrados

En este tema, se describe cómo puede lanzar un grupo de escalado automático de nodos de Windows que se registrará con el clúster de Amazon EKS. Una vez que los nodos se hayan unido al clúster, puede implementar aplicaciones de Kubernetes en ellos.

importante
  • Los nodos de Amazon EKS son instancias estándar de Amazon EC2 y se les facturarán conforme a los precios ordinarios de las instancias de Amazon EC2. Para obtener más información, consulte Precios de Amazon EC2.

  • Puede lanzar nodos de Windows en clústeres extendidos de Amazon EKS en AWS Outposts, pero no puede lanzarlos en clústeres locales en AWS Outposts. Para obtener más información, consulte Amazon EKS en AWS Outposts.

Habilite la compatibilidad con Windows para su clúster. Recomendamos que revise las consideraciones importantes antes de lanzar un grupo de nodos de Windows. Para obtener más información, consulte Habilitación de la compatibilidad con Windows.

Puede lanzar nodos de Windows autoadministrados con eksctl o la AWS Management Console.

eksctl
Para lanzar nodos de Windows autoadministrados mediante eksctl

En este procedimiento, se presupone que ha instalado eksctl y que su versión de eksctl es al menos 0.172.0. Puede verificar la versión con el siguiente comando.

eksctl version

Para obtener instrucciones sobre cómo instalar o actualizar eksctl, consulte Instalación en la documentación de eksctl.

nota

Este procedimiento solo es válido para los clústeres que se crearon con eksctl.

  1. (Opcional) Si la política de IAM administrada AmazonEKS_CNI_Policy (si tiene un clúster IPv4) o la AmazonEKS_CNI_IPv6_Policy (que usted haya creado si tiene un clúster IPv6) están adjuntas a su Rol de IAM de nodo de Amazon EKS, le recomendamos asignarlas, en cambio, a un rol de IAM que asocie a la cuenta de servicio de aws-node de Kubernetes. Para obtener más información, consulte Configuración de Amazon VPC CNI plugin for Kubernetes para utilizar los roles de IAM en las cuentas de servicio (IRSA).

  2. En este procedimiento, se presupone que dispone de un clúster existente. Si aún no tiene un clúster de Amazon EKS ni un grupo de nodos de Amazon Linux al cual añadirle un grupo de nodos de Windows, le recomendamos que siga la guía Introducción a Amazon EKS: eksctl. En esta se proporciona una explicación completa para crear un clúster de Amazon EKS con nodos de Amazon Linux.

    Cree el grupo de nodos con el siguiente comando. Reemplace region-code por la Región de AWS en la que se encuentra el clúster. 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 alfabético y no puede tener más de 100 caracteres. Reemplace ng-windows 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. Para Kubernetes versión 1.24 o posterior, puede reemplazar 2019 por 2022 para usar Windows Server 2022. Sustituya el resto de example values por sus propios valores.

    importante

    Para implementar un grupo de nodos en las subredes de AWS Outposts, AWS Wavelength o AWS Local Zones, no pase las subredes de AWS Outposts, Wavelength o Lozal Zones al crear el clúster. Cree el grupo de nodos con un archivo de configuración, que especifique las subredes de AWS Outposts, Wavelength o Local Zone. Para obtener más información, consulte Crear un grupo de nodos a partir de un archivo de Config y el Esquema de archivo de configuración en la documentación de eksctl.

    eksctl create nodegroup \ --region region-code \ --cluster my-cluster \ --name ng-windows \ --node-type t2.large \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed=false \ --node-ami-family WindowsServer2019FullContainer
    nota
    • Si los nodos no se unen al clúster, consulte Los nodos no pueden unirse al clúster en la Guía de solución de problemas.

    • Para ver las opciones disponibles para los comandos eksctl, ingrese el siguiente comando.

      eksctl command -help

    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 Windows.

  4. Se recomienda bloquear el acceso del Pod al IMDS si se cumplen las siguientes condiciones:

    • Tiene previsto asignar roles de IAM a todas sus cuentas de servicio de Kubernetes para que los Pods solo tengan los permisos mínimos que necesitan.

    • Ninguno de los Pods del clúster requiere acceso al servicio de metadatos de la instancia de Amazon EC2 (IMDS) por otros motivos, como la recuperación de la Región de AWS actual.

    Para obtener más información, consulte Restringir el acceso al perfil de instancias asignado al nodo de trabajo.

AWS Management Console
Requisitos previos
Paso 1: lanzar nodos de Windows autoadministrados mediante la AWS Management Console
  1. Espere a que el estado del clúster sea ACTIVE. Si lanza los nodos antes de que el clúster esté activo, los nodos no pueden registrarse con el clúster y debe volver a lanzarlos.

  2. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  3. Elija Crear pila.

  4. En Especificar plantilla, seleccione URL de Amazon S3.

  5. Copie la siguiente URL y péguela en la URL de Amazon S3.

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2023-02-09/amazon-eks-windows-nodegroup.yaml
  6. Seleccione Siguiente dos veces.

  7. En la página Creación rápida de pila, ingrese los siguientes parámetros según corresponda:

    • Nombre de pila: elija un nombre para la pila de AWS CloudFormation. Por ejemplo, puede llamarla my-cluster-nodes.

    • ClusterName: ingrese el nombre que usó al crear el clúster de Amazon EKS.

      importante

      Este nombre debe coincidir exactamente con el nombre que utilizó en Paso 1: crear el clúster de Amazon EKS. De lo contrario, los nodos no podrán unirse al clúster.

    • ClusterControlPlaneSecurityGroup: elija el grupo de seguridad de la salida de AWS CloudFormation que generó al crear la VPC.

      En los pasos siguientes se muestra un método 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 escalado automático que se crea para los 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.

    • NodeAutoScalingGroupMinSize: ingrese el número mínimo de nodos al que se puede 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. Para obtener más información, consulte Elección de un tipo de instancia de Amazon EC2.

      nota

      Los tipos de instancias compatibles con la versión más reciente del Amazon VPC CNI plugin for Kubernetes se muestran en vpc_ip_resource_limit.go en GitHub. Es posible que tenga que actualizar la versión de CNI para utilizar los tipos de instancia admitidos más recientes. Para obtener más información, consulte Trabajar con el complemento Amazon VPC CNI plugin for Kubernetes de Amazon EKS.

    • NodeImageIdSSMParam: contiene un valor especificado previamente, que es el parámetro de Amazon EC2 Systems Manager del ID de la AMI de Windows Core optimizada para Amazon EKS más reciente recomendada. Para utilizar la versión completa de Windows, sustituya Core por Full.

    • 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 para este campo, anula cualquier valor del campo NodeImageIdSSMParam.

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

    • 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 sobre pares de claves, consulte Pares de claves de Amazon EC2 en la Guía del usuario de Amazon EC2 para instancias de Windows.

      nota

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

    • BootstrapArguments: especifique los argumentos opcionales que se van a pasar al script de arranque del nodo, como los argumentos de kubelet adicionales mediante -KubeletExtraArgs.

    • 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 utilicen MDSv1, defina DisableIMDSv1 en true (verdadero). Para obtener más información, consulte Configurar el servicio de metadatos de instancia.

    • VpcId: seleccione el ID de la VPC que creó.

    • NodeSecurityGroups: seleccione el grupo de seguridad que se creó para su grupo de nodos de Linux cuando creó su VPC. Si sus nodos de Linux tienen más de un grupo de seguridad adjuntado a ellos, especifíquelos a todos aquí. Esto, por ejemplo, si el grupo de nodos Linux se creó con eksctl.

    • Subredes: elija las subredes que creó. Si creó la VPC siguiendo los pasos que se describen en Creación de una VPC para su clúster de Amazon EKS, especifique solo las subredes privadas en la VPC en las que desea lanzar los nodos.

      importante
      • Si alguna de las subredes es pública, debe tener habilitada la configuración de asignación automática de direcciones IP públicas. Si la configuración no está habilitada para la subred pública, los nodos que implemente en dicha subred pública no tendrán asignada una dirección IP pública y no podrán comunicarse con el clúster u otros servicios de AWS. Si la subred se implementó antes del 26 de marzo de 2020 mediante cualquiera de las plantillas de VPC de AWS CloudFormation de Amazon EKS o mediante eksctl, la asignación automática de direcciones IP públicas se deshabilitará en las subredes públicas. Para obtener información acerca de cómo habilitar la asignación de direcciones IP públicas en una subred, consulte Modificación del atributo de direcciones IPv4 públicas de su subred. Si el nodo se implementa en una subred privada, podrá comunicarse con el clúster y otros servicios de AWS a través de una puerta de enlace NAT.

      • Si las subredes no tienen acceso a Internet, asegúrese de que conoce las consideraciones y los pasos adicionales en Requisitos del clúster privado.

      • Si selecciona las subredes de AWS Outposts, Wavelength o Local Zones, las subredes no se deben haber pasado cuando creó el clúster.

  8. Confirme que la pila pueda crear recursos de IAM y, a continuación, seleccione Crear pila.

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

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

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 nuevas entradas de mapRoles según sea necesario. Establezca los valores de rolearn en los valores de NodeInstanceRole que registró en los procedimientos anteriores.

      [...] data: mapRoles: | - rolearn: <ARN of linux instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of windows instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows [...]
    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-windows.yaml
    2. En el archivo aws-auth-cm-windows.yaml, establezca los valores de rolearn a los valores NodeInstanceRole que ha registrado en el procedimiento anterior. Puede hacerlo con un editor de texto o reemplazando example values y ejecutando el siguiente comando:

      sed -i.bak -e 's|<ARN of linux instance role (not instance profile)>|my-node-linux-instance-role|' \ -e 's|<ARN of windows instance role (not instance profile)>|my-node-windows-instance-role|' aws-auth-cm-windows.yaml
      importante
      • No modifique ninguna otra línea de este archivo.

      • No utilice el mismo rol de IAM para los nodos de Windows y Linux.

    3. Aplique la configuración. Este comando podría tardar varios minutos en finalizar.

      kubectl apply -f aws-auth-cm-windows.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 la guía de solución de problemas.

Paso 3: acciones adicionales
  1. (Opcional) Implemente una aplicación de muestra para probar el clúster y los nodos de Windows.

  2. (Opcional) Si la política de IAM administrada AmazonEKS_CNI_Policy (si tiene un clúster IPv4) o la AmazonEKS_CNI_IPv6_Policy (que usted haya creado si tiene un clúster IPv6) están adjuntas a su Rol de IAM de nodo de Amazon EKS, le recomendamos asignarlas, en cambio, a un rol de IAM que asocie a la cuenta de servicio de aws-node de Kubernetes. Para obtener más información, consulte Configuración de Amazon VPC CNI plugin for Kubernetes para utilizar los roles de IAM en las cuentas de servicio (IRSA).

  3. Se recomienda bloquear el acceso del Pod al IMDS si se cumplen las siguientes condiciones:

    • Tiene previsto asignar roles de IAM a todas sus cuentas de servicio de Kubernetes para que los Pods solo tengan los permisos mínimos que necesitan.

    • Ninguno de los Pods del clúster requiere acceso al servicio de metadatos de la instancia de Amazon EC2 (IMDS) por otros motivos, como la recuperación de la Región de AWS actual.

    Para obtener más información, consulte Restringir el acceso al perfil de instancias asignado al nodo de trabajo.