Cluster auf AWS

In diesem Thema werden Möglichkeiten zur Konfiguration von Tanzu Kubernetes Grid (TKG)-Arbeitslastclustern beschrieben, um AWS-spezifische Funktionen zu nutzen, die in der flachen Konfigurationsdatei oder der Objektspezifikation im Kubernetes-Stil des Clusters nicht vollständig konfiguriert werden können.

Informationen zum Konfigurieren von Arbeitslastclustern unter AWS mithilfe von Konfigurationsdateien und Objektspezifikationen finden Sie unter AWS-Clusterkonfigurationsdateien.

Hinzufügen von Subnetz-Tags für eine vorhandene VPC

Wenn Sie Dienste des Typs LoadBalancer im Cluster erstellen möchten, müssen Sie das Tag kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared zum bzw. zu den öffentlichen Subnetzen hinzufügen, die Sie für Ihren Arbeitslastcluster verwenden möchten.

Durch Hinzufügen des Tags kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared zu den öffentlichen Subnetzen können Sie nach der Bereitstellung des Clusters Dienste vom Typ LoadBalancer erstellen. Führen Sie die folgenden Schritte aus, um dieses Tag hinzuzufügen und den Cluster dann bereitzustellen:

  1. Erfassen Sie die ID oder IDs des bzw. der öffentlichen Subnetze innerhalb Ihrer vorhandenen VPC, die Sie für den Cluster verwenden möchten. Um einen prod-Arbeitslastcluster bereitzustellen, müssen Sie drei Subnetze bereitstellen.

  2. Erstellen Sie das erforderliche Tag, indem Sie den folgenden Befehl ausführen:

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

    Dabei gilt:

    • YOUR-PUBLIC-SUBNET-ID-OR-IDS bezeichnet jeweils die IDs der öffentlichen Subnetze, die Sie im vorherigen Schritt erfasst haben.
    • YOUR-CLUSTER-NAME ist der Name des Arbeitslastclusters, den Sie erstellen möchten.

    Beispiel:

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

  4. Erstellen Sie den Cluster. Beispiel:

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

Bereitstellen eines GPU-fähigen Clusters

So stellen Sie einen Arbeitslastcluster bereit, der die Vorteile der unter AWS verfügbaren NVIDIA GPU-basierten VMs nutzt:

  1. Setzen Sie die Konfigurationsdatei für den Cluster NODE_MACHINE_TYPE für Worker-Knoten auf eine GPU-kompatiblen VM-Typ wie beispielsweise g4dn.8xlarge.

  2. Stellen Sie den Cluster mit der Clusterkonfigurationsdatei bereit:

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    
  3. Installieren Sie eine GPU-Clusterrichtlinie und einen GPU-Operator im Cluster:

    1. Legen Sie als Einstellung für kubectl context den Cluster fest, sofern er nicht bereits der aktuelle Kontext ist.

    2. Laden Sie die erforderlichen NVIDIA GPU-Ressourcen aus dem AWS-Repository des Cluster-API-Anbieters herunter und speichern Sie sie in Ihrem aktuellen Verzeichnis:

    3. Wenden Sie die Clusterrichtlinie an:

      kubectl apply clusterpolicy-crd.yaml
      
    4. Wenden Sie den GPU-Operator an:

      kubectl apply gpu-operator-components.yaml
      
  4. Führen Sie kubectl get pods -A aus. Die gpu-operator-Pods sollten im default-Namespace aufgelistet werden und die nvidia-Pods im gpu-operator-resources-Namespace.

  5. Um den GPU-fähigen Cluster zu testen, führen Sie den Vektorhinzufügungstest CUDA VectorAdd in der NVIDIA-Dokumentation aus.

  6. So testen Sie den GPU-Operator:

    1. Skalieren sie die Anzahl der Worker-Knoten im Arbeitslastcluster vertikal hoch:

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. Führen Sie kubectl get pods -A erneut aus. Für die hinzugefügten Knoten sollten zusätzliche gpu-operator- und nvidia-Pods aufgelistet werden.

Bereitstellen von Clustern auf verschiedenen AWS-Konten

