Distributed Cloud (solo software) per Bare Metal ti consente di eseguire il deployment di un cluster ibrido su macchine virtuali (VM) OpenStack. Questo deployment ti consente di integrare OpenStack Load Balancing as a Service (LBaaS) e il cloud provider OpenStack per Kubernetes per esporre i servizi Kubernetes all'esterno del tuo ambiente OpenStack.
Google Distributed Cloud non esegue automaticamente il provisioning delle VM OpenStack. Per esaminare i requisiti delle VM e configurare l'ambiente proof of concept a due nodi, consulta l'esempio di Terraform per creare VM OpenStack. Sebbene questo deployment mostri OpenStack Ussuri, Google Distributed Cloud non richiede una versione specifica di OpenStack. Per gli ambienti di produzione, consulta i prerequisiti per l'installazione.
Deployment di esempio
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:

Prerequisiti
- OpenStack Ussuri con LBaaS v2 di cui è stato eseguito il deployment e funzionante
- Service account 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:
- Utilizza questo script Terraform per eseguire automaticamente il provisioning delle risorse.
- 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) |
Funge da workstation di amministrazione: viene utilizzata per eseguire il deployment di Google Distributed Cloud sulle altre macchine. |
| abm-cp1 | 10.200.0.11 | Control plane del cluster: questo host esegue il control plane e il bilanciatore del carico di Kubernetes. |
| abm-w1 | 10.200.0.12 | Nodo worker del cluster: questo host esegue i workload Kubernetes. |
Esegui il deployment di Google Distributed Cloud
Questa sezione mostra come completare le seguenti attività:
- Installa gli strumenti necessari sulla VM della workstation di amministrazione
abm-ws. - Configura l'ID progetto e il account di servizio necessari per completare il deployment in modo sicuro
- Crea un file di configurazione del cluster
- Crea un cluster
Installa gli strumenti necessari
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 '"')Assicurati di poter utilizzare SSH per connetterti in modo sicuro alla VM
abm-wse accedere come utenteroot. L'utenterootconfigurato dagli script Terraform èabm.ssh ubuntu@$FLOATING_IP sudo -u abm -iVerifica 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 succeededScarica l'utilità a riga di comando
kubectlsulla VMabm-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/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 account di servizio Google Cloud
Ottieni le credenziali di accesso a Google Cloud CLI per il tuo account utente.
Queste credenziali vengono utilizzate con i comandi
gcloudsuccessivi.gcloud auth loginAssicurati che Google Cloud CLI sia configurata per utilizzare il progetto Google Cloud in cui vuoi registrare il cluster.
gcloud config set project PROJECT_IDImposta le Credenziali predefinite dell'applicazione (ADC) per il tuo account utente nella workstation di amministrazione. Verrà utilizzato quando lo strumento
bmctlviene utilizzato per la creazione del cluster.gcloud auth application-default loginCrea il account di servizio
bm-gcr. Utilizzi questo account di servizio per l'autenticazione dal cluster.gcloud iam service-accounts create bm-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=bm-gcr@PROJECT_ID.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.comConcedi autorizzazioni aggiuntive al account di servizio
bm-gcr. L'aggiunta delle autorizzazioni significa che non è necessario creare più service account per i singoli servizi.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID." \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
Crea un file di configurazione del cluster
Scarica l'utilità a riga di comando
bmctl.mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/Crea un file di configurazione del cluster per il tuo cluster:
bmctl create config -c CLUSTER_NAMEAggiorna 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.36.200-gke.118 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
Crea il cluster:
bmctl create cluster -c CLUSTER_NAME
L'esecuzione del comando bmctl avvia la configurazione di un nuovo cluster ibrido. Ciò include l'esecuzione di controlli preflight sui nodi, la creazione dei cluster di amministrazione e utente e la registrazione del cluster con 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...
Verifica e interagisci con il cluster
Puoi trovare il file kubeconfig del cluster sulla VM abm-ws nella directory bmctl-workspace. Per verificare il deployment, completa i seguenti passaggi:
Imposta la variabile di ambiente
KUBECONFIGcon il percorso del file di configurazione del cluster per eseguire i comandikubectlsul cluster:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodesDovresti 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 dalla console Google Cloud
Per osservare i workload nella console Google Cloud , devi accedere al cluster. Per istruzioni e ulteriori informazioni sull'accesso al cluster, consulta Utilizza i cluster dalla console Google Cloud .
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
Passaggi successivi
- Per installare il provider cloud OpenStack sul cluster appena creato, segui la guida Configura il provider cloud OpenStack per Kubernetes.