O software do Distributed Cloud somente para Bare Metal permite implantar um cluster híbrido em máquinas virtuais (VMs) do OpenStack. Essa implantação permite integrar o balanceamento de carga como serviço (LBaaS, na sigla em inglês) do OpenStack e o provedor de nuvem do OpenStack para Kubernetes para expor os serviços do Kubernetes fora do ambiente do OpenStack.
O Google Distributed Cloud não provisiona VMs do OpenStack automaticamente. Para analisar os requisitos de VM e configurar o ambiente de prova de conceito de dois nós, consulte o exemplo do Terraform para criar VMs do OpenStack. Embora essa implantação demonstre o OpenStack Ussuri, o Google Distributed Cloud não exige uma versão específica do OpenStack. Para ambientes de produção, consulte os pré-requisitos de instalação.
Exemplo de implantação
Neste guia, você vai encontrar um exemplo de implantação de um cluster bare metal no OpenStack que se integra ao LBaaS do OpenStack. É preciso entender e ajustar os comandos e valores de configuração adequados ao seu ambiente do OpenStack. O diagrama a seguir mostra a implantação resultante:

Pré-requisitos
- OpenStack Ussuri com LBaaS v2 implantado e funcional
- Conta de serviço para fazer o download da ferramenta bmctl
- Configure as VMs e a rede do OpenStack, conforme mostrado no exemplo de implantação.
Para provisionar uma configuração semelhante no ambiente do OpenStack, você tem as
seguintes opções:
- Use este script do Terraform para provisionar os recursos automaticamente.
- Provisionar os recursos manualmente
- As VMs do OpenStack a seguir precisam estar prontas e disponíveis por SSH:
| Nome | Endereço IP | Finalidade |
|---|---|---|
| abm-ws |
10.200.0.10 (IP privado) flutuante_ip (IP público) |
Atua como a estação de trabalho do administrador: é usada para implantar o Google Distributed Cloud nas outras máquinas. |
| abm-cp1 | 10.200.0.11 | Plano de controle do cluster:esse host executa o plano de controle e o balanceador de carga do Kubernetes. |
| abm-w1 | 10.200.0.12 | Nó de trabalho do cluster:este host executa as cargas de trabalho do Kubernetes. |
Implantar o Google Distributed Cloud
Nesta seção, mostramos como concluir as seguintes tarefas:
- Instale as ferramentas necessárias na VM da estação de trabalho de administrador
abm-ws. - Configure o ID do projeto e a conta de serviço necessários para concluir a implantação com segurança
- Crie um arquivo de configuração de cluster
- Crie um cluster
Instale as ferramentas necessárias
Busque o endereço IP flutuante público da 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 '"')Verifique se você pode usar o SSH para se conectar com segurança à VM
abm-wse fazer login como usuárioroot. O usuáriorootconfigurado pelos scripts do Terraform éabm.ssh ubuntu@$FLOATING_IP sudo -u abm -iVerifique se é possível usar o SSH para se conectar aos outros nós:
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'As respostas esperadas para os comandos anteriores são:
SSH to abm-cp1 succeeded SSH to abm-w1 succeededFaça o download do utilitário de linha de comando
kubectlna 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/Instale o Docker na VM
abm-ws.curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo usermod -aG docker abm newgrp docker
Configurar o projeto e a conta de serviço do Google Cloud
Consiga as credenciais de acesso da CLI do Google Cloud para sua conta de usuário.
Essas credenciais são usadas com comandos
gcloudsubsequentes.gcloud auth loginVerifique se a Google Cloud CLI está configurada para usar o projeto do Google Cloud em que você quer que o cluster seja registrado.
gcloud config set project PROJECT_IDDefina as Application Default Credentials (ADC) da conta de usuário na estação de trabalho do administrador. Isso será usado quando a ferramenta
bmctlfor usada para a criação de clusters.gcloud auth application-default loginCrie a conta de serviço
bm-gcr. Use essa conta de serviço para autenticar no 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.comAtivar as APIs necessárias:
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.comConceda permissões à conta de serviço
bm-gcr. Adicionar as permissões significa que você não precisa criar várias contas de serviço para serviços individuais.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"
Criar um arquivo de configuração de cluster
Faça o download do utilitário de linha de 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/Crie um arquivo de configuração para o cluster:
bmctl create config -c CLUSTER_NAMEAtualize o arquivo de configuração para uso com o 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
Crie o cluster
Crie o cluster:
bmctl create cluster -c CLUSTER_NAME
A execução do comando bmctl começa a configurar um novo cluster híbrido. Isso
inclui executar verificações de simulação nos nós, criar os clusters
de administrador e usuário e registrar o cluster no Google Cloud usando o
Agente do Connect.
A configuração toda pode levar até 15 minutos. A saída a seguir será exibida durante a
criação do 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...
Verifique e interaja com o cluster
O arquivo kubeconfig do cluster pode ser encontrado na VM abm-ws dentro do
diretório bmctl-workspace. Para verificar a implantação, conclua as etapas
a seguir:
Defina a variável de ambiente
KUBECONFIGcom o caminho para o arquivo de configuração do cluster para executar comandoskubectlno cluster:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodesVocê verá os nós do cluster impressos, semelhantes à seguinte saída:
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
Fazer login no cluster pelo console do Google Cloud
Para observar as cargas de trabalho no console do Google Cloud , faça login no cluster. Para instruções e mais informações sobre como fazer login no cluster, consulte Trabalhar com clusters no console do Google Cloud .
Limpar
É possível limpar o cluster emitindo o seguinte comando na VM da
estação de trabalho do administrador (abm-ws):
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
A seguir
- Para instalar o provedor de nuvem do OpenStack no cluster recém-criado, siga o guia Configurar o provedor de nuvem do OpenStack para o Kubernetes.