Clústeres en AWS

En este tema se describen las formas de configurar clústeres de carga de trabajo de Tanzu Kubernetes Grid (TKG) para que utilicen funciones específicas de AWS y que no se pueden configurar por completo en el archivo de configuración plano del clúster o las especificaciones de objetos de estilo Kubernetes.

Para obtener información sobre cómo configurar clústeres de carga de trabajo en AWS mediante especificaciones de objetos y archivos de configuración, consulte Archivos de configuración del clúster de AWS.

Importante

Tanzu Kubernetes Grid v2.4.x es la última versión de TKG que admite la creación de clústeres de carga de trabajo de TKG en AWS. La capacidad para crear clústeres de carga de trabajo de TKG en AWS se eliminará en la versión 2.5 de Tanzu Kubernetes Grid.

A partir de ahora, VMware recomienda utilizar Tanzu Mission Control para crear clústeres de AWS EKS nativos en lugar de crear nuevos clústeres de carga de trabajo de TKG en AWS. Para obtener información sobre cómo crear clústeres nativos de AWS EKS con Tanzu Mission Control, consulte Gestión del ciclo de vida de los clústeres de AWS EKS en la documentación de Tanzu Mission Control.

Para obtener más información, consulte Desuso de la administración de TKG y los clústeres de cargas de trabajo en AWS y Azure en las Notas de la versión de VMware Tanzu Kubernetes Grid v2.4.

Agregar etiquetas de subred para una VPC existente

Si desea crear servicios de tipo LoadBalancer en el clúster, debe agregar la etiqueta kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared a la subred o las subredes públicas que desea utilizar para el clúster de carga de trabajo.

Agregar la etiqueta kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared a las subredes o subredes públicas permite crear servicios de tipo LoadBalancer después de implementar el clúster. Para agregar esta etiqueta y, a continuación, implementar el clúster, siga los pasos que se indican a continuación:

  1. Recopile el identificador o los identificadores de la subred o las subredes públicas dentro de la VPC que desea utilizar para el clúster. Para implementar un clúster de carga de trabajo prod, debe proporcionar tres subredes.

  2. Cree la etiqueta requerida ejecutando el siguiente comando:

    aws ec2 create-tags --resources YOUR-PUBLIC-SUBNET-ID-OR-IDS --tags Key=kubernetes.io/cluster/YOUR-CLUSTER-NAME,Value=shared
    

    Donde:

    • YOUR-PUBLIC-SUBNET-ID-OR-IDS es el identificador o los identificadores de la subred o las subredes públicas que recopiló en el paso anterior.
    • YOUR-CLUSTER-NAME es el nombre del clúster de carga de trabajo que desea crear.

    Por ejemplo:

    aws ec2 create-tags --resources subnet-00bd5d8c88a5305c6 subnet-0b93f0fdbae3436e8 subnet-06b29d20291797698 --tags Key=kubernetes.io/cluster/my-cluster,Value=shared
    
  3. Configurar el clúster.

  4. Cree el clúster. Por ejemplo:

    tanzu cluster create my-cluster -f my-cluster-config.yaml
    

Implementar un clúster habilitado para GPU

Para implementar un clúster de carga de trabajo que aproveche las máquinas virtuales basadas en GPU de NVIDIA disponibles en AWS:

  1. En el archivo de configuración para el clúster, establezca NODE_MACHINE_TYPE, para los nodos de trabajo, en un tipo de máquina virtual compatible con GPU, como g4dn.8xlarge.

  2. Implemente el clúster con el archivo de configuración del clúster:

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    
  3. Instale una directiva de clúster de GPU y un operador de GPU en el clúster:

    1. Establezca el contexto kubectl context al clúster, si aún no es el contexto actual.

    2. Descargue los recursos de GPU de NVIDIA necesarios del repositorio de AWS del proveedor de API del clúster y guárdelos en el directorio actual:

    3. Aplique la directiva del clúster:

      kubectl apply clusterpolicy-crd.yaml
      
    4. Aplique el operador de GPU:

      kubectl apply gpu-operator-components.yaml
      
  4. Ejecute kubectl get pods -A. Debería ver listados para los pods gpu-operator- en el espacio de nombres default y los pods nvidia- en el espacio de nombres gpu-operator-resources.

  5. Para probar el clúster habilitado para GPU, ejecute la prueba de adición de vectores CUDA VectorAdd en la documentación de NVIDIA.

  6. Para probar el operador de GPU:

    1. Escale verticalmente el recuento de nodos de trabajo del clúster de carga de trabajo:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. Vuelva a ejecutar kubectl get pods -A. Debería ver más pods gpu-operator- y nvidia- en la lista para los nodos agregados.

