Esegui il deployment di un cluster su OpenStack

Questa guida illustra la procedura di installazione di un esempio di Google Distributed Cloud (solo software) su bare metal su macchine virtuali (VM) OpenStack con sistemi operativi supportati. Il deployment utilizza uno script per semplificare l'installazione di un cluster ibrido nelle VM OpenStack. La guida illustra anche un modo per attivare il bilanciamento del carico come servizio (LBaaS). Puoi utilizzare OpenStack LBaaS e il provider cloud Kubernetes OpenStack con Google Distributed Cloud per esporre i servizi Kubernetes all'esterno del cluster OpenStack.

Google Distributed Cloud non esegue il provisioning automatico delle VM OpenStack e il provisioning delle VM non rientra nell'ambito di questa guida. Per conoscere i requisiti delle VM e esaminare un esempio di implementazione, consulta l'esempio di Terraform per la creazione di VM OpenStack.

La guida è composta dalle seguenti sezioni:

  1. Esegui il deployment di Google Distributed Cloud

  2. Configura il provider cloud OpenStack per Kubernetes nel cluster installato per l'integrazione con i bilanciatori del carico Octavia

  3. Convalida del provider cloud OpenStack per l'integrazione di Kubernetes

Questa guida utilizza OpenStack Ussuri, ma Google Distributed Cloud non richiede versioni specifiche di OpenStack. La guida utilizza le VM OpenStack per fornirti un ambiente di proof of concept a due nodi in esecuzione su OpenStack. Per i requisiti di installazione in produzione per Google Distributed Cloud, consulta i prerequisiti di installazione.

Esempio di implementazione

Questa guida fornisce un esempio di deployment di un cluster bare metal su OpenStack che si integra con OpenStack LBaaS. Devi comprendere e modificare i comandi e i valori di configurazione in base al tuo ambiente OpenStack. Il seguente diagramma mostra il deployment risultante:

Google Distributed Cloud installato su OpenStack.

Prerequisiti

  • OpenStack Ussuri con LBaaS v2 di cui è stato eseguito il deployment e che è funzionale
  • Account di servizio per il download dello strumento bmctl
  • Configura le VM e la rete OpenStack come mostrato nel deployment di esempio. Per eseguire il provisioning di una configurazione simile nel tuo ambiente OpenStack, hai le seguenti opzioni:
    1. Utilizza questo script Terraform per eseguire il provisioning delle risorse automaticamente.
    2. Esegui il provisioning delle risorse manualmente.
  • Le seguenti VM OpenStack devono essere pronte e disponibili tramite SSH:
Nome Indirizzo IP Finalità
abm-ws 10.200.0.10 (IP privato)
floating_ip (IP pubblico)
Agisce come workstation di amministrazione: viene utilizzata per eseguire il deployment di Google Distributed Cloud sulle altre macchine.
abm-cp1 10.200.0.11 Piano di controllo del cluster:questo host esegue il piano di controllo Kubernetes e il bilanciatore del carico.
abm-w1 10.200.0.12 Nodo worker del cluster: questo host esegue i carichi di lavoro Kubernetes.

Esegui il deployment di Google Distributed Cloud

Questa sezione illustra come completare le seguenti attività:

  1. Installa gli strumenti necessari sulla VM workstation di amministrazione abm-ws.
  2. Configura l'ID progetto e l'account di servizio necessari per completare in sicurezza il deployment
  3. Creare un file di configurazione del cluster
  4. Creare un cluster

Installa gli strumenti di cui hai bisogno

  1. Recupera l'indirizzo IP mobile pubblico della VM abm-ws:

    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. Assicurati di poter utilizzare SSH per connetterti in modo sicuro alla VM abm-ws e accedere come utente root. L'utente root configurato dagli script Terraform è abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. Verifica di poter utilizzare SSH per connetterti agli altri nodi:

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

    Le risposte previste per i comandi precedenti sono:

    SSH to abm-cp1 succeeded
    SSH to abm-w1 succeeded
    
  4. Scarica l'utilità a riga di comando kubectl sulla VM abm-ws.

    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. Installa Docker sulla VM abm-ws:

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

Configura il progetto e l'account di servizio Google Cloud

  1. Ottieni le credenziali di accesso a Google Cloud CLI per il tuo account utente.

    Queste credenziali vengono utilizzate con i comandi gcloud successivi.

    gcloud auth login
    
  2. Assicurati che Google Cloud CLI sia configurato per utilizzare il progetto Google Cloud in cui vuoi registrare il cluster.

    gcloud config set project PROJECT_ID
    
  3. Imposta le credenziali predefinite dell'applicazione (ADC) per il tuo account utente nella stazione di lavoro di amministrazione. Verrà utilizzato quando viene utilizzato lo strumentobmctl per la creazione del cluster.

    gcloud auth application-default login
    
  4. Crea l'account di servizio bm-gcr. Utilizza questo account di servizio per autenticarti dal 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. Abilita le API necessarie:

    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. Concedi autorizzazioni aggiuntive all'account di servizio bm-gcr. L'aggiunta delle autorizzazioni significa che non devi creare più account di servizio per i singoli servizi.

    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"
    

Crea un file di configurazione del cluster

  1. Scarica l'utilità a riga di comando bmctl.

    mkdir baremetal && cd baremetal
    gcloud storage cp gs://anthos-baremetal-release/bmctl/1.30.400-gke.133/linux-amd64/bmctl .
    chmod a+x bmctl
    sudo mv bmctl /usr/local/sbin/
    
  2. Crea un file di configurazione del cluster per il tuo cluster:

    bmctl create config -c CLUSTER_NAME
    
  3. Aggiorna il file di configurazione per l'utilizzo con OpenStack:

    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.30.400-gke.133
      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
    

Crea il cluster

  1. Crea il cluster:

    bmctl create cluster -c CLUSTER_NAME
    

L'esecuzione del comando bmctl avvia la configurazione di un nuovo cluster ibrido. Sono inclusi i controlli preliminari sui nodi, la creazione dei cluster di amministrazione e utente e la registrazione del cluster in Google Cloud utilizzando Connect Agent. L'intera configurazione può richiedere fino a 15 minuti. Durante la creazione del cluster viene visualizzato il seguente output:

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...

Verificare e interagire con il cluster

Puoi trovare il file kubeconfig del cluster sulla VM abm-ws all'interno della directory bmctl-workspace. Per verificare il deployment, completa i seguenti passaggi:

  1. Imposta la variabile di ambiente KUBECONFIG con il percorso del file di configurazione del cluster per eseguire i comandi kubectl sul cluster:

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

    Dovresti vedere i nodi del cluster stampati, in modo simile all'output seguente:

    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
    

Accedere al cluster dalla console Google Cloud

Per osservare i tuoi workload nella console Google Cloud, devi accedere al cluster. Per istruzioni e ulteriori informazioni su come accedere al cluster, consulta Utilizzare i cluster dalla console Google Cloud.

Esegui la pulizia

Puoi ripulire il cluster emettendo il seguente comando nella VM della workstation di amministrazione (abm-ws):

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

Passaggi successivi