Aumento de las direcciones IP disponibles para su nodo de Amazon EKS - Amazon EKS

Aumento de las direcciones IP disponibles para su nodo de Amazon EKS

Puede aumentar la cantidad de direcciones IP que los nodos pueden asignar a los Pods al asignar prefijos de IP, en lugar de asignar direcciones IP secundarias individuales a sus nodos.

Realice los siguientes pasos antes de comenzar el procedimiento:

  • Consulte las consideraciones.

  • Necesita un clúster existente. Para implementar uno, consulte Creación de un clúster de Amazon EKS.

  • Las subredes en las que se encuentran sus nodos de Amazon EKS deben tener suficientes bloques contiguos /28 (para clústeres IPv4) o /80 (para clústeres IPv6) enrutamiento entre dominios sin clases (CIDR). Solo puede tener nodos Linux en un clúster IPv6. El uso de prefijos IP puede fallar si las direcciones IP están dispersas por toda la subred CIDR. Le recomendamos lo siguiente:

    • Utilizar una reserva CIDR de subred para que, aunque se siga utilizando alguna dirección IP dentro del rango reservado, una vez publicada, no se reasignen las direcciones IP. Esto garantiza que los prefijos estén disponibles para su asignación sin segmentación.

    • Utilice nuevas subredes que se usen específicamente para ejecutar las cargas de trabajo a las que se asignan los prefijos IP. Tanto las cargas de trabajo Windows como las Linux pueden ejecutarse en la misma subred cuando se asignan prefijos de IP.

  • Para asignar prefijos de IP a sus nodos, sus nodos deben estar basados en AWS Nitro. Las instancias que no están basadas en Nitro continúan asignando direcciones IP secundarias individuales, pero tienen una cantidad significativamente menor de direcciones IP para asignar a las instancias de Pods que las instancias Nitro-based.

  • Solo para clústeres con nodos Linux: si su clúster está configurado para la familia IPv4, debe tener instalada la versión 1.9.0 o posterior del complemento Amazon VPC CNI plugin for Kubernetes. Puede comprobar su versión actual con el siguiente comando.

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    Si su clúster está configurado para la familia IPv6, debe tener instalada la versión 1.10.1 o del complemento. Si la versión de su complemento es anterior a las versiones requeridas, debe actualizarlo. Para obtener más información, consulte las secciones de actualización del artículo Asignación de direcciones IP a pods con CNI de Amazon VPC.

  • Solo para clústeres con nodos de Windows:

    • El clúster y su versión de la plataforma deben ser iguales o posteriores a las versiones de la siguiente tabla. Para actualizar la versión de su clúster, utilice Actualización del clúster existente a la nueva versión de Kubernetes. Si su clúster no tiene la versión mínima de la plataforma, no puede asignar prefijos IP a sus nodos hasta que Amazon EKS haya actualizado la versión de la plataforma.

      Versión de Kubernetes Versión de la plataforma

      1.27

      eks.3

      1.26

      eks.4

      1.25

      eks.5

      Para verificar su versión actual de Kubernetes y de la versión de la plataforma, reemplace my-cluster en el siguiente comando por el nombre de su clúster y luego ejecute el comando modificado: aws eks describe-cluster --name my-cluster --query 'cluster.{"Kubernetes Version": version, "Platform Version": platformVersion}'.

    • Windows habilita la compatibilidad con su clúster. Para obtener más información, consulte Implementación de nodos de Windows en clústeres de EKS.

      1. Configure el clúster para asignar prefijos de direcciones IP a los nodos. Complete el procedimiento en la pestaña que coincida con el sistema operativo de su nodo.

        Linux
        1. Habilite el parámetro a fin de asignar prefijos a las interfaces de red para el DaemonSet de CNI de Amazon VPC. Cuando implementa un 1.21 clúster posterior, la versión 1.10.1 o posterior del complemento Amazon VPC CNI plugin for Kubernetes se implementa con él. Si ha creado el clúster con la familia IPv6, este ajuste se configuró en true de forma predeterminada. Si ha creado el clúster con la familia IPv4, este ajuste se configuró en false de forma predeterminada.

          kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
          importante

          Incluso si la subred tiene direcciones IP disponibles, si la subred no tiene disponible ningún bloque /28 contiguo, verá el siguiente error en los registros Amazon VPC CNI plugin for Kubernetes.

InsufficientCidrBlocks: The specified subnet does not have enough free cidr blocks to satisfy the request

