Benutzerdefinierten Nutzercluster erstellen

In diesem Thema wird beschrieben, wie Sie die Konfiguration eines Anthos-Clusters in AWS (GKE-Nutzercluster) von AWS anpassen.

Das Erstellen eines benutzerdefinierten Nutzerclusters kann folgende Gründe haben:

  • Weiteren Cluster für eine Staging- oder Testumgebung erstellen
  • Knotenpools mit unterschiedlichen Maschinentypen hinzufügen
  • Cluster in bestimmten AWS-Verfügbarkeitszonen erstellen

Hinweis

Bevor Sie Anthos-Cluster auf AWS verwenden, führen Sie die folgenden Aufgaben aus:

  • Der Verwaltungsdienst muss installiert sein.

  • Wenn Sie einen Cluster erstellen möchten, ohne terraform output example_cluster zu verwenden, benötigen Sie private AWS-Subnetze für die Steuerungsebene. Jedes Subnetz muss zu einer anderen Verfügbarkeitszone in derselben AWS-Region gehören. Routentabellen müssen so konfiguriert sein, dass Traffic zwischen privaten Subnetzen zugelassen wird. Außerdem muss jedes Subnetz Zugriff auf ein NAT-Gateway haben.

  • Halten Sie Ihre AWS VPC-ID (Virtual Private Cloud) bereit. Eine VPC-ID hat das Format vpc-012345678abcde. Sie finden die VPC-ID in der AWS-Konsole.

Führen Sie die folgenden Schritte aus, um eine Verbindung zu Ihren Anthos-Clustern auf AWS-Ressourcen herzustellen. Wählen Sie aus, ob Sie eine bestehende AWS-VPC (oder eine direkte Verbindung zu Ihrer VPC) verwenden oder beim Erstellen Ihres Verwaltungsdienstes eine dedizierte VPC angelegt haben.

Vorhandene VPC

Wenn Sie eine direkte Verbindung oder eine VPN-Verbindung zu einer vorhandenen VPC verwenden, lassen Sie die Zeile env HTTP_PROXY=http://localhost:8118 in den Befehlen in diesem Thema weg.

Dedizierte VPC

Wenn Sie einen Verwaltungsdienst in einer dedizierten VPC erstellen, enthält Anthos-Cluster auf AWS einen Bastion-Host in einem öffentlichen Subnetz.

So stellen Sie eine Verbindung zu Ihrem Verwaltungsdienst her:

  1. Wechseln Sie in das Verzeichnis mit Ihrer Anthos-Cluster auf AWS-Konfiguration. Sie haben dieses Verzeichnis bei der Installation des Verwaltungsdienstes erstellt.

    cd anthos-aws

  2. Führen Sie das Skript bastion-tunnel.sh aus, um den Tunnel zu öffnen. Über den Tunnel erfolgt eine Weiterleitung zu localhost:8118.

    Führen Sie den folgenden Befehl aus, um einen Tunnel zum Bastion Host zu öffnen:

    ./bastion-tunnel.sh -N
    

    In diesem Fenster werden Nachrichten aus dem SSH-Tunnel angezeigt. Wenn Sie bereit sind, die Verbindung zu trennen, beenden Sie den Vorgang mit Strg+C oder schließen Sie das Fenster.

  3. Öffnen Sie ein neues Terminal und wechseln Sie in das Verzeichnis anthos-aws:

    cd anthos-aws
  4. Prüfen Sie, ob Sie mit kubectl eine Verbindung zum Cluster herstellen können.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    Die Ausgabe enthält die URL für den API-Server des Verwaltungsdienstes.

Größe der Instanz der Steuerungsebene auswählen

Anthos-Cluster auf AWS unterstützen keine Größenanpassung der Steuerungsebeneninstanzen. Sie müssen deshalb vor dem Erstellen Ihres Nutzerclusters die Instanzgröße der Steuerungsebenen auswählen. Die Größe der Steuerungsebene hängt von der Anzahl der Knoten im Cluster ab. Die folgende Tabelle enthält die empfohlenen Instanzgrößen für die Steuerungsebene bei verschiedenen Clustergrößen.

Clustergröße (Knoten) Instanztyp der Steuerungsebene
1–10 m5.large
11–100 m5.xlarge
101–200 m5.2xlarge

Neuen Cluster mit einer benutzerdefinierten Konfiguration erstellen

Sie können mit terraform output example_cluster eine Konfiguration für einen Nutzercluster pro Verwaltungscluster erstellen. Wenn Sie weitere Cluster erstellen möchten, müssen Sie eine benutzerdefinierte Konfiguration anwenden.

