Este documento explica como criar um cluster Kubernetes partilhado numa zona isolada do ar do Google Distributed Cloud (GDC). Um cluster partilhado abrange vários projetos e inclui serviços abrangentes geridos pela GDC que oferecem uma configuração de cluster Kubernetes altamente opinativa e menos configurável do que o cluster padrão. Para mais informações sobre clusters padrão, consulte as configurações de clusters do Kubernetes.
Os clusters partilhados 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
Para receber as autorizações necessárias para criar um cluster partilhado, peça ao administrador de IAM da sua organização para lhe conceder 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.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.
/24Este 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 partilhado
Conclua os passos seguintes para criar um cluster Kubernetes partilhado:
Consola
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 na qual criar o cluster.
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.

Clicar em Seguinte.
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).
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.
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.
Selecione o CIDR do agrupamento a usar. O cluster atribui endereços IP deste intervalo aos seus pods e VMs.
Clicar em Seguinte.
Reveja os detalhes do conjunto de nós predefinido gerado automaticamente para o cluster. Clique em edit Editar para modificar o conjunto de nós predefinido.
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:
- Atribua um nome ao conjunto de nós. Não pode modificar o nome depois de criar o conjunto de nós.
- Especifique o número de nós de trabalho a criar no node pool.
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
Clique em Guardar.
Clique em Criar para criar o cluster.
A criação de clusters partilhados pode demorar até 90 minutos.
API
Para criar um novo cluster através da API diretamente, aplique um recurso personalizado à sua zona do GDC:
Crie um recurso personalizado
Clustere guarde-o como um ficheiro YAML, comocluster.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 nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIEDSubstitua o seguinte:
CLUSTER_NAME: o nome do cluster. O nome do cluster não pode terminar com-system. O sufixo-systemestá 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 de21.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 de23.KUBERNETES_VERSION: a versão do Kubernetes do cluster, como1.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.
Aplique o recurso personalizado à sua instância do GDC:
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVERSubstitua
MANAGEMENT_API_SERVERpelo 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 partilhados pode demorar até 90 minutos.
Terraform
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" } "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-systemestá 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 de21.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 de23.KUBERNETES_VERSION: a versão do Kubernetes do cluster, como1.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.
Aplique o novo cluster do Kubernetes partilhado através do Terraform:
terraform apply
A criação de clusters partilhados pode demorar até 90 minutos.
O que se segue?
- Implemente uma app de contentor de HA
- Cargas de trabalho de contentores no GDC
- Hierarquia de recursos