Criar um cluster padrão para executar cargas de trabalho de contêineres

Neste documento, explicamos como criar um cluster padrão do Kubernetes em uma zona com isolamento físico do Google Distributed Cloud (GDC). Um cluster padrão fornece um cluster do Kubernetes com escopo de projeto e altamente configurável que inclui um conjunto mínimo de serviços gerenciados. O cluster padrão oferece mais flexibilidade para a configuração de serviço do que o cluster compartilhado, mas também exige mais overhead de gerenciamento. Para mais informações sobre clusters Standard, consulte Configurações de cluster do Kubernetes.

Os clusters padrão são um recurso zonal e não podem abranger várias zonas. Para operar clusters em um universo de várias zonas, é necessário criar clusters manualmente em cada zona.

Este documento é destinado a públicos-alvo como desenvolvedores de aplicativos no grupo de operadores de aplicativos, que são responsáveis por gerenciar cargas de trabalho de contêiner na organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

Para criar um cluster padrão, solicite as permissões necessárias e prepare o ambiente.

Solicitar papéis do IAM

Entre em contato com o admin. da organização do IAM para receber os seguintes papéis:

  • Administrador do IAM do projeto (project-iam-admin): conceder a outros usuários os papéis necessários para gerenciar o acesso em clusters padrão.
  • Administrador de cluster padrão (standard-cluster-admin): cria clusters padrão no projeto.

Esses papéis estão vinculados ao namespace do projeto.

Preparar o ambiente

  • Verifique se você tem a configuração adequada para acessar e gerenciar clusters padrão. Para mais informações, consulte Gerenciar o acesso a clusters padrão.
  • Gere o arquivo kubeconfig do servidor de API zonal para hospedar o cluster. Defina a variável de ambiente MANAGEMENT_API_SERVER como o caminho do kubeconfig. Para mais informações, consulte Recursos do servidor de API de gerenciamento zonal.
  • Revise os limites do cluster para considerações de recursos.

Planejar o bloco CIDR do pod

Para alocar o bloco CIDR de pod de tamanho adequado para suas cargas de trabalho, calcule a quantidade de endereços IP necessários para o cluster do Kubernetes antes de criá-lo. A maioria dos parâmetros de rede não pode ser alterada após a criação do cluster.

Um cluster do Kubernetes segue a lógica de procedimento ao alocar endereços IP:

  • O Kubernetes atribui um bloco CIDR /24 composto por 256 endereços a cada um dos nós. Esse valor segue o máximo padrão de 110 pods por nó para clusters do Kubernetes.
  • O tamanho do bloco CIDR atribuído a um nó depende do valor máximo de pods por nó.
  • O bloco sempre contém, pelo menos, o dobro de endereços do número máximo de pods por nó.

Veja no exemplo a seguir como o valor padrão de Tamanho da máscara por nó= /24 foi calculado para acomodar 110 pods:

Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220

Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256

Determine a máscara CIDR do pod necessária para configurar o cluster do Kubernetes com base no número de nós necessários. Planeje as próximas adições de nós ao cluster ao configurar o intervalo CIDR:

  Total number of nodes supported = 2(Per node mask size - pod CIDR mask)

Como há um tamanho de máscara por nó padrão= /24, consulte a tabela a seguir, que mapeia a máscara CIDR do pod para o número de nós compatíveis.

Máscara CIDR do pod Cálculo: 2(tamanho da máscara por nó - máscara CIDR) Número máximo de nós compatíveis, incluindo nós do plano de controle
/21 2(24 - 21) 8
/20 2(24-20) 16
/19 2(24 - 19) 32
/18 2(24 - 18) 64

Depois de calcular o bloco CIDR de pod para o cluster do Kubernetes, configure-o como parte do fluxo de trabalho de criação do cluster na próxima seção.

criar um cluster padrão

Para criar um cluster padrão, siga estas etapas:

Console

  1. No seletor de projetos, selecione seu projeto.

    Os clusters padrão são recursos com escopo de projeto. Se você selecionar uma organização, vai criar um cluster compartilhado, que tem escopo de organização. Para mais informações, consulte a hierarquia de recursos.

  2. No menu de navegação, selecione Kubernetes Engine > Clusters.

  3. Clique em Criar cluster.

  4. No campo Nome, especifique um nome para o cluster.

  5. Selecione a zona em que o cluster será criado.

  6. Selecione a versão do Kubernetes para o cluster.

  7. Clique em Próxima.

  8. Defina as configurações de rede do cluster. Não é possível alterar essas configurações de rede depois de criar o cluster. O único protocolo de Internet padrão compatível com clusters do Kubernetes é o protocolo de Internet versão 4 (IPv4).

    1. Se você quiser criar nós de balanceador de carga dedicados, insira o número de nós a serem criados. Por padrão, você recebe zero nós, e o tráfego do balanceador de carga é executado pelos nós do plano de controle.

    2. Selecione o CIDR de serviço (roteamento entre domínios sem classe) que será usado. Os serviços implantados, como balanceadores de carga, recebem endereços IP desse intervalo.

    3. Selecione o CIDR do pod a ser usado. O cluster aloca endereços IP desse intervalo para os pods e as VMs.

    4. Clique em Próxima.

  9. Revise os detalhes do pool de nós padrão gerado automaticamente para o cluster. Clique em Editar para modificar o pool de nós padrão.

  10. Para criar outros pools de nós, selecione Adicionar pool de nós. Ao editar o pool de nós padrão ou adicionar um novo, você o personaliza com as seguintes opções:

    1. Atribua um nome ao pool de nós. Não é possível modificar o nome depois de criar o pool de nós.
    2. Especifique o número de nós de trabalho a serem criados no pool de nós.
    3. Selecione a classe de máquina mais adequada aos requisitos da sua carga de trabalho. Confira a lista das seguintes configurações:

      • Tipo de máquina
      • CPU
      • Memória
    4. Clique em Salvar.

  11. Clique em Criar para criar o cluster.