Sie können Arbeitslastcluster auf mehreren AWS-Konten bereitstellen, wenn Ihre Kubernetes-Cluster entweder mit dem Internet verbunden sind oder in Peer-VPCs über VPC-Peering oder AWS Transit Gateway bereitgestellt werden.

Um ein sekundäres AWS-Konto für die Bereitstellung von Arbeitslastclustern vorzubereiten, bereiten Sie das sekundäre Konto vor und richten Sie Vertrauensbeziehungen zwischen dem Konto und dem Verwaltungsclusterkonto ein:

Erstellen von IAM-Rollen

Als Erstes müssen Sie IAM-Rollen im sekundären AWS-Konto einrichten.

Führen Sie hierzu den Befehl tanzu mc permissions aws aus. Gehen Sie genauso vor, wie im Abschnitt Erstellen von IAM-Ressourcen unter Bereitstellen von Verwaltungsclustern über eine Konfigurationsdatei beschrieben.

Aktivieren einer kontoübergreifenden Vertrauensstellung

Um einen Verwaltungscluster in einem AWS-Konto für die Bereitstellung von Arbeitslastclustern in einem sekundären AWS-Konto zu aktivieren, müssen Sie zuerst eine Vertrauensrichtlinie im Zweitkonto einrichten.

Suchen Sie dazu die von tanzu mc permissions aws im sekundären Konto erstellten controllers.tkg.cloud.vmware.com. Bearbeiten Sie dann die Vertrauensbeziehung wie folgt:

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

Dabei ist MANAGEMENT-ACCOUNT-ID die ID des AWS-Kontos, in dem der Verwaltungscluster bereitgestellt wird.

Aktivieren des Verwaltungsclusters zum Übernehmen der IAM-Rolle

Aktivieren Sie nach dem Einrichten der Vertrauensrichtlinie die IAM-Rolle control-plane.tkg.cloud.vmware.com des Verwaltungsclusterkontos, um die IAM-Rolle controllers.tkg.cloud.vmware.com im sekundären Konto zu übernehmen.

Hängen Sie dazu eine neue Richtlinie an oder fügen Sie eine Inline-Richtlinie hinzu:

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

Dabei ist SECONDARY-ACCOUNT-ID die ID des sekundären AWS-Kontos.

Erstellen einer AWSClusterRoleIdentity-Ressource im Verwaltungscluster

Um die neue kontoübergreifende IAM-Rolle im Verwaltungscluster einzurichten, müssen Sie ein neues AWSClusterRoleIdentity-Ressourcenobjekt in Kubernetes erstellen:

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

Dabei gilt:

  • IDENTITY-NAME ist ein beliebiger Name zum Identifizieren der Ressource. Dies kann beispielsweise ein Name sein, der das Dev-Konto für einen Geschäftszweig bezeichnet (LOB-dev).
  • SECONDARY-ACCOUNT-ID ist die ID aus den vorherigen Einrichtungsschritten.

AWSClusterRoleIdentity-Ressourcen besitzen einen globalen Geltungsbereich. Sie können das Feld allowedNamespaces festlegen, um einzuschränken, welche Namespaces Cluster mithilfe der IAM-Rolle verwalten dürfen, indem Sie als Wert entweder eine explizite Liste von Namespaces oder einen Selektor festlegen. Weitere Informationen finden Sie im Cluster-API-Handbuch unter Geschützter Zugriff auf Identitäten.

Bereitstellen eines Arbeitslastclusters für das sekundäre Konto

Nachdem Sie die Ressource AWSClusterRoleIdentity erstellt haben, können Sie sie zum Bereitstellen eines Arbeitslastclusters für das sekundäre AWS-Konto verwenden.

Fügen Sie dazu die folgende Zeile in die Clusterkonfigurationsdatei ein, und führen Sie dann tanzu cluster create mit einer der Standardoptionen aus:

AWS_IDENTITY_REF_NAME: IDENTITY-NAME

Dabei ist IDENTITY-NAME der Name der im vorherigen Schritt erstellten AWSClusterRoleIdentity.

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