Este documento explica como criar um cluster do Kubernetes partilhado numa zona isolada do Google Distributed Cloud (GDC). Um cluster partilhado abrange vários projetos e inclui serviços geridos pelo GDC abrangentes 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 padrão, consulte o artigo 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-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 para a documentação do GDC isolado.
Antes de começar
Para receber as autorizações de que precisa para criar um cluster partilhado, peça ao administrador de IAM da organização para lhe atribuir a função de administrador do cluster do utilizador (
user-cluster-admin). Esta função não está associada a um espaço de nomes.Para usar a API ou o Terraform para criar um cluster partilhado, gere o ficheiro kubeconfig do servidor da API zonal para alojar o cluster. Defina a variável de ambiente
MANAGEMENT_API_SERVERpara o caminho kubeconfig. Para mais informações, consulte o artigo Recursos do servidor da API de gestão zonal.Reveja os limites de clusters para considerações sobre recursos.
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 do 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 do Kubernetes segue a lógica seguinte ao atribuir endereços IP:
- O Kubernetes atribui um bloco CIDR
/24composto 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 do Kubernetes. - O tamanho do bloco CIDR atribuído a um nó depende do valor de pods máximos 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 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 pods necessária para configurar o cluster do 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 Tamanho da máscara por nó= /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(Tamanho da máscara por nó - Máscara 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 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 do Kubernetes partilhado:
Consola
No seletor de projetos, selecione a sua organização.
Os clusters partilhados são recursos com âmbito da organização. Se selecionar um projeto, cria um cluster padrão, que tem âmbito do projeto. Para mais informações, consulte o artigo Hierarquia de recursos.
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 quer 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 após a criação do cluster a partir da página de detalhes do projeto. Tem de ter um projeto anexado ao cluster antes de implementar cargas de trabalho de contentores no mesmo.

Clique em Seguinte.
Configure as definições de rede para o cluster. Não pode alterar estas definições de rede após a criação do cluster. O protocolo de Internet predefinido e compatível para clusters do Kubernetes é a versão 4 do protocolo de Internet (IPv4).
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 é executado através dos nós de controlo.
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 deste intervalo.
Selecione o CIDR de pods a usar. O cluster atribui endereços IP deste intervalo aos seus pods e VMs.
Clique em Seguinte.
Reveja os detalhes do node pool predefinido gerado automaticamente para o cluster. Clique em edit Editar para modificar o node pool predefinido.
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:
- Atribua um nome ao node pool. Não pode modificar o nome após a criação do node pool.
- Especifique o número de nós de trabalho a criar no node pool.
Selecione a classe de máquina que melhor se adequa 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 um cluster partilhado pode demorar até 90 minutos a concluir.
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 o seguinte:
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-systemestá reservado para clusters criados pelo GDC.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 predefinido21.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 predefinido23.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 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 saber 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 o artigo Perfis de MIG compatíveis.
A criação de um cluster partilhado pode demorar até 90 minutos a concluir.
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 o seguinte:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.CLUSTER_NAME: o nome do cluster.PROJECT_NAME: o nome do projeto a associar. Cada recursoProjectBindingsó pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, tem de ser criado umProjectBindingexclusivo para cada cluster.
Tem de anexar um projeto ao cluster antes de um programador poder implementar cargas de trabalho de contentores no cluster.
Terraform
Num ficheiro de configuração do Terraform, insira o seguinte fragmento 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 o seguinte:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.CLUSTER_RESOURCE_NAME: o nome do recurso Terraform exclusivo do cluster, comocluster-1. Este nome é usado pelo Terraform para identificar o 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-systemestá reservado para clusters criados pelo GDC.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 predefinido21.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 predefinido23.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 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 saber 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 o artigo Perfis de MIG compatíveis.
Num ficheiro de configuração do Terraform, insira o seguinte fragmento 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 o seguinte:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal.PROJECT_BINDING_RESOURCE_NAME: o nome do recurso Terraform da associação de projetos, comoproject-binding-1. Este nome é usado pelo Terraform para identificar a associação de projetos e não é usado pelo GDC.CLUSTER_NAME: o nome do cluster.PROJECT_NAME: o nome do projeto a associar. Cada recursoProjectBindingsó pode ser mapeado para um cluster. Se um projeto precisar de acesso a vários clusters, tem de ser criado umProjectBindingexclusivo para cada cluster.
Tem de anexar um projeto ao cluster antes de um programador poder implementar cargas de trabalho de contentores no cluster.
Aplique os novos recursos personalizados com o Terraform:
terraform apply
A criação de um cluster partilhado pode demorar até 90 minutos a concluir.
O que se segue?
- Implemente uma app de contentores de HA
- Cargas de trabalho de contentores no GDC
- Hierarquia de recursos