Este documento explica como criar um cluster compartilhado do Kubernetes em uma zona isolada do Google Distributed Cloud (GDC). Um cluster compartilhado abrange vários projetos e inclui serviços abrangentes gerenciados pelo GDC que oferecem uma configuração de cluster do Kubernetes altamente opinativa e menos configurável do que o cluster padrão. Para mais informações sobre clusters Standard, consulte Configurações de cluster do Kubernetes.
Os clusters compartilhados 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
Para receber as permissões necessárias para criar um cluster compartilhado, peça ao administrador do IAM da organização para conceder a você o papel de administrador do cluster de usuário (
user-cluster-admin). Esse papel não está vinculado a um namespace.Para usar a API ou o Terraform e criar um cluster compartilhado, gere o arquivo kubeconfig do servidor de API zonal para hospedar o cluster. Para mais informações, consulte Fazer login. Defina a variável de ambiente
MANAGEMENT_API_SERVERcomo o caminho do kubeconfig.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, que consiste em 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 compartilhado
Siga estas etapas para criar um cluster compartilhado do Kubernetes:
Console
No menu de navegação, selecione Kubernetes Engine > Clusters.
Clique em Criar cluster.
No campo Nome, especifique um nome para o cluster.
Selecione a versão do Kubernetes para o cluster.
Selecione a zona em que o cluster será criado.
Clique em Anexar projeto e selecione um projeto para anexar ao cluster. Clique em Salvar. É possível anexar ou separar projetos depois de criar o cluster na página de detalhes do projeto. É necessário ter um projeto anexado ao cluster antes de implantar cargas de trabalho de contêiner nele.

Clique em Próxima.
Configure as definições de rede do cluster. Não é possível mudar essas configurações de rede depois de criar o cluster. O protocolo de Internet padrão e único compatível com clusters do Kubernetes é a versão 4 (IPv4).
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 de controle.
Selecione o CIDR de serviço (roteamento entre domínios sem classe) a ser usado. Seus serviços implantados, como balanceadores de carga, recebem endereços IP desse intervalo.
Selecione o CIDR do pod a ser usado. O cluster aloca endereços IP desse intervalo para seus pods e VMs.
Clique em Próxima.
Revise os detalhes do pool de nós padrão gerado automaticamente para o cluster. Clique em edit Editar para modificar o pool de nós padrão.
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, personalize-o com as seguintes opções:
- Atribua um nome ao pool de nós. Não é possível modificar o nome depois de criar o pool de nós.
- Especifique o número de nós de trabalho a serem criados no pool de nós.
Selecione a classe de máquina mais adequada para os requisitos da sua carga de trabalho. Confira a lista das seguintes configurações:
- Tipo de máquina
- CPU
- Memória
Clique em Salvar.
Clique em Criar para gerar o cluster.
A criação de um cluster compartilhado pode levar até 90 minutos.
API
Crie o recurso personalizado
Cluster:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF 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 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 EOFSubstitua:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.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.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ão21será 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ão23será usado.KUBERNETES_VERSION: a versão do Kubernetes do cluster, como1.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.
A criação de um cluster compartilhado pode levar até 90 minutos.
Crie o recurso personalizado
ProjectBinding:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOFSubstitua:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.CLUSTER_NAME: o nome do cluster.PROJECT_NAME: o nome do projeto a ser vinculado. Cada recursoProjectBindingsó pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, umProjectBindingexclusivo precisará ser criado para cada um deles.
É necessário anexar um projeto ao cluster antes que um desenvolvedor possa implantar cargas de trabalho de contêiner no cluster.
Terraform
Em um arquivo de configuração do Terraform, insira o seguinte snippet de código para criar o recurso personalizado
Cluster:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "CLUSTER_RESOURCE_NAME" { 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" } "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.CLUSTER_RESOURCE_NAME: o nome exclusivo do recurso do Terraform do cluster, comocluster-1. Esse nome é usado pelo Terraform para identificar seu cluster e não é usado pelo GDC.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.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ão21será 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ão23será usado.KUBERNETES_VERSION: a versão do Kubernetes do cluster, como1.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.
Em um arquivo de configuração do Terraform, insira o seguinte snippet de código para criar o recurso personalizado
ProjectBinding:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }Substitua:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.PROJECT_BINDING_RESOURCE_NAME: o nome do recurso do Terraform da vinculação do projeto, comoproject-binding-1. Esse nome é usado pelo Terraform para identificar a vinculação do projeto e não é usado pelo GDC.CLUSTER_NAME: o nome do cluster.PROJECT_NAME: o nome do projeto a ser vinculado. Cada recursoProjectBindingsó pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, umProjectBindingexclusivo precisará ser criado para cada um deles.
É necessário anexar um projeto ao cluster antes que um desenvolvedor possa implantar cargas de trabalho de contêiner no cluster.
Aplique os novos recursos personalizados usando o Terraform:
terraform apply
A criação de um cluster compartilhado pode levar até 90 minutos.
A seguir
- Implantar um app de contêiner de alta disponibilidade
- Cargas de trabalho de contêiner no GDC
- Hierarquia de recursos