Google Distributed Cloud-Cluster auf OpenStack bereitstellen

Dieser Leitfaden führt Sie durch eine Beispielbereitstellung von Google Distributed Cloud auf virtuellen OpenStack-Maschinen (VMs) mit unterstützten Betriebssystemen. Bei der Bereitstellung wird ein Skript verwendet, um die Installation eines Hybridclusters in OpenStack-VMs zu vereinfachen. Außerdem erfahren Sie, wie Sie Load Balancing as a Service (LBaaS) aktivieren können. Sie können OpenStack LBaaS und den OpenStack-Cloud-Anbieter von Kubernetes in Google Distributed Cloud verwenden, um die Kubernetes-Dienste außerhalb des OpenStack-Clusters verfügbar zu machen.

Google Distributed Cloud stellt die OpenStack-VMs nicht automatisch bereit und die Bereitstellung der VMs wird in diesem Leitfaden nicht behandelt. Weitere Informationen zu den VM-Anforderungen und eine Beispielbereitstellung finden Sie im Terraform-Beispiel zum Erstellen von OpenStack-VMs.

Die Anleitung besteht aus folgenden Abschnitten:

  1. Google Distributed Cloud bereitstellen

  2. OpenStack Cloud Provider für Kubernetes in Google Distributed Cloud für die Einbindung in die Octavia-Load-Balancer konfigurieren

  3. Integration von OpenStack Cloud Provider für Kubernetes validieren

In dieser Anleitung wird OpenStack Ussuri verwendet. Für Google Distributed Cloud sind jedoch keine bestimmten Versionen von OpenStack erforderlich. In diesem Leitfaden werden OpenStack-VMs verwendet, um Ihnen eine Google Distributed Cloud-Proof-of-Concept-Umgebung mit zwei Knoten bereitzustellen, die auf OpenStack ausgeführt wird. Informationen zum Erstellen einer Produktionsumgebung mit einer Steuerungsebene mit Hochverfügbarkeit finden Sie in der Google Distributed Cloud-Dokumentation zu Anforderungen der Produktionsumgebung.

Beispiel für ein Deployment

Dieser Leitfaden enthält eine Beispielbereitstellung von Google Distributed Cloud auf OpenStack, die sich in OpenStack LBaaS einbinden lässt. Sie müssen die Befehle und Konfigurationswerte verstehen und an Ihre OpenStack-Umgebung anpassen. Das folgende Diagramm zeigt die resultierende Bereitstellung:

Google Distributed Cloud ist auf OpenStack installiert.

Vorbereitung

  • OpenStack Ussuri mit LBaaS v2, das bereitgestellt und funktionsfähig ist
  • Dienstkonto zum Herunterladen des bmctl-Tools
  • Konfigurieren Sie Ihre OpenStack-VMs und Ihr Netzwerk wie in der Beispielbereitstellung gezeigt. Sie haben folgende Möglichkeiten, eine ähnliche Einrichtung in Ihrer OpenStack-Umgebung bereitzustellen:
    1. Mit diesem Terraform-Script können Sie die Ressourcen automatisch bereitstellen.
    2. Stellen Sie die Ressourcen manuell bereit.
  • Die folgenden OpenStack-VMs müssen bereit und über SSH verfügbar sein:
Name IP-Adresse Zweck
abm-ws 10.200.0.10 (private IP-Adresse)
floating_ip (öffentliche IP-Adresse)
Funktion der Administratorworkstation: Wird verwendet, um Google Distributed Cloud auf den anderen Maschinen bereitzustellen.
abm-cp1 10.200.0.11 Steuerungsebene des GKE-Clusters: Dieser Host führt die Kubernetes-Steuerungsebene und den Kubernetes-Load-Balancer aus.
abm-w1 10.200.0.12 GKE-Cluster-Worker-Knoten: Auf diesem Host werden die Kubernetes-Arbeitslasten ausgeführt.

Google Distributed Cloud bereitstellen

In diesem Abschnitt werden die folgenden Aufgaben erläutert:

  1. Tools installieren, die Sie auf der abm-ws-Administrator-Workstation-VM benötigen
  2. Konfigurieren Sie die Projekt-ID und das Dienstkonto, die für den sicheren Abschluss der Bereitstellung erforderlich sind.
  3. Cluster-Konfigurationsdatei erstellen
  4. Cluster erstellen

Benötigte Tools installieren

  1. Rufen Sie die öffentliche Floating-IP-Adresse der VM abm-ws ab:

    export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json)
    export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
    
  2. Sorgen Sie dafür, dass Sie über SSH eine sichere Verbindung zur VM abm-ws herstellen und sich als root-Nutzer anmelden können. Der von den Terraform-Skripts konfigurierte Nutzer root ist abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. Prüfen Sie, ob Sie über SSH eine Verbindung zu den anderen Knoten herstellen können:

    ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded'
    ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
    

    Die erwarteten Antworten für die vorherigen Befehle sind:

    SSH to abm-cp1 succeeded
    SSH to abm-w1 succeeded
    
  4. Laden Sie das kubectl-Befehlszeilendienstprogramm auf die abm-ws-VM herunter.

    curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/sbin/
    
  5. Installieren Sie Docker auf der VM abm-ws:

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    sudo usermod -aG docker abm
    newgrp docker
    

