Questa guida illustra un deployment di esempio di Google Distributed Cloud on 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 usare il LBaaS di OpenStack e il framework OpenStack cloud provider in 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 è costituita dalle seguenti sezioni:
Esegui il deployment di Google Distributed Cloud
Configura il provider cloud OpenStack per Kubernetes in Google Distributed Cloud per l'integrazione con i bilanciatori del carico Octavia
Convalida l'integrazione del provider di servizi cloud OpenStack per Kubernetes
Questa guida utilizza OpenStack Ussuri, ma Google Distributed Cloud non richiede versioni specifiche di OpenStack. La guida utilizza VM OpenStack per fornirti un ambiente di proof of concept di Google Distributed Cloud a due nodi in esecuzione su OpenStack. Per informazioni sulla creazione di un ambiente di produzione con un piano di controllo ad alta disponibilità, consulta la documentazione di Google Distributed Cloud per i requisiti dell'ambiente di produzione.
Deployment di esempio
Questa guida fornisce un esempio di deployment di Google Distributed Cloud on 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 che è funzionale
- 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 le seguenti opzioni:
- Usa questa 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 il deployment Google Distributed Cloud alle altre macchine. |
abm-cp1 | 10,200,0,11 | Control plane del cluster GKE: questo host esegue il piano di controllo e il bilanciatore del carico di Kubernetes. |
abm-w1 | 10,200,0,12 | Nodo worker del cluster GKE: questo host esegue i carichi di lavoro Kubernetes. |
Esegui il deployment di Google Distributed Cloud
Questa sezione mostra come completare le seguenti attività:
- Installa gli strumenti di cui hai bisogno sulla VM della workstation di amministrazione
abm-ws
. - Configura l'ID progetto e l'account di servizio necessari per completare in sicurezza il deployment
- Crea un file di configurazione del cluster
- Crea un cluster
Installa gli utensili 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-ws
e accedere come utenteroot
. L'utenteroot
configurato dal Script Terraform èabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
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
Scarica l'utilità a riga di comando
kubectl
sulla 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
Configurare il progetto Google Cloud e l'account di servizio
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
Assicurati che Google Cloud CLI sia configurato in modo da utilizzare il progetto Google Cloud in per cui desideri registrare Google Distributed Cloud.
gcloud config set project PROJECT_ID
Imposta le credenziali predefinite dell'applicazione (ADC) per il tuo account utente nella stazione di lavoro di amministrazione. Verrà utilizzato quando viene utilizzato lo strumento
bmctl
per la creazione del cluster.gcloud auth application-default login
Crea l'account di servizio
bm-gcr
. Utilizza questo account di servizio per autenticarti dal cluster Google Distributed Cloud.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
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
Concedi ulteriori autorizzazioni 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
Scarica l'utilità a riga di comando
bmctl
.mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.30.200-gke.101/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
Crea uno spazio di lavoro Google Distributed Cloud per il tuo cluster.
bmctl create config -c CLUSTER_NAME
Crea il file di configurazione per il cluster Google Distributed Cloud.
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.200-gke.101 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 preliminari sui nodi, la creazione dei cluster di amministrazione e utente e la registrazione del cluster con Google Cloud utilizzando Connect.
L'intera configurazione può richiedere fino a 15 minuti. Vedrai l'output seguente come
cluster in fase di creazione:
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
all'interno della directory bmctl-workspace
. Per verificare il deployment, completa quanto segue
passaggi:
Imposta la variabile di ambiente
KUBECONFIG
con il percorso del file di configurazione del cluster per eseguire i comandikubectl
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
Accedi al cluster dalla console Google Cloud
Per osservare i carichi di lavoro nella console Google Cloud, devi accedere al in un cluster Kubernetes. 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
- Per installare il provider cloud OpenStack sul cluster appena creato nel cluster Google Distributed Cloud, segui le indicazioni della sezione Configurare il cloud OpenStack Provider per Kubernetes guida