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 isolada do Google Distributed Cloud (GDC). Um cluster padrão oferece um cluster do Kubernetes altamente configurável e com escopo de projeto que inclui um conjunto mínimo de serviços gerenciados. O cluster padrão oferece mais flexibilidade para a configuração de serviços 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 manualmente clusters 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êineres na organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

  • 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.

  • Para receber as permissões necessárias para criar um cluster padrão, peça ao administrador do IAM da organização para conceder a você os papéis de administrador do IAM do projeto (project-iam-admin) e administrador do cluster padrão (standard-cluster-admin). Essas funções estão vinculadas ao namespace do projeto.

  • Planeje os seguintes limites de isolamento físico do Google Distributed Cloud (GDC) para clusters do Kubernetes:

    • 16 clusters por organização
    • 42 nós de trabalho por cluster e um mínimo de três nós de trabalho
    • 4.620 pods por cluster
    • 110 pods por nó;

Planejar o bloco CIDR de pod

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

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

  • O Kubernetes atribui um bloco CIDR /24 com 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 número máximo de pods por valor de nó.
  • O bloco sempre contém, pelo menos, o dobro de endereços do número máximo de pods por nó.

Confira o exemplo a seguir para entender 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 de pod necessária para configurar o cluster do Kubernetes com base no número de nós necessários. Planeje futuras adições de nós ao cluster ao configurar o intervalo de CIDR:

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

Como há um Tamanho da 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 de 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 do 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:

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 que 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 de que os endereços IP virtuais de 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. Consulte 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 deste pool de nós. Esse campo é opcional.
    • LABELS: os rótulos a serem aplicados aos nós deste 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 for definido. Para mais informações sobre os perfis de GPU com várias instâncias (MIG) disponíveis, consulte Perfis de MIG compatíveis.
  2. Aplique o recurso personalizado à sua 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 da 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 da API zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da 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 que 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 de que os endereços IP virtuais de 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. Consulte 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 deste pool de nós. Esse campo é opcional.
    • LABELS: os rótulos a serem aplicados aos nós deste 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 este campo não for definido. Para mais informações sobre os perfis de GPU com 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