Neste documento, explicamos como criar um cluster padrão do Kubernetes em uma zona isolada do Google Distributed Cloud (GDC). Um cluster padrão oferece um cluster do Kubernetes altamente configurável e com escopo de projeto que inclui um conjunto mínimo de serviços gerenciados. O cluster padrão oferece mais flexibilidade para a configuração de serviços do que o cluster compartilhado, mas também exige mais overhead de gerenciamento. Para mais informações sobre clusters Standard, consulte Configurações de cluster do Kubernetes.
Os clusters padrão 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
Verifique se você tem a configuração adequada para acessar e gerenciar clusters padrão. Para mais informações, consulte Gerenciar o acesso a clusters padrão.
Para receber as permissões necessárias para criar um cluster padrão, peça ao administrador do IAM da organização para conceder a você os papéis de administrador do IAM do projeto (
project-iam-admin) e administrador do cluster padrão (standard-cluster-admin). Essas funções estão vinculadas ao namespace do projeto.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
/24com 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 padrão
Para criar um cluster padrão, siga estas etapas:
API
Crie um recurso personalizado
Clustere salve-o como um arquivo 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:
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.PROJECT_NAME: o nome do projeto em que o cluster será criado.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.
Aplique o recurso personalizado à sua instância do GDC:
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVERSubstitua
MANAGEMENT_API_SERVERpelo caminho do kubeconfig do servidor de API zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API na zona de destino, consulte Fazer login.
A criação de um cluster padrão pode levar até 60 minutos.
Terraform
Em um arquivo de configuração do Terraform, insira o seguinte snippet 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:
MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal. Se você ainda não gerou um arquivo kubeconfig para o servidor da API na zona de destino, consulte Fazer login.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.PROJECT_NAME: o nome do projeto em que o cluster será criado.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 este 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.
Aplique o novo cluster padrão usando o Terraform:
terraform apply
A criação de um cluster padrão pode levar até 60 minutos.
A seguir
- Gerenciar o acesso a clusters Standard
- Implantar um app de contêiner de alta disponibilidade
- Cargas de trabalho de contêiner no GDC
- Hierarquia de recursos
- Configurar o Cloud NAT para clusters padrão