In diesem Beispiel erstellen Sie manuell einen Cluster aus den CRDs von AWSCluster und AWSNodePool.

  1. Wechseln Sie in das Verzeichnis mit Ihrer Anthos Cluster auf AWS-Konfiguration. Sie haben dieses Verzeichnis bei der Installation des Verwaltungsdienstes erstellt.

    cd anthos-aws

  2. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. Öffnen Sie einen Texteditor und kopieren Sie die folgende AWSCluster-Definition in eine Datei mit dem Namen custom-cluster.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

    Dabei gilt:

    • CLUSTER_NAME: Der Name Ihres Clusters.
    • AWS_REGION: AWS-Region, in der Ihr Cluster ausgeführt wird.

    • VPC_ID: ID der VPC, in der Ihr Cluster ausgeführt wird.

    • POD_ADDRESS_CIDR_BLOCKS: Bereich der IPv4-Adressen, der von den Pods des Clusters verwendet wird. Derzeit wird nur ein Bereich unterstützt. Der Bereich darf sich nicht mit Subnetzen überschneiden, die von Ihrem Netzwerk erreichbar sind. Sie können denselben Bereich für mehrere unterschiedliche AWSCluster-Objekte verwenden. Beispiel: 10.2.0.0/16.

    • SERVICE_ADDRESS_CIDR_BLOCKS: IPv4-Adressbereich, der von den Diensten des Clusters verwendet wird. Derzeit wird nur ein Bereich unterstützt. Der Bereich darf sich nicht mit Subnetzen überschneiden, die von Ihrem Netzwerk erreichbar sind. Sie können denselben Bereich für mehrere unterschiedliche AWSCluster-Objekte verwenden. Beispiel: 10.1.0.0/16.

    • SERVICE_LOAD_BALANCER_SUBNETS: Die Subnetz-IDs, in denen Anthos-Cluster in AWS öffentliche oder private Load-Balancer erstellen können.

    • CLUSTER_VERSION: Eine Kubernetes-Version, die von Anthos-Clustern in AWS unterstützt wird. Die neueste Version ist 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: Ein unterstützter EC2-Instanztyp.

    • SSH_KEY_NAME: Ein AWS-EC2-Schlüsselpaar

    • CONTROL_PLANE_SUBNET_IDS: Die IDs der Subnetze in den Verfügbarkeitszonen, in denen Ihre Instanzen auf der Steuerungsebene ausgeführt werden.

    • CONTROL_PLANE_SECURITY_GROUPS: Eine securityGroupID, die während der Installation des Verwaltungsdiensts erstellt wurde. Sie können dies dadurch anpassen, dass Sie alle securityGroupIDs hinzufügen, die für die Verbindung mit der Steuerungsebene erforderlich sind.

    • CONTROL_PLANE_IAM_PROFILE: Der Name des AWS EC2-Instanzprofils, das den Replikaten der Steuerungsebene zugewiesen ist.

    • ROOT_VOLUME_SIZE ist die Größe in Gibibyte (GiB) der Root-Volumes auf der Steuerungsebene.

    • ROOT_VOLUME_TYPE durch den EBS-Volume-Typ. Beispiel: gp3

    • ROOT_VOLUME_IOPS durch die Anzahl der bereitgestellten E/A-Vorgänge pro Sekunde (IOPS) für das Volume. Nur gültig, wenn volumeType GP3 ist. Weitere Informationen finden Sie unter SSD-Volumes für allgemeine Zwecke (gp3).

    • ROOT_VOLUME_KEY durch den Amazon-Ressourcennamen des AWS-KMS-Schlüssels, der Ihre Root-Volumes auf der Steuerungsebene verschlüsselt.

    • ETCD_VOLUME_SIZE ist die Größe der von etcd verwendeten Volumes.

    • ETCD_VOLUME_TYPE durch den EBS-Volume-Typ. Beispiel: gp3

    • ETCD_VOLUME_IOPS durch die Anzahl der bereitgestellten E/A-Vorgänge pro Sekunde (IOPS) für das Volume. Nur gültig, wenn volumeType gp3 ist. Weitere Informationen finden Sie unter SSD-Volumes für allgemeine Zwecke (gp3).

    • ETCD_VOLUME_KEY durch den Amazon-Ressourcennamen des AWS-KMS-Schlüssels, mit dem die etcd-Daten-Volumes der Steuerungsebene verschlüsselt werden.

    • ARN_OF_KMS_KEY ist der AWS KMS-Schlüssel, der zum Verschlüsseln von Cluster-Secrets verwendet wird.

    • ANTHOS_CONNECT_NAME ist der Name der Connect-Mitgliedschaft, der für die Registrierung Ihres Clusters verwendet wird. Der Name der Mitgliedschaft muss eindeutig sein. Beispiel: projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, wobei YOUR_PROJECT Ihr Google Cloud-Projekt und CLUSTER_NAME ein eindeutiger Name in Ihrem Projekt ist. Dieses Feld ist optional.

    • YOUR_PROJECT ist Ihre Projekt-ID.

    • GCP_REGION: Die Google Cloud-Region, in der Sie Logs speichern möchten. Wählen Sie eine Region in der Nähe der AWS-Region aus. Weitere Informationen finden Sie unter Globale Standorte: Regionen und Zonen, z. B. us-central1.

    • ENABLE_LOGGING: true oder false, abhängig davon, ob Cloud Logging auf Knoten der Steuerungsebene aktiviert ist.

    • ENABLE_MONITORING: true oder false, abhängig davon, ob Cloud Monitoring auf Knoten der Steuerungsebene aktiviert ist.

    • WORKLOAD_IDENTITY_BUCKET ist der Name des Cloud Storage-Buckets mit den Workload Identity-Erkennungsinformationen. Dieses Feld ist optional.

  4. Erstellen Sie einen oder mehrere AWSNodePools für Ihren Cluster. Öffnen Sie einen Texteditor und kopieren Sie die folgende AWSCluster-Definition in eine Datei mit dem Namen custom-nodepools.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional
    

    Dabei gilt:

    • NODE_POOL_NAME ist ein eindeutiger Name für Ihren AWSNodePool.
    • AWSCLUSTER_NAME ist der Name Ihres AWSClusters. Beispiel: staging-cluster
    • CLUSTER_VERSION ist eine unterstützte Version von Anthos-Clustern auf AWS Kubernetes.
    • AWS_REGION ist die gleiche AWS-Region wie für Ihren AWS-Cluster.
    • AWS_SUBNET_ID: AWS-Subnetz, das sich in derselben Region wie Ihr AWS-Cluster befindet.
    • MINIMUM_NODE_COUNT ist die maximale Anzahl von Knoten im Knotenpool. Weitere Informationen finden Sie unter Nutzercluster skalieren.
    • MAXIMUM_NODE_COUNT: Die maximale Anzahl von Knoten im Knotenpool.
    • MAXIMUM_PODS_PER_NODE_COUNT: ist die maximale Anzahl von Pods, die Anthos-Cluster in AWS einem Knoten zuweisen können.
    • AWS_NODE_TYPE ist ein AWS EC2-Instanztyp.
    • KMS_KEY_PAIR_NAME ist das AWS KMS-Schlüsselpaar, das jedem Knotenpool-Worker zugewiesen wurde.
    • NODE_IAM_PROFILE ist der Name des AWS EC2-Instanzprofils, das Knoten im Pool zugewiesen wurde.
    • ROOT_VOLUME_SIZE ist die Größe in Gibibyte (GiB) der Root-Volumes auf der Steuerungsebene.
    • VOLUME_TYPE ist der AWS-EBS-Volume-Typ des Knotens. Beispiel: gp3
    • IOPS ist die Menge der bereitgestellten E/A-Vorgänge pro Sekunde (IOPS) für Volumes. Nur gültig, wenn volumeType gp3 ist.
    • NODE_VOLUME_KEY ist der ARN des AWS-KMS-Schlüssels, der zum Verschlüsseln des Volumes verwendet wird. Weitere Informationen finden Sie unter Vom Kunden verwalteten CMK zum Verschlüsseln von Volumes verwenden.
  5. Wenden Sie die Manifeste auf Ihren Verwaltungsdienst an.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

