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.
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:
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.
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
Configurare il cluster.
Creare il cluster. Ad esempio:
tanzu cluster create my-cluster -f my-cluster-config.yaml
Per distribuire un cluster del carico di lavoro che sfrutta le macchine virtuali basate su NVIDIA GPU disponibili in AWS:
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
.
Distribuire il cluster con il file di configurazione del cluster:
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
Installare un criterio del cluster GPU e un operatore GPU nel cluster:
Impostare kubectl context
sul cluster, se non è già il contesto corrente.
Scaricare le risorse NVIDIA GPU necessarie dal repository AWS di Cluster API Provider e salvarle nella directory corrente:
Applicare il criterio del cluster:
kubectl apply clusterpolicy-crd.yaml
Applicare l'operatore GPU:
kubectl apply gpu-operator-components.yaml
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
.
Per testare il cluster abilitato per GPU, eseguire il test di aggiunta del vettore CUDA VectorAdd nella documentazione di NVIDIA.
Per testare l'operatore GPU:
Aumentare il numero di nodi worker del cluster del carico di lavoro:
tanzu cluster scale MY-GPU-CLUSTER -w 2
Eseguire nuovamente kubectl get pods -A
. Per i nodi aggiunti, verranno visualizzati ulteriori pod gpu-operator-
e nvidia-
.
È 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:
È 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.
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.
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.
AWSClusterRoleIdentity
nel cluster di gestionePer 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.
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.