Implementar clústeres en diferentes cuentas de AWS

Puede implementar clústeres de carga de trabajo en varias cuentas de AWS si los clústeres de Kubernetes están orientados a Internet o se implementan en VPC emparejadas a través del emparejamiento de VPC o la puerta de enlace de tránsito de AWS.

Para preparar una cuenta de AWS secundaria para implementar clústeres de carga de trabajo, prepare la cuenta secundaria y configure las relaciones de confianza entre esta cuenta y la cuenta del clúster de administración de la siguiente manera:

Crear funciones de IAM

En primer lugar, debe configurar las funciones de IAM en la cuenta de AWS secundaria.

Para ello, utilice el comando tanzu mc permissions aws. Siga el mismo proceso que se describe en la sección Crear recursos de IAM de Implementar clústeres de administración desde un archivo de configuración.

Habilitar confianza entre cuentas

Para habilitar un clúster de administración en una cuenta de AWS para implementar clústeres de carga de trabajo en una cuenta de AWS secundaria, primero debe configurar una directiva de confianza en la cuenta secundaria.

Para ello, busque el controllers.tkg.cloud.vmware.com creado por tanzu mc permissions aws en la cuenta secundaria. A continuación, edite la relación de confianza de la siguiente manera:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Principal": {
        "AWS": "arn:aws:iam::MANAGEMENT-ACCOUNT-ID:root"
      },
    }
  ]
}

Donde MANAGEMENT-ACCOUNT-ID es el identificador de la cuenta de AWS en el que se implementa el clúster de administración.

Habilitar el clúster de administración para que asuma la función de IAM

Después de configurar la directiva de confianza, habilite la función de IAM control-plane.tkg.cloud.vmware.com de la cuenta del clúster de administración para que asuma la función de IAM controllers.tkg.cloud.vmware.com en la cuenta secundaria.

Para ello, adjunte una nueva política o agregue una política en línea de la siguiente manera:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
    }
  ]
}

Donde SECONDARY-ACCOUNT-ID es el identificador de cuenta de AWS de la cuenta secundaria.

Crear un recurso AWSClusterRoleIdentity en el clúster de administración

Para configurar la nueva función de IAM entre cuentas en el clúster de administración, debe crear un nuevo objeto de recurso AWSClusterRoleIdentity en Kubernetes de la siguiente manera:

apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
kind: AWSClusterRoleIdentity
metadata:
  name: IDENTITY-NAME
spec:
  allowedNamespaces: {}
  durationSeconds: 900
  roleARN: "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
  sourceIdentityRef:
    kind: AWSClusterControllerIdentity
    name: default

Donde:

  • IDENTITY-NAME es cualquier cosa para identificar el recurso. Por ejemplo, un nombre que representa una cuenta de desarrollo de una línea comercial (LOB-dev)
  • SECONDARY-ACCOUNT-ID es el identificador de los pasos de configuración anteriores.

Los recursos AWSClusterRoleIdentity tienen un ámbito global. Puede establecer el campo allowedNamespaces para restringir qué espacios de nombres pueden administrar clústeres mediante la función IAM estableciendo su valor en una lista explícita de espacios de nombres o en un selector. Consulte Acceso seguro a identidades en El libro de API de clúster.

Implementar un clúster de carga de trabajo en la cuenta secundaria

Después de crear el recurso AWSClusterRoleIdentity, puede utilizarlo para implementar un clúster de carga de trabajo en la cuenta de AWS secundaria.

Para ello, incluya la siguiente línea en el archivo de configuración del clúster y ejecute tanzu cluster create con cualquiera de las opciones estándar:

AWS_IDENTITY_REF_NAME: IDENTITY-NAME

Donde IDENTITY-NAME es el nombre del AWSClusterRoleIdentity creado en el paso anterior.

check-circle-line exclamation-circle-line close-line
Scroll to top icon