A criação de um cluster padrão pode levar até 60 minutos.

API

  1. Crie um recurso personalizado Cluster e salve-o como um arquivo YAML, como cluster.yaml:

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_NAME
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster. O nome do cluster não pode terminar com -system. O sufixo -system é reservado para clusters criados pelo GDC.
    • PROJECT_NAME: o nome do projeto em que o cluster será criado.
    • POD_CIDR: o tamanho dos intervalos de rede de onde os endereços IP virtuais do pod são alocados. Se não for definido, um valor padrão 21 será usado.
    • SERVICE_CIDR: o tamanho dos intervalos de rede em que os endereços IP virtuais do serviço são alocados. Se não for definido, um valor padrão 23 será usado.
    • KUBERNETES_VERSION: a versão do Kubernetes do cluster, como 1.26.5-gke.2100. Para listar as versões disponíveis do Kubernetes para configuração, consulte Listar as versões disponíveis do Kubernetes para um cluster.
    • MACHINE_TYPE: o tipo de máquina para os nós de trabalho do pool de nós. Confira os tipos de máquina disponíveis para saber o que pode ser configurado.
    • NODE_POOL_NAME: o nome do pool de nós.
    • NUMBER_OF_WORKER_NODES: o número de nós de trabalho a serem provisionados no pool de nós.
    • TAINTS: os taints a serem aplicados aos nós desse pool de nós. Esse campo é opcional.
    • LABELS: os rótulos a serem aplicados aos nós desse pool de nós. Ele contém uma lista de pares de chave-valor. Esse campo é opcional.
    • GPU_PARTITION_SCHEME: o esquema de particionamento de GPU, se você estiver executando cargas de trabalho de GPU. Esse campo é opcional. Por exemplo, mixed-2. A GPU não será particionada se esse campo não estiver definido. Para mais informações sobre os perfis de GPU de várias instâncias (MIG) disponíveis, consulte Perfis de MIG compatíveis.
  2. Aplique o recurso personalizado à instância do GDC:

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

    Substitua MANAGEMENT_API_SERVER pelo caminho do kubeconfig do servidor de API zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor de API na zona de destino, consulte Fazer login.

A criação de um cluster padrão pode levar até 60 minutos.

Terraform

  1. Em um arquivo de configuração do Terraform, insira o seguinte snippet de código:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "PROJECT_NAME"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "nodePools" = [{
            "machineTypeName" = "MACHINE_TYPE"
            "name" = "NODE_POOL_NAME"
            "nodeCount" = "NUMBER_OF_WORKER_NODES"
            "taints" = "TAINTS"
            "labels" = "LABELS"
            "acceleratorOptions" = {
              "gpuPartitionScheme" = "GPU_PARTITION_SCHEME"
            }
          }]
          "releaseChannel" = {
            "channel" = "UNSPECIFIED"
          }
        }
      }
    }
    

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor de API zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor de API na zona de destino, consulte Fazer login.
    • CLUSTER_NAME: o nome do cluster. O nome do cluster não pode terminar com -system. O sufixo -system é reservado para clusters criados pelo GDC.
    • PROJECT_NAME: o nome do projeto em que o cluster será criado.
    • POD_CIDR: o tamanho dos intervalos de rede de onde os endereços IP virtuais do pod são alocados. Se não for definido, um valor padrão 21 será usado.
    • SERVICE_CIDR: o tamanho dos intervalos de rede em que os endereços IP virtuais do serviço são alocados. Se não for definido, um valor padrão 23 será usado.
    • KUBERNETES_VERSION: a versão do Kubernetes do cluster, como 1.26.5-gke.2100. Para listar as versões disponíveis do Kubernetes para configuração, consulte Listar as versões disponíveis do Kubernetes para um cluster.
    • MACHINE_TYPE: o tipo de máquina para os nós de trabalho do pool de nós. Confira os tipos de máquina disponíveis para saber o que pode ser configurado.
    • NODE_POOL_NAME: o nome do pool de nós.
    • NUMBER_OF_WORKER_NODES: o número de nós de trabalho a serem provisionados no pool de nós.
    • TAINTS: os taints a serem aplicados aos nós desse pool de nós. Esse campo é opcional.
    • LABELS: os rótulos a serem aplicados aos nós desse pool de nós. Ele contém uma lista de pares de chave-valor. Esse campo é opcional.
    • GPU_PARTITION_SCHEME: o esquema de particionamento de GPU, se você estiver executando cargas de trabalho de GPU. Esse campo é opcional. Por exemplo, mixed-2. A GPU não será particionada se esse campo não estiver definido. Para mais informações sobre os perfis de GPU de várias instâncias (MIG) disponíveis, consulte Perfis de MIG compatíveis.
  2. Aplique o novo cluster padrão usando o Terraform:

    terraform apply
    

A criação de um cluster padrão pode levar até 60 minutos.

A seguir