Deployment di cluster Anthos su Bare Metal su OpenStack

I cluster Anthos su Bare Metal supportano l'uso di OpenStack come piattaforma cloud privata. Questo supporto ti consente di utilizzare i seguenti servizi OpenStack:

  • Infrastructure as a Service (IaaS)
  • Bilanciamento del carico come servizio (LBaaS)
  • Archiviazione

Puoi eseguire il deployment dei cluster Anthos su Bare Metal in esecuzione nelle macchine virtuali OpenStack (VM) con sistemi operativi supportati. Cluster Anthos su Bare Metal non esegue il provisioning automatico delle VM e il provisioning delle VM non rientra nell'ambito di questa guida. Per conoscere i requisiti delle VM ed esaminare un deployment di esempio, consulta l'esempio di Terraform per creare le VM OpenStack.

Puoi utilizzare OpenStack LBaaS e Kubernetes OpenStack Cloud Provider in cluster Anthos su Bare Metal per esporre i servizi Kubernetes all'esterno del cluster OpenStack.

La guida è composta dalle seguenti sezioni:

  1. Esegui il deployment del cluster Anthos su Bare Metal
  2. Configura il provider cloud Cloud OpenStack per Kubernetes nei cluster Anthos su Bare Metal per l'integrazione con i bilanciatori del carico Octavia
  3. Convalida l'integrazione di OpenStack Cloud Provider per Kubernetes

Questa guida utilizza OpenStack Ussuri, ma potrebbe funzionare con versioni precedenti di OpenStack. Le versioni OpenStack precedenti non sono state testate. La guida utilizza le VM OpenStack per fornirti cluster Anthos a due nodi su un ambiente proof of concept bare metal in esecuzione su OpenStack. Per informazioni sulla creazione di un ambiente di produzione con un piano di controllo ad alta disponibilità, consulta la documentazione relativa ai cluster Anthos su Bare Metal per i requisiti degli ambienti di produzione.

Deployment di esempio

Questa guida fornisce un deployment di esempio di cluster Anthos su Bare Metal su OpenStack che si integra con LBaaS di OpenStack. Devi comprendere e modificare i comandi e i valori di configurazione in base all'ambiente OpenStack. Il seguente diagramma mostra il deployment risultante:

Cluster Anthos su Bare Metal installati su OpenStack.

Prerequisiti

  • OpenStack Ussuri con LBaaS v2 implementato e funzionante
  • Account di servizio per scaricare lo 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 a disposizione le seguenti opzioni:
    1. Utilizza questo script Terraform per eseguire il provisioning automatico delle risorse.
    2. Esegui il provisioning manuale delle risorse.
  • Le seguenti VM OpenStack devono essere pronte e disponibili tramite SSH:
Nome Utilizzo Indirizzo IP
Abm-ws 10.200.0.10 (IP privato)
floating_ip (IP pubblico)
Funge da workstation di amministrazione e viene utilizzata per eseguire il deployment di Anthos su Bare Metal sulle altre macchine.
abm-cp1 10.200.0.11 Piano di controllo del cluster Anthos: questo host esegue il piano di controllo e il bilanciatore del carico Kubernetes.
Abm-W1 10.200.0.12 Nodo worker del cluster Anthos: questo host esegue i carichi di lavoro Kubernetes.

Esegui il deployment del cluster Anthos su Bare Metal

Questa sezione mostra come completare le attività seguenti:

  1. Installa gli strumenti che ti servono sulla VM della workstation di amministrazione di abm-ws.
  2. Configura l'ID progetto e l'account di servizio necessari per completare il deployment in modo sicuro
  3. Crea un file di configurazione del cluster
  4. Esegui il deployment del cluster Anthos su Bare Metal

Installa gli strumenti che ti servono

  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 poterti connettere in modo sicuro alla VM abm-ws tramite SSH e accedere come utente root. L'utente root come configurato dagli script Terraform è abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. Verifica di poter utilizzare SSH negli altri nodi.

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

    L'output previsto per i comandi precedenti è:

    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
    

Configurare il progetto Google Cloud e l'account di servizio

  1. Ottenere le credenziali di accesso a Google Cloud CLI per il tuo account utente. Verrà utilizzato quando utilizzi i comandi gcloud che seguono.

    gcloud auth login
    
  2. Assicurati che Google Cloud CLI sia configurata in modo da utilizzare il progetto Google Cloud in cui vuoi registrare i tuoi cluster Anthos su Bare Metal.

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

    gcloud auth application-default login
    
  4. Crea l'account di servizio bm-gcr. Utilizzi questo account di servizio per autenticarti dai cluster Anthos su cluster Bare Metal.

    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 \
      anthosgke.googleapis.com \
      cloudresourcemanager.googleapis.com \
      container.googleapis.com \
      gkeconnect.googleapis.com \
      gkehub.googleapis.com \
      serviceusage.googleapis.com \
      stackdriver.googleapis.com \
      monitoring.googleapis.com \
      logging.googleapis.com \
      opsconfigmonitoring.googleapis.com \
      anthosaudit.googleapis.com
    
  6. Concedi autorizzazioni aggiuntive all'account di servizio bm-gcr. Se aggiungi le autorizzazioni, non devi creare più account di servizio per 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
    gsutil cp gs://anthos-baremetal-release/bmctl/1.8.9/linux-amd64/bmctl .
    chmod a+x bmctl
    sudo mv bmctl /usr/local/sbin/
    
  2. Crea un'area di lavoro Cluster Anthos su Bare Metal per il tuo cluster.

    bmctl create config -c CLUSTER_NAME
    
  3. Crea il file di configurazione per i tuoi cluster Anthos su cluster Bare Metal.

    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.8.9
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: CLUSTER_NAME
          nodes:
          - address: 10.200.0.11
      clusterNetwork:
        pods:
          cidrBlocks:
          - 10.202.0.0/16
        services:
          cidrBlocks:
          - 10.203.0.0/16
      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
    

Deployment

  1. Eseguire il deployment del cluster.

    bmctl create cluster -c CLUSTER_NAME
    

L'esecuzione del comando bmctl avvia la configurazione di un nuovo cluster ibrido. Ciò include eseguire controlli preliminari sui nodi, creare i cluster di amministrazione e degli utenti e registrare il cluster con Google Cloud utilizzando Connect. L'intera configurazione può richiedere fino a 15 minuti. Vedrai il seguente output durante la creazione del cluster:

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

Verifica e interagisci con il cluster

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

  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 al seguente output:

    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
    

Accedi al cluster da Google Cloud Console

Per osservare i carichi di lavoro nella console Google Cloud, devi accedere al cluster. Per istruzioni e informazioni su come accedere al cluster, consulta la pagina su come accedere a un cluster da Google Cloud Console.

Esegui la pulizia

Puoi eseguire la pulizia del cluster eseguendo il comando seguente nella VM della workstation di amministrazione (abm-ws).

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

Quali sono i passaggi successivi?

Ora puoi installare OpenStack Cloud Provider su Cluster Anthos appena creato su un cluster bare metal seguendo la guida Configura il provider di servizi cloud OpenStack per Kubernetes. Ciò consente di esporre le applicazioni utilizzando un servizio di tipo LoadBalancer, sfruttando LBaaS di OpenStack.