Este guia explica uma instalação de exemplo do Google Distributed Cloud (apenas software) em hardware não processado em máquinas virtuais (MVs) do OpenStack com sistemas operativos suportados. A implementação usa um script para simplificar a instalação de um cluster híbrido em VMs do OpenStack. O guia também mostra uma forma de ativar o equilíbrio de carga como serviço (LBaaS). Pode usar o LBaaS do OpenStack e o fornecedor de nuvem do OpenStack do Kubernetes com o Google Distributed Cloud para expor os serviços do Kubernetes fora do cluster do OpenStack.
O Google Distributed Cloud não aprovisiona automaticamente as VMs do OpenStack e o aprovisionamento das VMs está fora do âmbito deste guia. Para saber os requisitos da VM e rever um exemplo de implementação, consulte o exemplo do Terraform para criar VMs do OpenStack.
O guia é composto pelas seguintes secções:
Implemente o Google Distributed Cloud
Configure o fornecedor de nuvem do OpenStack para o Kubernetes no cluster instalado para integração com os equilibradores de carga do Octavia
Valide o fornecedor de nuvem do OpenStack para a integração do Kubernetes
Este guia usa o OpenStack Ussuri, mas o Google Distributed Cloud não tem um requisito para versões específicas do OpenStack. O guia usa VMs do OpenStack para lhe fornecer um ambiente de prova de conceito de dois nós em execução no OpenStack. Para ver os requisitos de instalação de produção do Google Distributed Cloud, consulte os pré-requisitos de instalação.
Exemplo de implementação
Este guia oferece-lhe um exemplo de implementação de um cluster bare metal no OpenStack que se integra com o OpenStack LBaaS. Tem de compreender e ajustar os comandos e os valores de configuração de acordo com o seu ambiente OpenStack. O diagrama seguinte mostra a implementação resultante:
Pré-requisitos
- OpenStack Ussuri com LBaaS v2 implementado e funcional
- Conta de serviço para transferir a ferramenta bmctl
- Configure as VMs e a rede do OpenStack, conforme mostrado na implementação de exemplo.
Para aprovisionar uma configuração semelhante no seu ambiente OpenStack, tem as seguintes opções:
- Use este script do Terraform para aprovisionar os recursos automaticamente.
- Aprovisione os recursos manualmente.
- As seguintes VMs do OpenStack têm de estar prontas e disponíveis através do SSH:
Nome | Endereço IP | Finalidade |
---|---|---|
abm-ws |
10.200.0.10 (IP privado) floating_ip (IP público) |
Funciona como a estação de trabalho do administrador: é usada para implementar o Google Distributed Cloud nas outras máquinas. |
abm-cp1 | 10.200.0.11 | Painel de controlo do cluster: este anfitrião executa o painel de controlo do Kubernetes e o balanceador de carga. |
abm-w1 | 10.200.0.12 | Nó de trabalho do cluster: este anfitrião executa as cargas de trabalho do Kubernetes. |
Implemente o Google Distributed Cloud
Esta secção mostra como concluir as seguintes tarefas:
- Instale as ferramentas de que precisa 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 implementação em segurança
- Crie um ficheiro de configuração do cluster
- Crie um cluster
Instale as ferramentas de que precisa
Obtenha 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 '"')
Certifique-se de que pode usar o SSH para estabelecer ligação segura à VM do
abm-ws
e iniciar sessão como utilizadorroot
. O utilizadorroot
configurado pelos scripts do Terraform éabm
.ssh ubuntu@$FLOATING_IP sudo -u abm -i
Verifique se consegue usar o SSH para estabelecer ligação 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 succeeded
Transfira o utilitário de linha de comandos
kubectl
na 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
Configure o Google Cloud projeto e a conta de serviço
Obtenha credenciais de acesso da CLI gcloud para a sua conta de utilizador.
Estas credenciais são usadas com comandos
gcloud
subsequentes.gcloud auth login
Certifique-se de que a CLI do Google Cloud está configurada para usar o Google Cloud projeto no qual quer que o cluster seja registado.
gcloud config set project PROJECT_ID
Defina as Credenciais padrão da aplicação (ADC) para a sua conta de utilizador na estação de trabalho de administração. Isto é usado quando a ferramenta
bmctl
é usada para a criação de clusters.gcloud auth application-default login
Crie a conta de serviço
bm-gcr
. Use esta conta de serviço para se autenticar a partir do 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
Ative 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.com
Conceda autorizações adicionais à conta de serviço
bm-gcr
. A adição das autorizações significa que não tem de 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"
Crie um ficheiro de configuração do cluster
Transfira o utilitário de linha de comandos
bmctl
.mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.33.0-gke.799/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
Crie um ficheiro de configuração do cluster para o seu cluster:
bmctl create config -c CLUSTER_NAME
Atualize o ficheiro de configuração para utilização 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.33.0-gke.799 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
inicia a configuração de um novo cluster híbrido. Isto inclui a realização de verificações prévias nos nós, a criação dos clusters de administrador e de utilizador, bem como o registo do cluster Google Cloud através do agente Connect.
A configuração completa pode demorar até 15 minutos. Vê o seguinte resultado à medida que o cluster está a ser criado:
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...
Valide e interaja com o cluster
Pode encontrar o ficheiro kubeconfig
do cluster na VM abm-ws
no diretório bmctl-workspace
. Para validar a implementação, conclua os seguintes passos:
Defina a variável de ambiente
KUBECONFIG
com o caminho para o ficheiro de configuração do cluster para executar comandoskubectl
no cluster:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodes
Deverá ver os nós do cluster impressos, semelhantes ao seguinte resultado:
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
Inicie sessão no cluster a partir da Google Cloud consola
Para observar as suas cargas de trabalho na Google Cloud consola, tem de iniciar sessão no cluster. Para ver instruções e mais informações sobre como iniciar sessão no seu cluster, consulte o artigo Trabalhe com clusters a partir da Google Cloud consola.
Limpar
Pode limpar o cluster emitindo o seguinte comando na VM da estação de trabalho de administração (abm-ws
):
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
O que se segue?
- Para instalar o fornecedor de nuvem do OpenStack no cluster recém-criado, siga o guia Configure o fornecedor de nuvem do OpenStack para o Kubernetes.