Esto puede ocurrir debido a la fragmentación de las direcciones IP secundarias existentes distribuidas por una subred. Para resolver este error, cree una nueva subred y lance Pods allí, o utilice una reserva CIDR de subred de Amazon EC2 para reservar espacio dentro de una subred para utilizarla con la asignación de prefijos. Para obtener más información, consulte Reservas de la subred de CIDR en la Guía del usuario de Amazon VPC. … Si planea implementar un grupo de nodos administrado sin una plantilla de lanzamiento o con una plantilla de lanzamiento en la que no ha especificado un ID de AMI, y utiliza una versión del Amazon VPC CNI plugin for Kubernetes igual o posterior a las versiones enumeradas en los requisitos previos, continúe con el siguiente paso. Los grupos de nodos administrados calculan automáticamente el número máximo de Pods.

+ Si va a implementar un grupo de nodos autoadministrado o un grupo de nodos administrados con una plantilla de lanzamiento en la que ha especificado un ID de AMI, debe determinar el número máximo de Pods recomendados por Amazon EKS para los nodos. Siga las instrucciones que aparecen en Cantidad máxima de pods recomendada por Amazon EKS para cada tipo de instancia de Amazon EC2, y con la adición de --cni-prefix-delegation-enabled al paso 3. Observe la salida de su uso en un paso posterior.

+ IMPORTANTE: Los grupos de nodos administrados aplican un número máximo en el valor de maxPods. Para las instancias con menos de 30 vCPU, el número máximo es 110 y para todas las demás instancias el número máximo es 250. Este número máximo se aplica independientemente de si la delegación de prefijos está habilitada o no. …​ Si utiliza un clúster 1.21 o posterior configurado para IPv6, continúe con el siguiente paso.

+ Especifique los parámetros en una de las siguientes opciones. Para determinar qué opción es adecuada para usted y qué valor debe proporcionarle, consulte WARM_PREFIX_TARGET, WARM_IP_TARGET y MINIMUM_IP_TARGET en GitHub.

Puede reemplazar los valores de ejemplo por un valor mayor a cero.

+ ** WARM_PREFIX_TARGET

+

kubectl set env ds aws-node -n kube-system WARM_PREFIX_TARGET=1
  • WARM_IP_TARGET o MINIMUM_IP_TARGET: si se establece este valor, sustituye a cualquier valor establecido para WARM_PREFIX_TARGET.

    kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=5
kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=2
  1. Cree uno de los siguientes tipos de grupos de nodos con al menos un tipo de instancia Nitro Amazon Linux 2 de Amazon EC2. A fin de obtener una lista de los tipos de instancias de Nitro, consulte Instancias integradas en el sistema Nitro en la Guía del usuario de Amazon EC2. Esta capacidad no es compatible con Windows. En el caso de las opciones que incluyen 110, reemplácelo por el valor del paso tres (recomendado) o un valor propio.

    • Autoadministrado: implementa el grupo de nodos según las instrucciones que aparecen en Creación de nodos autoadministrados de Amazon Linux. Especifique el siguiente texto para el parámetro BootstrapArguments.

      --use-max-pods false --kubelet-extra-args '--max-pods=110'

      Si utiliza eksctl para crear el grupo de nodos, utilice el siguiente comando.

      eksctl create nodegroup --cluster my-cluster --managed=false --max-pods-per-node 110
    • Administrado: implemente el grupo de nodos mediante una de las siguientes opciones:

      • Sin una plantilla de lanzamiento o con una plantilla de lanzamiento sin un ID de AMI especificado: complete el procedimiento indicado en Creación de un grupo de nodos administrados para un clúster. Los grupos de nodos administrados calculan automáticamente el valor max-pods recomendados por Amazon EKS.

      • Con una plantilla de lanzamiento con un ID de AMI especificado: en la plantilla de lanzamiento, especifique un ID de AMI optimizada para Amazon EKS o una AMI personalizada creada a partir de la AMI optimizada para Amazon EKS y, a continuación, implemente el grupo de nodos mediante una plantilla de lanzamiento y proporcione los siguientes datos de usuario en la plantilla de lanzamiento. Estos datos de usuario pasan los argumentos en el archivo bootstrap.sh. Para obtener más información acerca del archivo del proceso de arranque, consulte bootstrap.sh en GitHub.

        /etc/eks/bootstrap.sh my-cluster \ --use-max-pods false \ --kubelet-extra-args '--max-pods=110'

        Si utiliza eksctl para crear el grupo de nodos, utilice el siguiente comando.

        eksctl create nodegroup --cluster my-cluster --max-pods-per-node 110

        Si ha creado una AMI personalizada, pero no a partir de la AMI optimizada de Amazon EKS, debe crear personalmente la configuración.

        nota

        Si también desea asignar direcciones IP a Pods de una subred diferente a la de la instancia, debe habilitar la capacidad en este paso. Para obtener más información, consulte Implementación de pods en subredes alternativas con redes personalizadas.

        Windows
  2. Habilite la asignación de prefijos IP.

    1. Abra el ConfigMap de amazon-vpc-cni para editar.

      kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
    2. Añada la siguiente línea a la sección data:

      enable-windows-prefix-delegation: "true"
    3. Guarde el archivo y cierre el editor.

    4. Confirme que la línea se agregó a ConfigMap.

      kubectl get configmap -n kube-system amazon-vpc-cni -o "jsonpath={.data.enable-windows-prefix-delegation}"

      Si la salida devuelta no es true, es posible que haya ocurrido un error. Intente completar el paso de nuevo.

      importante

      Incluso si su subred tiene direcciones IP disponibles, si la subred no tiene bloques /28 contiguos disponibles, verá el siguiente error en los eventos del nodo.

