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 do ar do Google Distributed Cloud (GDC). Um cluster padrão oferece um cluster Kubernetes altamente configurável ao nível do projeto 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 as Configurações de clusters do 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 como os programadores de aplicações no grupo de operadores de aplicações, que são responsáveis pela gestão das cargas de trabalho de contentores na respetiva organização. Para mais informações, consulte a documentação sobre públicos-alvo para GDC com isolamento de ar.

Antes de começar

  • Confirme que tem a configuração adequada para aceder e gerir clusters padrão. Para mais informações, consulte o artigo Faça a gestão do acesso a clusters padrão.

  • Para receber as autorizações necessárias para criar um cluster padrão, peça ao administrador de IAM da organização para lhe conceder as funções de administrador de IAM do projeto (project-iam-admin) e administrador de cluster padrão (standard-cluster-admin). Estas funções estão associadas ao espaço de nomes do seu projeto.

  • Planeie os seguintes limites isolados do Google Distributed Cloud (GDC) para clusters do Kubernetes:

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

Planeie o bloco CIDR do pod

Para atribuir o bloco CIDR do pod de tamanho adequado às suas cargas de trabalho, tem de calcular a quantidade de endereços IP necessários para o cluster do Kubernetes antes de o criar. 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 seguinte ao atribuir endereços IP:

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

Veja 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 do pod necessária para configurar o cluster do Kubernetes com base no número de nós necessário. 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)

Uma vez que existe um tamanho da máscara por nó predefinido= /24 , consulte a seguinte tabela que mapeia a máscara CIDR do agrupamento para o número de nós suportados.

Máscara CIDR do agrupamento Cálculo: 2(Tamanho da máscara por nó - máscara CIDR) Número máximo de nós suportados, 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 do pod para o cluster do 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:

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 criar o cluster.
    • POD_CIDR: o tamanho dos intervalos de rede a partir dos quais os endereços IP virtuais do pod são atribuídos. Se não estiver definida, é usado um valor predefinido de 21.
    • SERVICE_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de serviço. Se não estiver definida, é usado um valor predefinido de 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 Liste as 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: as restrições a aplicar aos nós deste node pool. Este é um campo opcional.
    • LABELS: as etiquetas a aplicar aos nós deste conjunto de nós. 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 da GPU. Este é um campo opcional. Por exemplo, mixed-2. A GPU não é particionada se este campo não estiver definido. Para mais informações sobre os perfis de GPU multi-instância (MIG) disponíveis, consulte o artigo Perfis de MIG suportados.
  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 sua zona segmentada, consulte Iniciar sessão.

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

Terraform

  1. Num ficheiro de configuração do Terraform, insira o seguinte fragmento do 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 sua zona segmentada, consulte Iniciar 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 criar o cluster.
    • POD_CIDR: o tamanho dos intervalos de rede a partir dos quais os endereços IP virtuais do pod são atribuídos. Se não estiver definida, é usado um valor predefinido de 21.
    • SERVICE_CIDR: o tamanho dos intervalos de rede a partir dos quais são atribuídos endereços IP virtuais de serviço. Se não estiver definida, é usado um valor predefinido de 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 Liste as 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: as restrições a aplicar aos nós deste node pool. Este é um campo opcional.
    • LABELS: as etiquetas a aplicar aos nós deste conjunto de nós. 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 da GPU. Este é um campo opcional. Por exemplo, mixed-2. A GPU não é particionada se este campo não estiver definido. Para mais informações sobre os perfis de GPU multi-instância (MIG) disponíveis, consulte o artigo Perfis de MIG suportados.
  2. Aplique o novo cluster padrão com o Terraform:

    terraform apply
    

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

O que se segue?