Este documento explica como criar um cluster Kubernetes padrão numa zona isolada (air-gapped) do Google Distributed Cloud (GDC). Um cluster padrão oferece um cluster Kubernetes com âmbito do projeto e altamente configurável 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 o artigo Configurações de clusters 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-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 da documentação do GDC air-gapped.
Antes de começar
Para criar um cluster padrão, peça as autorizações necessárias e prepare o seu ambiente.
Peça as funções do IAM
Contacte o administrador do IAM da organização para lhe atribuir as seguintes funções:
- Administrador do IAM do projeto (
project-iam-admin): atribua a outros utilizadores as funções necessárias para gerir o acesso em clusters padrão. - Administrador do cluster padrão (
standard-cluster-admin): crie clusters padrão no projeto.
Estas funções estão associadas ao espaço de nomes do projeto.
Prepare o seu ambiente
- Valide se 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.
- 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 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 Kubernetes segue a seguinte lógica 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 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ó.
Consulte 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 de pods necessária para configurar o cluster 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 Per node mask size= /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(Per node mask size - 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 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:
Consola
No seletor de projetos, selecione o seu projeto.
Os clusters padrão são recursos com âmbito do projeto. Se selecionar uma organização, cria um cluster partilhado, que tem âmbito da organização. 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 zona na qual quer criar o cluster.
Selecione a versão do Kubernetes para o cluster.
Clique em Seguinte.
Configure as definições de rede para o cluster. Não pode alterar estas definições de rede depois de criar o cluster. O protocolo de Internet predefinido e compatível para clusters 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 é encaminhado através dos nós do plano 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 atribuídos a partir deste intervalo.
Selecione o CIDR de pods a usar. O cluster atribui endereços IP a partir 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 depois de criar o node pool.
- Especifique o número de nós de trabalho a criar no node pool.
Selecione a classe de máquina 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 um cluster padrão pode demorar até 60 minutos.
API
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: 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: 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.PROJECT_NAME: o nome do projeto no qual quer criar o cluster.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 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 Perfis MIG compatíveis.
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 zona de destino, consulte o artigo Inicie sessão.
A criação de um cluster padrão pode demorar até 60 minutos.
Terraform
Num ficheiro de configuração do Terraform, insira o seguinte fragmento de 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 zona de destino, consulte o artigo Inicie 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.PROJECT_NAME: o nome do projeto no qual quer criar o cluster.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 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 Perfis MIG compatíveis.
Aplique o novo cluster padrão com o Terraform:
terraform apply
A criação de um cluster padrão pode demorar até 60 minutos.
O que se segue?
- Faça a gestão do acesso a clusters padrão
- Implemente uma app de contentores de HA
- Cargas de trabalho de contentores no GDC
- Hierarquia de recursos
- Configure o Cloud NAT para clusters padrão