

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

# Implementación de nodos de Windows en clústeres de EKS
<a name="windows-support"></a>

Obtenga información sobre cómo habilitar y administrar la compatibilidad con Windows para el clúster de Amazon EKS para ejecutar contenedores de Windows junto con contenedores de Linux.

## Consideraciones
<a name="_considerations"></a>

Antes de implementar nodos de Windows, tenga en cuenta lo siguiente.
+ El modo automático de EKS no es compatible con los nodos de Windows
+ Puede utilizar redes de host en nodos de Windows mediante Pods `HostProcess`. Para obtener más información, consulte [Create a Windows HostProcessPod](https://kubernetes.io/docs/tasks/configure-pod-container/create-hostprocess-pod/) en la documentación de Kubernetes.
+ Los clústeres de Amazon EKS deben contener uno o varios nodos de Linux o Fargate para ejecutar pods del sistema principal que solo se ejecutan en Linux, como CoreDNS.
+ Los registros de eventos `kubelet` y `kube-proxy` se redirigen al registro de eventos de `EKS Windows` y se establecen en un límite de 200 MB.
+ No puede usar [Asignación de los grupos de seguridad a pods individuales](security-groups-for-pods.md) con pods que se ejecuten en nodos de Windows.
+ No puede usar [redes personalizadas](cni-custom-network.md) con nodos de Windows.
+ No puede usar `IPv6` con nodos de Windows.
+ Los nodos de Windows admiten una interfaz de red elástica por nodo. De forma predeterminada, la cantidad de pods que puede ejecutar por nodo de Windows es igual a la cantidad de direcciones IP disponibles por interfaz de red elástica para el tipo de instancia del nodo, menos uno. Para obtener más información, consulte [Direcciones IP por interfaz de red por tipo de instancia](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/using-eni.html#AvailableIpPerENI) en la *Guía del usuario de Amazon EC2*.
+ En un clúster de Amazon EKS, un único servicio con un equilibrador de carga puede admitir hasta 1024 pods de backend. Cada pod tiene su propia dirección IP única. El límite anterior de 64 pods dejará de aplicarse después de [una actualización de Windows Server](https://github.com/microsoft/Windows-Containers/issues/93) a partir de la [compilación del SO 17763.2746](https://support.microsoft.com/en-us/topic/march-22-2022-kb5011551-os-build-17763-2746-preview-690a59cd-059e-40f4-87e8-e9139cc65de4).
+ No se admiten contenedores de Windows para pods de Amazon EKS en Fargate.
+ No puede utilizar Nodos híbridos de Amazon EKS con Windows como sistema operativo del host.
+ No puede recuperar registros del pod de `vpc-resource-controller`. Anteriormente podía hacerlo cuando se implementaba el controlador en el plano de datos.
+ Hay un periodo de enfriamiento antes de que se asigne una dirección `IPv4` a un nuevo pod. Esto evita que el tráfico fluya hacia un pod anterior con la misma dirección `IPv4` debido a reglas caducadas de `kube-proxy`.
+ El origen del controlador se administra en GitHub. Para registrar problemas con el controlador u ofrecer ayuda con estos, visite el [proyecto](https://github.com/aws/amazon-vpc-resource-controller-k8s) en GitHub.
+ Al especificar un ID de AMI personalizado para los grupos de nodos administrados de Windows, agregue `eks:kube-proxy-windows` al mapa de configuración del Autenticador de AWS IAM. Para obtener más información, consulte [Límites y condiciones al especificar un ID de AMI](launch-templates.md#mng-ami-id-conditions).
+ Si conservar las direcciones IPv4 disponibles es fundamental para su subred, consulte la [Guía de prácticas recomendadas de EKS: Administración de direcciones IP de redes de Windows](https://aws.github.io/aws-eks-best-practices/windows/docs/networking/#ip-address-management) para obtener orientación.
+ Consideraciones para las entradas de acceso de EKS
  + Las entradas de acceso para su uso con los nodos de Windows necesitan el tipo de `EC2_WINDOWS`. Para obtener más información, consulte [Creación de entradas de acceso](creating-access-entries.md).

    Para crear una entrada de acceso para un nodo de Windows:

    ```
    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/<role-name> --type EC2_Windows
    ```

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster existente.
+ El clúster debe tener al menos un nodo de Linux o pod de Fargate (recomendamos al menos dos) para ejecutar CoreDNS. Si habilita la compatibilidad con Windows heredado, debe utilizar un nodo de Linux (no puede usar un pod de Fargate) para ejecutar CoreDNS.
+ [Un rol de IAM de clúster de Amazon EKS](cluster-iam-role.md) existente.

## Habilitación de la compatibilidad con Windows
<a name="enable-windows-support"></a>

1. Si no tiene nodos de Amazon Linux en su clúster y utiliza grupos de seguridad para pods, avance al paso siguiente. De lo contrario, confirme que la política administrada `AmazonEKSVPCResourceController` esté adjunta al [rol del clúster](cluster-iam-role.md). Reemplace *eksClusterRole* por el nombre del rol del clúster.

   ```
   aws iam list-attached-role-policies --role-name eksClusterRole
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   {
       "AttachedPolicies": [
           {
               "PolicyName": "AmazonEKSClusterPolicy",
               "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
           },
           {
               "PolicyName": "AmazonEKSVPCResourceController",
               "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController"
           }
       ]
   }
   ```

   Si la política está adjunta, como en la salida anterior, omita el siguiente paso.

1. Agregue la política de administrada ** [AmazonEKSVPCResourceController](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSVPCResourceController.html) ** al [rol de IAM asociado a su clúster de Amazon EKS](cluster-iam-role.md). Reemplace *eksClusterRole* por el nombre del rol del clúster.

   ```
   aws iam attach-role-policy \
     --role-name eksClusterRole \
     --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController
   ```

1. Actualice el ConfigMap de la CNI de la VPC para habilitar el IPAM de Windows. Tenga en cuenta que si la CNI de la VPC está instalada en el clúster mediante un gráfico de Helm o como un complemento de Amazon EKS, es posible que no pueda modificar directamente el ConfigMap. Para obtener información sobre la configuración de complementos de Amazon EKS, consulte [Determinación de los campos que se pueden personalizar para los complementos de Amazon EKS](kubernetes-field-management.md).

   1. Cree un archivo llamado *vpc-resource-controller-configmap.yaml* con el siguiente contenido.

      ```
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: amazon-vpc-cni
        namespace: kube-system
      data:
        enable-windows-ipam: "true"
      ```

   1. Aplique el `ConfigMap` en su clúster.

      ```
      kubectl apply -f vpc-resource-controller-configmap.yaml
      ```

1. Si su clúster tiene el modo de autenticación configurado para habilitar el configmap de `aws-auth`:
   + Verifique que el `ConfigMap` de `aws-auth` contenga una asignación para que el rol de instancia del nodo de Windows incluya el grupo de permisos RBAC de `eks:kube-proxy-windows`. Puede verificar ejecutando el siguiente comando:

     ```
     kubectl get configmap aws-auth -n kube-system -o yaml
     ```

     Un ejemplo de salida sería el siguiente.

     ```
     apiVersion: v1
     kind: ConfigMap
     metadata:
       name: aws-auth
       namespace: kube-system
     data:
       mapRoles: |
         - groups:
           - system:bootstrappers
           - system:nodes
           - eks:kube-proxy-windows # This group is required for Windows DNS resolution to work
           rolearn: arn:aws:iam::111122223333:role/eksNodeRole
           username: system:node:{{EC2PrivateDNSName}}
     [...]
     ```

     `eks:kube-proxy-windows` debería aparecer en la lista de grupos. Si el grupo no está especificado, debe actualizar `ConfigMap` o crearlo para incluir el grupo requerido. Para obtener más información sobre `ConfigMap` de `aws-auth`, consulte [Aplique el `ConfigMap` de `aws-auth` en su clúster](auth-configmap.md#aws-auth-configmap).

1. Si su clúster tiene el modo de autenticación configurado para deshabilitar el configmap de `aws-auth`, puede usar las entradas de acceso de EKS. Cree un nuevo rol de nodo para usarlo con las instancias de Windows, y EKS creará automáticamente una entrada de acceso de tipo `EC2_WINDOWS`.

## Implementación de pods de Windows
<a name="windows-support-pod-deployment"></a>

Cuando implementa pods en el clúster, debe especificar el sistema operativo que utilizan si ejecuta una combinación de tipos de nodos.

Para pods de Linux, use el siguiente texto del selector de nodos en sus manifiestos.

```
nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: amd64
```

Para pods de Windows, use el siguiente texto del selector de nodos en sus manifiestos.

```
nodeSelector:
        kubernetes.io/os: windows
        kubernetes.io/arch: amd64
```

Puede implementar una [aplicación de muestra](sample-deployment.md) para ver los selectores de nodos en uso.

## Soporte para una mayor densidad de pods en los nodos de Windows
<a name="windows-support-pod-density"></a>

En Amazon EKS, a cada pod se le asigna una dirección `IPv4` desde su VPC. Debido a esto, la cantidad de pods que puede implementar en un nodo está limitada por las direcciones IP disponibles, incluso si hay recursos suficientes para ejecutar más pods en el nodo. Dado que un nodo de Windows solo admite una interfaz de red elástica, de forma predeterminada, la cantidad máxima de direcciones IP disponibles en un nodo de Windows es igual a:

```
Number of private IPv4 addresses for each interface on the node - 1
```

Se utiliza una dirección IP como dirección IP principal de la interfaz de red, por lo que no se puede asignar a pods.

Puede habilitar una mayor densidad de pods en los nodos de Windows si habilita la delegación de prefijos de IP. Esta característica le permite asignar un prefijo `/28` `IPv4` a la interfaz de red principal, en lugar de asignar direcciones `IPv4` secundarias. La asignación de un prefijo IP aumenta el número máximo de direcciones `IPv4` disponibles en el nodo a:

```
(Number of private IPv4 addresses assigned to the interface attached to the node - 1) * 16
```

Con esta cantidad significativamente mayor de direcciones IP disponibles, las direcciones IP disponibles no deberían limitar su capacidad para escalar la cantidad de pods en sus nodos. Para obtener más información, consulte [Asignación de más direcciones IP a los nodos de Amazon EKS con prefijos](cni-increase-ip-addresses.md).