Google Cloud-Projekt und -Dienstkonto konfigurieren

  1. Rufen Sie Anmeldedaten für Google Cloud CLI für Ihr Nutzerkonto ab.

    Diese Anmeldedaten werden für nachfolgende gcloud-Befehle verwendet.

    gcloud auth login
    
  2. Die Google Cloud CLI muss für die Verwendung des Google Cloud-Projekts konfiguriert sein, in dem Ihre Google Distributed Cloud registriert werden soll.

    gcloud config set project PROJECT_ID
    
  3. Legen Sie die Standardanmeldedaten für Anwendungen für Ihr Nutzerkonto auf der Administratorworkstation fest. Diese wird verwendet, wenn das bmctl-Tool zum Erstellen von Clustern verwendet wird.

    gcloud auth application-default login
    
  4. Erstellen Sie das Dienstkonto bm-gcr. Mit diesem Dienstkonto authentifizieren Sie sich über den Google Distributed Cloud-Cluster.

    gcloud iam service-accounts create bm-gcr
    gcloud iam service-accounts keys create bm-gcr.json \
        --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com
    
  5. Aktivieren Sie die erforderlichen APIs:

    gcloud services enable \
        anthos.googleapis.com \
        anthosaudit.googleapis.com \
        anthosgke.googleapis.com \
        cloudresourcemanager.googleapis.com \
        connectgateway.googleapis.com \
        container.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        gkeonprem.googleapis.com \
        iam.googleapis.com \
        logging.googleapis.com \
        monitoring.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        storage.googleapis.com
    
  6. Erteilen Sie dem bm-gcr-Dienstkonto zusätzliche Berechtigungen. Wenn Sie die Berechtigungen hinzufügen, müssen Sie nicht mehrere Dienstkonten für einzelne Dienste erstellen.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.connect"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/gkehub.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/monitoring.dashboardEditor"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/stackdriver.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/opsconfigmonitoring.resourceMetadata.writer"
    

Cluster-Konfigurationsdatei erstellen

  1. Laden Sie das bmctl-Befehlszeilentool herunter.

    mkdir baremetal && cd baremetal
    gsutil cp gs://anthos-baremetal-release/bmctl/1.29.100-gke.251/linux-amd64/bmctl .
    chmod a+x bmctl
    sudo mv bmctl /usr/local/sbin/
    
  2. Erstellen Sie einen Google Distributed Cloud-Arbeitsbereich für Ihren Cluster.

    bmctl create config -c CLUSTER_NAME
    
  3. Erstellen Sie die Konfigurationsdatei für Ihren Google Distributed Cloud-Cluster.

    cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB
    ---
    gcrKeyPath: /home/abm/bm-gcr.json
    sshPrivateKeyPath: /home/abm/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openstack-cluster-ns
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: openstack-cluster-ns
      annotations:
        baremetal.cluster.gke.io/external-cloud-provider: "true"
    spec:
      type: hybrid
      anthosBareMetalVersion: 1.29.100-gke.251
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: CLUSTER_NAME
          nodes:
          - address: 10.200.0.11
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: manual
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.101
          ingressVIP: 10.200.0.102
      clusterOperations:
        location: us-central1
        projectID: PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: standard
      nodeAccess:
        loginUser: abm
    
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: openstack-cluster-ns
    spec:
      clusterName: CLUSTER_NAME
      nodes:
      - address: 10.200.0.12
    EOB
    

Cluster erstellen

  1. Erstellen Sie den Cluster:

    bmctl create cluster -c CLUSTER_NAME
    

Wenn Sie den Befehl bmctl ausführen, wird ein neuer Hybridcluster eingerichtet. Dazu gehören die Durchführung von Preflight-Prüfungen auf den Knoten, das Erstellen der Administrator- und Nutzercluster und das Registrieren des Clusters in Google Cloud über Connect. Die Einrichtung kann bis zu 15 Minuten dauern. Wenn der Cluster erstellt wird, wird die folgende Ausgabe angezeigt:

Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000]  - [PASSED] gcp
[2021-09-26 02:15:22+0000]  - [PASSED] node-network
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000]  - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...

Cluster prüfen und damit interagieren

Sie finden die Clusterdatei kubeconfig auf der VM abm-ws im Verzeichnis bmctl-workspace. Führen Sie die folgenden Schritte aus, um Ihre Bereitstellung zu prüfen:

  1. Legen Sie die Umgebungsvariable KUBECONFIG mit dem Pfad zur Clusterkonfigurationsdatei fest, um kubectl-Befehle auf dem Cluster auszuführen:

    export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
    kubectl get nodes
    

    Es sollten die Knoten des Clusters ähnlich wie in der folgenden Ausgabe angezeigt werden:

    NAME      STATUS   ROLES                  AGE     VERSION
    abm-cp1   Ready    control-plane,master   5m24s   v1.20.5-gke.1301
    abm-w1    Ready    <none>                 2m17s   v1.20.5-gke.1301
    

Über die Google Cloud Console bei Ihrem Cluster anmelden

Damit Sie Ihre Arbeitslasten in der Google Cloud Console beobachten können, müssen Sie sich beim Cluster anmelden. Eine Anleitung und weitere Informationen zum Anmelden bei Ihrem Cluster finden Sie unter Über die Google Cloud Console mit Clustern arbeiten.

Bereinigen

Sie können den Cluster bereinigen, indem Sie auf der Administratorworkstation-VM (abm-ws) den folgenden Befehl ausführen:

export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME

Nächste Schritte