Crie um cluster padrão para executar cargas de trabalho de contentores

Este documento explica como criar um cluster Kubernetes padrão numa zona isolada (air-gapped) do Google Distributed Cloud (GDC). Um cluster padrão oferece um cluster Kubernetes com âmbito do projeto e altamente configurável que inclui um conjunto mínimo de serviços geridos incluídos. O cluster padrão oferece mais flexibilidade para a configuração de serviços do que o cluster partilhado, mas também requer mais sobrecarga de gestão. Para mais informações sobre clusters padrão, consulte o artigo Configurações de clusters Kubernetes.

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

Este documento destina-se a públicos-alvo como programadores de aplicações no grupo de operadores de aplicações, que são responsáveis pela gestão de cargas de trabalho de contentores na respetiva organização. Para mais informações, consulte o artigo Públicos-alvo da documentação do GDC air-gapped.

Antes de começar

Para criar um cluster padrão, peça as autorizações necessárias e prepare o seu ambiente.

Peça as funções do IAM

Contacte o administrador do IAM da organização para lhe atribuir as seguintes funções:

  • Administrador do IAM do projeto (project-iam-admin): atribua a outros utilizadores as funções necessárias para gerir o acesso em clusters padrão.
  • Administrador do cluster padrão (standard-cluster-admin): crie clusters padrão no projeto.

Estas funções estão associadas ao espaço de nomes do projeto.

Prepare o seu ambiente

Planeie o bloco CIDR de pods

Para atribuir o bloco CIDR de pods com o tamanho adequado para as suas cargas de trabalho, tem de calcular a quantidade de endereços IP necessários para o cluster Kubernetes antes de o criar. Não é possível alterar a maioria dos parâmetros de rede após a criação do cluster.

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

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

Consulte o exemplo seguinte para compreender como o valor predefinido de Per node mask size= /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 pods necessária para configurar o cluster Kubernetes com base no número de nós necessários. Planeie futuras 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)

Dado que existe um Per node mask size= /24 predefinido , consulte a seguinte tabela que mapeia a máscara CIDR de pods para o número de nós compatíveis.

Máscara CIDR de pods Cálculo: 2(Per node mask size - CIDR mask) Número máximo de nós compatíveis, incluindo nós do plano de controlo
/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 pods para o cluster Kubernetes, configure-o como parte do fluxo de trabalho de criação do cluster na secção seguinte.

Crie um cluster padrão

Para criar um cluster padrão, conclua os seguintes passos:

Consola

  1. No seletor de projetos, selecione o seu projeto.

    Os clusters padrão são recursos com âmbito do projeto. Se selecionar uma organização, cria um cluster partilhado, que tem âmbito da organização. Para mais informações, consulte o artigo 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 na qual quer criar o cluster.

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

  7. Clique em Seguinte.

  8. Configure as definições de rede para o cluster. Não pode alterar estas definições de rede depois de criar o cluster. O protocolo de Internet predefinido e compatível para clusters Kubernetes é a versão 4 do protocolo de Internet (IPv4).

    1. Se quiser criar nós de balanceador de carga dedicados, introduza o número de nós a criar. Por predefinição, recebe zero nós e o tráfego do balanceador de carga é encaminhado através dos nós do plano de controlo.

    2. Selecione o CIDR de serviços (Classless Inter-Domain Routing) a usar. Os serviços implementados, como os balanceadores de carga, recebem endereços IP atribuídos a partir deste intervalo.

    3. Selecione o CIDR de pods a usar. O cluster atribui endereços IP a partir deste intervalo aos seus pods e VMs.

    4. Clique em Seguinte.

  9. Reveja os detalhes do node pool predefinido gerado automaticamente para o cluster. Clique em Editar para modificar o node pool predefinido.

  10. Para criar node pools adicionais, selecione Adicionar node pool. Ao editar o node pool predefinido ou adicionar um novo node pool, pode personalizá-lo com as seguintes opções:

    1. Atribua um nome ao node pool. Não pode modificar o nome depois de criar o node pool.
    2. Especifique o número de nós de trabalho a criar no node pool.
    3. Selecione a classe de máquina mais adequada aos requisitos da sua carga de trabalho. Veja a lista das seguintes definições:

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

  11. Clique em Criar para criar o cluster.

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