"failed to allocate a private IP/Prefix address: InsufficientCidrBlocks: The specified subnet does not have enough free cidr blocks to satisfy the request"

Esto puede ocurrir debido a la fragmentación de las direcciones IP secundarias existentes distribuidas por una subred. Para resolver este error, cree una nueva subred y lance Pods allí, o utilice una reserva CIDR de subred de Amazon EC2 para reservar espacio dentro de una subred para utilizarla con la asignación de prefijos. Para obtener más información, consulte Reservas de la subred de CIDR en la Guía del usuario de Amazon VPC. … (Opcional) Especifique una configuración adicional para controlar el comportamiento de escalado previo y dinámico del clúster. Para obtener más información, consulte Opciones de configuración con modo de delegación de prefijo en Windows en GitHub.

+ …​. Abra el ConfigMap de amazon-vpc-cni para editar.

+

kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
  1. Reemplace los valores de ejemplo con un valor mayor a cero y agregue las entradas que necesite a la sección de data del ConfigMap. Si establece un valor para warm-ip-target o minimum-ip-target, el valor anula cualquier valor establecido para warm-prefix-target.

    warm-prefix-target: "1" warm-ip-target: "5" minimum-ip-target: "2"
  2. Guarde el archivo y cierre el editor.

    1. Cree grupos de nodos Windows con al menos un tipo de instancia Nitro de Amazon EC2. Para obtener una lista de los tipos de instancias Nitro, consulte Instancias integradas en el sistema Nitro en la Guía del usuario de Amazon EC2. De forma predeterminada, la cantidad máxima de Pods que puede implementar en un nodo es 110. Si desea aumentar o disminuir ese número, especifique lo siguiente en los datos de usuario para la configuración de arranque. Reemplace max-pods-quantity con su valor máximo de pods.

      -KubeletExtraArgs '--max-pods=max-pods-quantity'

      Si está implementando grupos de nodos administrados, esta configuración debe agregarse en la plantilla de lanzamiento. Para obtener más información, consulte Personalización de nodos administrados con plantillas de lanzamiento. Para obtener más información sobre los parámetros de configuración para el script de arranque de Windows, consulte Parámetros de configuración del script de arranque. Una vez que se implementan los nodos, consulte los nodos del clúster.

      +

      kubectl get nodes

      + Un ejemplo de una salida sería el siguiente.

      +

      NAME STATUS ROLES AGE VERSION ip-192-168-22-103.region-code.compute.internal Ready <none> 19m v1.XX.X-eks-6b7464 ip-192-168-97-94.region-code.compute.internal Ready <none> 19m v1.XX.X-eks-6b7464
      1. Describa uno de los nodos para determinar el valor de max-pods para el nodo y el número de direcciones IP disponibles. Reemplace 192.168.30.193 con la dirección IPv4 en el nombre de uno de sus nodos devueltos en la salida anterior.

        kubectl describe node ip-192-168-30-193.region-code.compute.internal | grep 'pods\|PrivateIPv4Address'

        Un ejemplo de salida sería el siguiente.

        pods: 110 vpc.amazonaws.com/PrivateIPv4Address: 144

        En el resultado anterior, 110 es el número máximo de Pods que Kubernetes implementará en el nodo, aunque haya 144 direcciones IP disponibles.