Cluster su AWS

Questo argomento descrive le modalità di configurazione dei cluster di carichi di lavoro Tanzu Kubernetes Grid (TKG) per l'utilizzo di funzionalità specifiche di AWS, non interamente configurabili nel file di configurazione piatto del cluster o nelle specifiche degli oggetti di tipo Kubernetes.

Per informazioni su come configurare i cluster di carichi di lavoro su AWS utilizzando i file di configurazione e le specifiche degli oggetti, vedere File di configurazione dei cluster AWS.

Aggiunta di tag di subnet per un VPC esistente

Se si desidera creare servizi di tipo LoadBalancer nel cluster, è necessario aggiungere il tag kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared alla subnet o alle subnet pubbliche che si intende utilizzare per il cluster del carico di lavoro.

L'aggiunta del tag kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared alla subnet pubblica o alle subnet pubbliche consente di creare servizi di tipo LoadBalancer dopo aver distribuito il cluster. Per aggiungere questo tag e quindi distribuire il cluster, eseguire i passaggi seguenti:

  1. Raccogliere l'ID o gli ID della subnet pubblica o delle subnet pubbliche all'interno del VPC che si desidera utilizzare per il cluster. Per distribuire un cluster del carico di lavoro prod, è necessario specificare tre subnet.

  2. Creare il tag necessario eseguendo il comando seguente:

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

    In cui:

    • YOUR-PUBLIC-SUBNET-ID-OR-IDS rappresenta l'ID o gli ID della subnet pubblica o delle subnet pubbliche raccolti nel passaggio precedente.
    • YOUR-CLUSTER-NAME è il nome del cluster del carico di lavoro che si desidera creare.

    Ad esempio:

    aws ec2 create-tags --resources subnet-00bd5d8c88a5305c6 subnet-0b93f0fdbae3436e8 subnet-06b29d20291797698 --tags Key=kubernetes.io/cluster/my-cluster,Value=shared
    
  3. Configurare il cluster.

  4. Creare il cluster. Ad esempio:

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

Distribuzione di un cluster abilitato per GPU

Per distribuire un cluster del carico di lavoro che sfrutta le macchine virtuali basate su NVIDIA GPU disponibili in AWS:

  1. Nel file di configurazione per il cluster impostare NODE_MACHINE_TYPE per i nodi worker su un tipo di macchina virtuale compatibile con la GPU, ad esempio g4dn.8xlarge.

  2. Distribuire il cluster con il file di configurazione del cluster:

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    
  3. Installare un criterio del cluster GPU e un operatore GPU nel cluster:

    1. Impostare kubectl context sul cluster, se non è già il contesto corrente.

    2. Scaricare le risorse NVIDIA GPU necessarie dal repository AWS di Cluster API Provider e salvarle nella directory corrente:

    3. Applicare il criterio del cluster:

      kubectl apply clusterpolicy-crd.yaml
      
    4. Applicare l'operatore GPU:

      kubectl apply gpu-operator-components.yaml
      
  4. eseguire kubectl get pods -A. Verranno visualizzati elenchi dei pod gpu-operator- nello spazio dei nomi default e dei pod nvidia- nello spazio dei nomi gpu-operator-resources.

  5. Per testare il cluster abilitato per GPU, eseguire il test di aggiunta del vettore CUDA VectorAdd nella documentazione di NVIDIA.

  6. Per testare l'operatore GPU:

    1. Aumentare il numero di nodi worker del cluster del carico di lavoro:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. Eseguire nuovamente kubectl get pods -A. Per i nodi aggiunti, verranno visualizzati ulteriori pod gpu-operator- e nvidia-.

Distribuzione di cluster in account AWS diversi

È possibile distribuire cluster del carico di lavoro in più account AWS se i cluster Kubernetes sono connessi a Internet o distribuiti in VPC in peering tramite il peering VPC o AWS Transit Gateway.

Per preparare un account AWS secondario per la distribuzione di cluster del carico di lavoro, preparare l'account secondario e configurare le relazioni di attendibilità tra tale account e l'account del cluster di gestione nel modo seguente:

Creazione di ruoli IAM

È innanzitutto necessario configurare ruoli IAM nell'account AWS secondario.

A tale scopo, utilizzare il comando tanzu mc permissions aws. Eseguire la stessa procedura descritta nella sezione Creazione di risorse IAM di Distribuzione di cluster di gestione da un file di configurazione.

Abilitazione dell'attendibilità tra account

Per abilitare un cluster di gestione in un account AWS per distribuire cluster del carico di lavoro in un account AWS secondario, è innanzitutto necessario configurare un criterio di attendibilità nell'account secondario.

A tale scopo, individuare controllers.tkg.cloud.vmware.com creato da tanzu mc permissions aws nell'account secondario. Modificare quindi la relazione di attendibilità nel modo seguente:

{
  "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"
      },
    }
  ]
}

In cui MANAGEMENT-ACCOUNT-ID è l'ID dell'account AWS in cui viene distribuito il cluster di gestione.

Abilitazione del cluster di gestione all'assunzione del ruolo IAM

Dopo aver configurato il criterio di attendibilità, abilitare il ruolo IAM control-plane.tkg.cloud.vmware.com dell'account del cluster di gestione ad assumere il ruolo IAM controllers.tkg.cloud.vmware.com nell'account secondario.

A tale scopo, collegare un nuovo criterio o aggiungere un criterio inline nel modo seguente:

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

In cui SECONDARY-ACCOUNT-ID è l'ID dell'account AWS dell'account secondario.

Creazione di una risorsa AWSClusterRoleIdentity nel cluster di gestione

Per configurare il nuovo ruolo IAM tra account nel cluster di gestione, è necessario creare un nuovo oggetto risorsa AWSClusterRoleIdentity in Kubernetes nel modo seguente:

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

In cui:

  • IDENTITY-NAME è un nome qualsiasi che consenta di identificare la risorsa. Ad esempio, un nome che rappresenta l'account dev line of business (LOB-dev)
  • SECONDARY-ACCOUNT-ID è l'ID definito nei passaggi di configurazione precedenti.

Le risorse AWSClusterRoleIdentity sono definite in un ambito globale. È possibile impostare il campo allowedNamespaces per limitare gli spazi dei nomi che possono gestire i cluster tramite il ruolo IAM impostandone il valore su un elenco esplicito di spazi dei nomi o su un selettore. Vedere Secure Access to Identities in The Cluster API Book.

Distribuzione di un cluster del carico di lavoro nell'account secondario

Dopo aver creato la risorsa AWSClusterRoleIdentity, è possibile utilizzarla per distribuire un cluster del carico di lavoro nell'account AWS secondario.

A tale scopo, includere la riga seguente nel file di configurazione del cluster ed eseguire tanzu cluster create con una delle opzioni standard:

AWS_IDENTITY_REF_NAME: IDENTITY-NAME

In cui IDENTITY-NAME è il nome di AWSClusterRoleIdentity creato nel passaggio precedente.

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