API

  1. Crie um recurso personalizado Cluster e guarde-o como um ficheiro 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 o seguinte:

    • CLUSTER_NAME: o nome do cluster. O nome do cluster não pode terminar com -system. O sufixo -system está reservado para clusters criados pelo GDC.
    • PROJECT_NAME: o nome do projeto no qual quer criar o cluster.
    • POD_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de pods. Se não estiver definido, é usado um valor predefinido 21.
    • SERVICE_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de serviços. Se não estiver definido, é usado um valor predefinido 23.
    • KUBERNETES_VERSION: a versão do Kubernetes do cluster, como 1.26.5-gke.2100. Para ver uma lista das versões do Kubernetes disponíveis para configuração, consulte o artigo Veja uma lista das versões do Kubernetes disponíveis para um cluster.
    • MACHINE_TYPE: o tipo de máquina para os nós de trabalho do node pool. Veja os tipos de máquinas disponíveis para o que está disponível para configuração.
    • NODE_POOL_NAME: o nome do node pool.
    • NUMBER_OF_WORKER_NODES: o número de nós de trabalho a aprovisionar no node pool.
    • TAINTS: os taints a aplicar aos nós deste node pool. Este é um campo opcional.
    • LABELS: as etiquetas a aplicar aos nós deste node pool. Contém uma lista de pares de chave-valor. Este é um campo opcional.
    • GPU_PARTITION_SCHEME: o esquema de partição da GPU, se estiver a executar cargas de trabalho de GPU. Este é um campo opcional. Por exemplo, mixed-2. A GPU não é dividida se este campo não estiver definido. Para mais informações sobre os perfis de GPU multi-instância (MIG) disponíveis, consulte Perfis 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 kubeconfig do servidor da API zonal. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na zona de destino, consulte o artigo Inicie sessão.

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

Terraform

  1. Num ficheiro de configuração do Terraform, insira o seguinte fragmento 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 o seguinte:

    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na zona de destino, consulte o artigo Inicie sessão.
    • CLUSTER_NAME: o nome do cluster. O nome do cluster não pode terminar com -system. O sufixo -system está reservado para clusters criados pelo GDC.
    • PROJECT_NAME: o nome do projeto no qual quer criar o cluster.
    • POD_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de pods. Se não estiver definido, é usado um valor predefinido 21.
    • SERVICE_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de serviços. Se não estiver definido, é usado um valor predefinido 23.
    • KUBERNETES_VERSION: a versão do Kubernetes do cluster, como 1.26.5-gke.2100. Para ver uma lista das versões do Kubernetes disponíveis para configuração, consulte o artigo Veja uma lista das versões do Kubernetes disponíveis para um cluster.
    • MACHINE_TYPE: o tipo de máquina para os nós de trabalho do node pool. Veja os tipos de máquinas disponíveis para o que está disponível para configuração.
    • NODE_POOL_NAME: o nome do node pool.
    • NUMBER_OF_WORKER_NODES: o número de nós de trabalho a aprovisionar no node pool.
    • TAINTS: os taints a aplicar aos nós deste node pool. Este é um campo opcional.
    • LABELS: as etiquetas a aplicar aos nós deste node pool. Contém uma lista de pares de chave-valor. Este é um campo opcional.
    • GPU_PARTITION_SCHEME: o esquema de partição da GPU, se estiver a executar cargas de trabalho de GPU. Este é um campo opcional. Por exemplo, mixed-2. A GPU não é dividida se este campo não estiver definido. Para mais informações sobre os perfis de GPU multi-instância (MIG) disponíveis, consulte Perfis MIG compatíveis.
  2. Aplique o novo cluster padrão com o Terraform:

    terraform apply
    

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

O que se segue?