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.
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:
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.
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
Configurar el clúster.
Cree el clúster. Por ejemplo:
tanzu cluster create my-cluster -f my-cluster-config.yaml
Para implementar un clúster de carga de trabajo que aproveche las máquinas virtuales basadas en GPU de NVIDIA disponibles en AWS:
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
.
Implemente el clúster con el archivo de configuración del clúster:
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
Instale una directiva de clúster de GPU y un operador de GPU en el clúster:
Establezca el contexto kubectl context
al clúster, si aún no es el contexto actual.
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:
Aplique la directiva del clúster:
kubectl apply clusterpolicy-crd.yaml
Aplique el operador de GPU:
kubectl apply gpu-operator-components.yaml
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
.
Para probar el clúster habilitado para GPU, ejecute la prueba de adición de vectores CUDA VectorAdd en la documentación de NVIDIA.
Para probar el operador de GPU:
Escale verticalmente el recuento de nodos de trabajo del clúster de carga de trabajo:
tanzu cluster scale MY-GPU-CLUSTER -w 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.
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:
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.
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.
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.
AWSClusterRoleIdentity
en el clúster de administraciónPara 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.
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.