Crie um cluster para executar cargas de trabalho de contentores

Crie um cluster do Kubernetes para permitir a implementação de cargas de trabalho de contentores. Os clusters são um recurso zonal e não podem abranger várias zonas. Para operar clusters numa implementação de várias zonas, tem de criar manualmente clusters em cada zona.

Antes de começar

Para receber as autorizações necessárias para criar um cluster do Kubernetes, peça ao administrador de IAM da sua organização que lhe conceda a função de administrador do cluster de utilizadores (user-cluster-admin). Esta função não está associada a um espaço de nomes.

O Google Distributed Cloud (GDC) air-gapped tem os seguintes limites 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ó

Configure o bloco CIDR do pod

O cluster segue esta lógica ao atribuir endereços IP:

  • O Kubernetes atribui um bloco CIDR /24 com 256 endereços a cada um dos nós. Este valor cumpre o máximo predefinido de 110 pods por nó para clusters de utilizadores.
  • 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 para o cluster de utilizadores 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 temos um tamanho da máscara por nó predefinido= /24 , consulte a seguinte tabela que mapeia a máscara CIDR do pod 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

Crie um cluster do Kubernetes

Conclua os passos seguintes para criar um cluster do Kubernetes:

Consola

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

  2. Clique em Criar cluster.

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

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

  5. Selecione a zona na qual criar o cluster.

  6. Clique em Anexar projeto e selecione um projeto existente para anexar ao cluster. Em seguida, clique em Guardar. Pode anexar ou desanexar projetos depois de criar o cluster na página de detalhes do projeto. Tem de ter um projeto associado ao cluster antes de implementar cargas de trabalho de contentores no mesmo.

    Crie um cluster através da consola.

  7. Clicar em Seguinte.

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

    1. Se quiser criar nós do 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 equilibrador de carga é executado através dos nós de controlo.

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

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

    4. Clicar em Seguinte.

  9. Reveja os detalhes do conjunto de nós predefinido gerado automaticamente para o cluster. Clique em Editar para modificar o conjunto de nós predefinido.

  10. Para criar node pools adicionais, selecione Adicionar node pool. Quando edita o node pool predefinido ou adiciona um novo node pool, personaliza-o com as seguintes opções:

    1. Atribua um nome ao conjunto de nós. Não pode modificar o nome depois de criar o conjunto de nós.
    2. Especifique o número de nós de trabalho a criar no node pool.
    3. Selecione a classe de máquinas 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.

API

Para criar um novo cluster diretamente através da API, aplique um recurso personalizado à sua instância do GDC:

  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: platform
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      loadBalancer:
        ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE
      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.
    • 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 listar as versões do Kubernetes disponíveis para configurar, consulte o artigo Liste as versões do Kubernetes disponíveis para um cluster.
    • LOAD_BALANCER_POOL_SIZE: o tamanho dos conjuntos de endereços IP não sobrepostos usados pelos serviços de balanceamento de carga. Se não for definida, é usado um valor predefinido de 20.
    • MACHINE_TYPE: o tipo de máquina dos 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 conjunto de nós.
    • TAINTS: as contaminações 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 da GPU. Por exemplo, mixed-2. A GPU não é particionada se este campo não estiver definido. Para ver os perfis de GPU multi-instância (MIG) disponíveis, consulte os 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 para ver detalhes.

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" = "platform"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "loadBalancer" = {
            "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE"
          }
          "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 para ver detalhes.
    • 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.
    • 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 listar as versões do Kubernetes disponíveis para configurar, consulte o artigo Liste as versões do Kubernetes disponíveis para um cluster.
    • LOAD_BALANCER_POOL_SIZE: o tamanho dos conjuntos de endereços IP não sobrepostos usados pelos serviços de balanceamento de carga. Se não for definida, é usado um valor predefinido de 20.
    • MACHINE_TYPE: o tipo de máquina dos 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 conjunto de nós.
    • TAINTS: as contaminações 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 da GPU. Por exemplo, mixed-2. A GPU não é particionada se este campo não estiver definido. Para ver os perfis de GPU multi-instância (MIG) disponíveis, consulte os perfis de MIG suportados.
  2. Aplique o novo cluster do Kubernetes com o Terraform:

    terraform apply
    

Liste as versões do Kubernetes disponíveis para um cluster

Pode listar as versões do Kubernetes disponíveis na sua instância do GDC usando a CLI kubectl:

kubectl get userclustermetadata.upgrade.private.gdc.goog \
    -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
    --kubeconfig MANAGEMENT_API_SERVER

Substitua MANAGEMENT_API_SERVER pelo caminho kubeconfig do servidor da API zonal do cluster.

O resultado tem um aspeto semelhante ao seguinte:

K8S-VERSION
1.25.10-gke.2100
1.26.5-gke.2100
1.27.4-gke.500

Suporte cargas de trabalho de GPU num cluster

A nuvem distribuída oferece suporte de GPU NVIDIA para clusters do Kubernetes e executa os seus dispositivos de GPU como cargas de trabalho do utilizador. Por exemplo, pode preferir executar blocos de notas de inteligência artificial (IA) e aprendizagem automática (AA) num ambiente de GPU. Certifique-se de que o cluster suporta dispositivos GPU antes de tirar partido dos blocos de notas de IA e ML. O suporte de GPU está ativado por predefinição para clusters que têm máquinas com GPU aprovisionadas.

Pode criar clusters diretamente através da consola ou da API do GDC. Certifique-se de que aprovisiona máquinas com GPU para o cluster de modo a suportar cargas de trabalho de GPU nos respetivos contentores associados. Para mais informações, consulte o artigo Crie um cluster do Kubernetes.

As GPUs são atribuídas estaticamente. As primeiras quatro GPUs estão sempre dedicadas a cargas de trabalho, como APIs de inteligência artificial (IA) e aprendizagem automática (AA) pré-preparadas. Estas GPUs não são executadas num cluster do Kubernetes. As GPUs restantes estão disponíveis para clusters do Kubernetes. Os notebooks de IA e ML são executados em clusters do Kubernetes.

Certifique-se de que atribui máquinas com GPUs aos tipos de clusters corretos para garantir que pode usar componentes como APIs de IA e ML e blocos de notas.