Implemente um cluster no OpenStack

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:

  1. Implemente o Google Distributed Cloud

  2. Configure o fornecedor de nuvem do OpenStack para o Kubernetes no cluster instalado para integração com os equilibradores de carga do Octavia

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

Google Distributed Cloud instalado no OpenStack.

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:
    1. Use este script do Terraform para aprovisionar os recursos automaticamente.
    2. 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:

  1. Instale as ferramentas de que precisa na VM da estação de trabalho de administrador abm-ws.
  2. Configure o ID do projeto e a conta de serviço necessários para concluir a implementação em segurança
  3. Crie um ficheiro de configuração do cluster
  4. Crie um cluster

Instale as ferramentas de que precisa

  1. 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 '"')
    
  2. Certifique-se de que pode usar o SSH para estabelecer ligação segura à VM do abm-ws e iniciar sessão como utilizador root. O utilizador root configurado pelos scripts do Terraform é abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  3. 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
    
  4. Transfira o utilitário de linha de comandos kubectl na 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. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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

  1. 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/
    
  2. Crie um ficheiro de configuração do cluster para o seu cluster:

    bmctl create config -c CLUSTER_NAME
    
  3. 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

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

  1. Defina a variável de ambiente KUBECONFIG com o caminho para o ficheiro de configuração do cluster para executar comandos kubectl 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?