Criar clusters híbridos

Os clusters híbridos do Google Distributed Cloud permitem executar cargas de trabalho de usuários enquanto gerenciam outros clusters e o próprio cluster híbrido. A combinação de papéis de administrador e usuário elimina a sobrecarga de um cluster de administrador dedicado em ambientes com restrição de recursos. Ao contrário dos clusters independentes, que só gerenciam a si mesmos, os clusters híbridos também podem criar e gerenciar outros clusters.

Hospedar cargas de trabalho junto com componentes de controle troca o isolamento de segurança por flexibilidade, aumentando os riscos de exposição de recursos sensíveis, como chaves SSH. Você implanta clusters híbridos com um plano de controle de alta disponibilidade (HA) usando a ferramenta bmctl de uma estação de trabalho separada ou diretamente em um nó de destino.

Pré-requisitos

  • O último bmctl é transferido por download (gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl) do Cloud Storage.
  • A estação de trabalho que executa bmctl tem conectividade de rede com todos os nós no cluster híbrido de destino.
  • A estação de trabalho que executa bmctl tem conectividade de rede com o VIP do plano de controle do cluster híbrido de destino.
  • A chave SSH usada para criar o cluster híbrido disponível para a raiz ou acesso de usuário SUDO em todos os nós no cluster híbrido de destino.
  • A conta de serviço connect-register está configurada para uso com o Connect.

Consulte o guia de início rápido do Google Distributed Cloud para conferir instruções detalhadas sobre como criar um cluster híbrido.

Ativar o SELinux

Se você quiser ativar o SELinux para proteger seus contêineres, verifique se o SELinux está ativado no modo Enforced em todas as máquinas host. A partir da versão 1.9.0 ou mais recente do Google Distributed Cloud, é possível ativar ou desativar o SELinux antes ou depois da criação do cluster ou dos upgrades dele. O SELinux é ativado por padrão no Red Hat Enterprise Linux (RHEL). Se o SELinux estiver desativado em suas máquinas host ou se você não tiver certeza, consulte Como proteger seus contêineres usando o SELinux para instruções sobre como ativá-lo.

O Google Distributed Cloud oferece suporte ao SELinux apenas em sistemas RHEL.

Fazer login na gcloud e criar um arquivo de configuração do cluster

  1. Faça login na CLI gcloud como um usuário com o gcloud auth application-default login:

    gcloud auth application-default login
    

    Você precisa ter um papel de Proprietário do projeto ou Editor para usar os recursos automáticos de ativação da API e de criação de contas de serviço, descritos nas próximas seções.

    Também é possível adicionar os seguintes papéis de IAM ao usuário:

    • Administrador da conta de serviço
    • Administrador da chave da conta de serviço
    • Administrador de projetos do IAM
    • Leitor do Compute
    • Administrador do Service Usage

    Como alternativa, se você já tiver uma conta de serviço com esses papéis, execute:

    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    

    Substitua JSON_KEY_FILE pelo caminho para o arquivo de chave JSON da sua conta de serviço.

  2. Receba o ID do projeto do Google Cloud para usar com a criação do cluster:

    export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

Crie o arquivo de configuração do cluster com bmctl

Depois de fazer login na gcloud CLI e configurar seu projeto, crie o arquivo de configuração do cluster com o comando bmctl.

Para criar um arquivo de configuração de cluster:

  1. Executar o comando a seguir cria o arquivo de configuração do cluster, cria todas as contas de serviço necessárias e ativa todas as APIs necessárias:

    bmctl create config -c CLUSTER_NAME</var> --enable-apis \
        --create-service-accounts --project-id=CLOUD_PROJECT_ID
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster que você está criando.
    • CLOUD_PROJECT_ID: o ID do seu projeto do Google Cloud .

    Por padrão, o arquivo de configuração é gravado em bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml.

    Se você já ativou APIs e criou contas de serviço, é possível criar arquivos de configuração sem ativar APIs e criar contas de serviço. Também não é necessário usar a flag --project-id. No entanto, será necessário especificar as credenciais no arquivo de configuração manualmente.

    Para mais informações sobre as opções de comando, consulte criar configuração.

Editar o arquivo de configuração do cluster

Agora que você tem um arquivo de configuração de cluster, edite-o para fazer as alterações a seguir:

  1. Forneça a chave privada SSH para acessar os nós do cluster híbrido:

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/hybrid cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. Registre os clusters em uma frota. O ID do projeto especificado no comando bmctl create config é adicionado automaticamente ao campo gkeConnect.projectID no arquivo de configuração do cluster. Esse projeto é chamado de projeto host da frota.

    • Se você tiver criado o arquivo de configuração usando os recursos automáticos de ativação da API e de criação de contas de serviço, pule esta etapa.
    • Se você criou o arquivo de configuração sem usar os recursos de ativação automática de API e criação de conta de serviço, faça referência às chaves JSON da conta de serviço baixada nos campos gkeConnectAgentServiceAccountKeyPath e gkeConnectRegisterServiceAccountKeyPath correspondentes do arquivo de configuração do cluster.
  3. Altere a configuração para especificar um tipo de cluster de hybrid em vez de admin:

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: hybrid
    
  4. Altere a configuração para especificar um plano de controle com vários nós e de alta disponibilidade. Você quer especificar um número ímpar de nós para ter uma maioria de quórum para alta disponibilidade:

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  5. Especifica a densidade de pods dos nós do cluster:

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    Para clusters híbridos, os valores permitidos para maxPodsPerNode são 32-250 para clusters de alta disponibilidade e 64-250 para clusters que não são de alta disponibilidade. O valor padrão de maxPodsPerNode se não for especificado será 110. Depois que o cluster é criado, esse valor não pode ser atualizado.

    A densidade de pods também é limitada pelos recursos de IP disponíveis do cluster. Para detalhes, consulte Rede de pods e serviços.

Criar o cluster híbrido com a configuração do cluster

Use o comando bmctl para criar o cluster:

bmctl create cluster -c CLUSTER_NAME

Substitua CLUSTER_NAME pelo nome que você usou ao criar o arquivo de configuração do cluster na seção anterior.

Veja a seguir um exemplo do comando para criar um cluster chamado hybrid1:

bmctl create cluster -c hybrid1

Exemplos de configurações de cluster híbrido

Para exemplos de configurações de cluster híbridos, consulte Clusters híbridos nas amostras de configuração do cluster.