kubeconfig erstellen

Während Ihr Nutzercluster gestartet wird, können Sie einen kubeconfig-Kontext für Ihren neuen Nutzercluster erstellen. Sie verwenden den Kontext, um sich bei einem Nutzer- oder Verwaltungscluster zu authentifizieren.

  1. Verwenden Sie anthos-gke aws clusters get-credentials, um einen kubeconfig für Ihren Nutzercluster in ~/.kube/config zu generieren.

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    Ersetzen Sie dabei CLUSTER_NAME durch den Namen Ihres Clusters. Beispiel: cluster-0.

  2. Verwenden Sie kubectl, um sich beim neuen Nutzercluster zu authentifizieren.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    Wenn Ihr Cluster bereit ist, enthält die Ausgabe die URLs für Kubernetes-Komponenten in Ihrem Cluster.

Status des Clusters ansehen

Der Verwaltungsdienst stellt AWS-Ressourcen bereit, wenn Sie AWSCluster oder AWSNodePool anwenden.

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Verwenden Sie kubectl get AWSClusters, um Ihre Cluster aufzulisten.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    Die Ausgabe enthält den Namen, den Status, das Alter, die Version und den Endpunkt jedes Clusters.

    Die folgende Ausgabe enthält beispielsweise nur einen AWSCluster mit dem Namen cluster-0:

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

Cluster-Ereignisse abrufen

Verwenden Sie kubectl get events, um aktuelle Kubernetes-Ereignisse aus Ihrem Nutzercluster aufzurufen.

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Führen Sie kubectl get events aus.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

Die Ausgabe enthält Informationen, Warnungen und Fehler in Verbindung mit Ihrem Verwaltungsdienst.

Nutzercluster löschen

So löschen Sie einen Nutzercluster:

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Löschen Sie mit kubectl delete das Manifest, das Ihre Nutzercluster enthält.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    Ersetzen Sie CLUSTER_FILE durch den Namen des Manifests, das Ihre AWS-Cluster- und AWSNodePool-Objekte enthält. Beispiel: cluster-0.yaml.

Alle Nutzercluster löschen

Führen Sie die folgenden Schritte aus, um alle Nutzercluster zu löschen:

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Löschen Sie mit kubectl delete Ihre AWSNodePools und AWSCluster aus Ihrem Verwaltungsdienst.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

Weitere Informationen finden Sie unter Anthos-Cluster auf AWS deinstallieren.

Nächste Schritte