Criar clusters independentes

Nesta página, mostramos como criar um cluster autônomo, que é um cluster de autogerenciamento que executa cargas de trabalho. Os clusters independentes não gerenciam outros clusters, o que elimina a necessidade de executar um cluster de administrador separado em cenários com recursos restritos. Além disso, os clusters autônomos oferecem dois perfis de instalação:

  • Padrão: o perfil padrão tem requisitos de recursos limitados.
  • Borda: o perfil de borda reduziu significativamente os requisitos de recursos do sistema e é recomendado para dispositivos perimetrais com altos limites de recursos.

Antes de criar um cluster autônomo, considere a compensação entre os recursos de redução e a segurança geral. Como os clusters autônomos se autogerenciam, a execução de cargas de trabalho no mesmo cluster aumenta o risco de exposição de dados administrativos confidenciais, como chaves SSH.

Pré-requisitos

Antes de criar um cluster autônomo, confira o seguinte:

  • O último bmctl é transferido por download (gs://anthos-baremetal-release/bmctl/1.29.100-gke.251/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 autônomo de destino.
  • A estação de trabalho que executa bmctl tem conectividade de rede com o VIP do plano de controle do cluster autônomo de destino.
  • A chave SSH usada para criar o cluster autônomo está disponível para a raiz ou há acesso de usuário SUDO em todos os nós do cluster autônomo de destino.
  • A conta de serviço connect-register está configurada para uso com o Connect.

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 ou dos upgrades do cluster. 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.

Criar um cluster autônomo

É possível criar um cluster autônomo que tenha um único plano de nós de controle usando o comando bmctl. Esse tipo de configuração reduz o consumo de recursos, mas não fornece alta disponibilidade (HA, na sigla em inglês), e o cluster resultante tem um único ponto de falha.

Também é possível criar um cluster autônomo de alta disponibilidade. No modo de HA, se um nó falhar, outros assumirão o lugar. Para criar um cluster autônomo de alta disponibilidade, você precisa especificar pelo menos três nós para o plano de controle.

O comando bmctl normalmente pode ser executado em uma estação de trabalho separada ou em um dos nós de cluster autônomos. No entanto, se você estiver criando um cluster autônomo com o perfil de perímetro ativado e tiver os recursos mínimos necessários configurados, execute bmctl em uma estação de trabalho separada.

Fazer login no app gcloud

  1. Faça login em gcloud como usuário:

    gcloud auth application-default login
    

    Você precisa ter um papel de proprietário ou editor do projeto para usar os recursos de ativação automática da API e criação de conta de serviço descritos nas seções a seguir.

    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)
    

Criar um arquivo de configuração de cluster autônomo

Depois de fazer login na CLI gcloud e configurar o projeto, crie o arquivo de configuração do cluster com o comando bmctl. Neste exemplo, todas as contas de serviço são criadas automaticamente pelo comando bmctl create config:

bmctl create config -c STANDALONE_CLUSTER_NAME --enable-apis \
    --create-service-accounts --project-id=$CLOUD_PROJECT_ID

Substitua:

  • STANDALONE_CLUSTER_NAME pelo nome do cluster autônomo que você quer criar.

Exemplo

O comando a seguir cria um arquivo de configuração para um cluster autônomo chamado standalone1 associado ao ID do projeto my-gcp-project:

bmctl create config -c standalone1 --create-service-accounts --project-id=my-gcp-project

O arquivo é gravado em bmctl-workspace/standalone1/standalone1.yaml.

Outra opção para ativar automaticamente APIs e criar contas de serviço é fornecer as contas de serviço atuais se você tiver as permissões de IAM adequadas. Ou seja, é possível ignorar a criação automática de conta de serviço na etapa anterior no comando bmctl:

bmctl create config -c standalone1

Editar o arquivo de configuração do cluster

Agora que você tem um arquivo de configuração de cluster, faça estas alterações:

  1. Inclua a chave privada SSH para acessar os nós do cluster autônomo:

    # 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 conta 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 standalone em vez de admin. Se você quiser ativar o perfil de borda para minimizar o consumo de recursos, especifique profile: edge:

    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: standalone
      # Edge profile minimizes the resource consumption of Google Distributed Cloud. It is only available for standalone clusters.
      profile: edge
    
  4. Opcional: altere a configuração para especificar um plano de controle com vários nós e de alta disponibilidade. Especifique um número ímpar de nós para poder ter uma maioria de quórum para HA:

      # 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
    

    Se você tiver um número par de nós temporariamente durante a adição ou remoção de nós para manutenção ou substituição, sua implantação manterá a alta disponibilidade, desde que você tenha quórum.

  5. No arquivo de configuração do cluster, preencha ou edite os detalhes de rede do cluster:

    • clusterNetwork.pods.cidrBlocks: intervalo de endereços IP na notação de bloco CIDR para uso por pods. O valor inicial recomendado, que é preenchido previamente no arquivo de configuração do cluster gerado, é 192.168.0.0/16.

    • clusterNetwork.services.cidrBlocks: intervalo de endereços IP na notação de bloco CIDR para uso pelo serviço. O valor inicial recomendado, que é pré-preenchido no arquivo de configuração do cluster gerado, é 10.96.0.0/20.

    • loadBalancer.vips.controlPlaneVIP: o endereço IP virtual (VIP) do servidor da API Kubernetes do cluster.

    • loadBalancer.vips.ingressVIP: o endereço VIP a ser usado como endereço externo para o proxy de entrada.

    • loadBalancer.addressPools.addresses:: intervalo de dez endereços IP para uso como endereços IP externo para Serviços do tipo LoadBalancer. Observe que esse intervalo inclui o VIP de entrada, que é exigido pelo MetalLB. Nenhum outro endereço IP pode se sobrepor a esse intervalo.

  6. Especifique 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 autônomos, 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. Se não for especificado, o valor padrão será 110. Depois que o cluster for criado, esse valor não poderá ser atualizado.

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

Criar o cluster autônomo com a configuração do cluster

Use o comando bmctl para implantar o cluster autônomo:

bmctl create cluster -c CLUSTER_NAME

Substitua CLUSTER_NAME pelo nome do cluster que você criou na seção anterior.

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

bmctl create cluster -c standalone1

Exemplos de configurações de cluster independentes

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