Configure o número máximo de pods por nó

Esta página explica como otimizar os recursos do cluster para garantir capacidade de agendamento suficiente para os seus pods configurando o número máximo de pods por nó em clusters padrão no Google Kubernetes Engine (GKE). Esta página ajuda a compreender como a relação entre os pods, os tamanhos dos blocos CIDR e o número de nós influencia a forma como o GKE agenda os pods e atribui endereços IP no seu cluster. Esta página também inclui detalhes sobre as restrições e os valores predefinidos para o número máximo de pods por nó.

Esta página ajuda os operadores, os arquitetos da nuvem, os programadores e os engenheiros de rede que aprovisionam e configuram recursos da nuvem, implementam apps e serviços, e gerem redes para as respetivas implementações na nuvem. Para saber mais sobre as funções comuns e as tarefas de exemplo referidas no conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE. Google Cloud

Antes de ler esta página, familiarize-se com quando usar clusters GKE Standard em vez de Autopilot e o modelo de rede do Kubernetes.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute o comando gcloud components update para obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.

Restrições

  • Só pode configurar o número máximo de agrupamentos por nó em clusters nativos da VPC.
  • A criação de nós é limitada pelo número de endereços disponíveis no intervalo de endereços do agrupamento. Consulte a tabela de planeamento do intervalo de endereços IP para os tamanhos de intervalo de endereços de agrupamentos predefinidos, mínimos e máximos. Também pode adicionar endereços IP de pods adicionais através do CIDR de vários pods não contíguos.
  • Cada cluster tem de criar pods kube-system, como kube-proxy, no namespace kube-system. Lembre-se de ter em conta os pods de carga de trabalho e os pods do sistema quando reduzir o número máximo de pods por nó. Para apresentar uma lista dos System Pods no cluster, execute o seguinte comando:

    kubectl get pods --namespace kube-system
    

Configure o número máximo de pods por nó

Pode configurar o número máximo de agrupamentos por nó num cluster padrão quando cria um cluster ou quando cria um conjunto de nós. Não pode alterar esta definição depois de criar o cluster ou o conjunto de nós. Para clusters do Autopilot, o número máximo de nós está pré-configurado e é imutável.

No entanto, se ficar sem endereços IP de pods, pode criar intervalos de endereços IP de pods adicionais através do CIDR de vários pods não contíguos.

Pode definir o tamanho do intervalo de endereços do pod quando cria um cluster através da CLI gcloud ou da Google Cloud consola.

gcloud

Para definir o número máximo predefinido de pods por nó através da CLI gcloud, execute o seguinte comando:

gcloud container clusters create CLUSTER_NAME \
    --enable-ip-alias \
    --cluster-ipv4-cidr=10.0.0.0/21 \
    --services-ipv4-cidr=10.4.0.0/19 \
    --create-subnetwork=name='SUBNET_NAME',range=10.5.32.0/27 \
    --default-max-pods-per-node=MAXIMUM_PODS \
    --location=COMPUTE_LOCATION

Substitua o seguinte:

  • CLUSTER_NAME: o nome do novo cluster.
  • SUBNET_NAME: o nome da nova sub-rede para o seu cluster.
  • MAXIMUM_PODS: o número máximo predefinido de agrupamentos por nó para o seu cluster pode ser configurado até 256. Se for omitido, o Kubernetes atribui o valor predefinido de 110.
  • COMPUTE_LOCATION: a localização do Compute Engine para o novo cluster.

Consola

  1. Na Google Cloud consola, aceda à página Criar um cluster do Kubernetes.

    Aceda a Crie um cluster do Kubernetes

  2. Configure o novo cluster.

  3. No painel de navegação, em Cluster, clique em Rede.

  4. Certifique-se de que a caixa de verificação Ativar o encaminhamento de tráfego nativo da VPC (usa o IP de alias) está selecionada.

  5. No painel de navegação, em Pools de nós, clique em Nós.

  6. Defina o campo Maximum pods per node como 110. O GKE usa este valor para ajustar o tamanho do intervalo de endereços IP atribuído aos nós.

  7. Clique em Criar.

Quando configura o número máximo de pods por nó para o cluster, o Kubernetes usa este valor para atribuir um intervalo CIDR aos nós. Pode calcular o número máximo de nós no cluster com base no intervalo de endereços IP secundários do cluster para pods e no intervalo CIDR atribuído para o nó.

Por exemplo, se definir o número máximo predefinido de agrupamentos como 110 e o intervalo de endereços IP secundários para agrupamentos como /21, o Kubernetes atribui um intervalo CIDR /24 aos nós no cluster. A atribuição do intervalo CIDR permite um máximo de 2(24-21) = 23 = 8 nós no cluster.

Da mesma forma, se definir o número máximo de agrupamentos predefinido como 8 e o intervalo de endereços IP secundário do cluster para agrupamentos como /21, o Kubernetes atribui um intervalo CIDR /28 aos nós. A atribuição do intervalo CIDR permite um máximo de 2(28-21) = 27 = 128 nós no cluster.

Configure o número máximo de pods num novo conjunto de nós para um cluster existente

Também pode especificar o número máximo de pods por nó quando cria um conjunto de nós num cluster padrão existente. A criação de um novo conjunto de nós permite-lhe otimizar a atribuição de endereços IP, mesmo em clusters existentes onde não existe um número máximo predefinido de pods por nó configurado ao nível do cluster.

A definição do número máximo de pods ao nível do conjunto de nós substitui o máximo predefinido ao nível do cluster. Se não configurar um número máximo de pods por nó quando cria o conjunto de nós, aplica-se o máximo ao nível do cluster.

gcloud

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --max-pods-per-node=MAXIMUM_PODS

Substitua o seguinte:

  • POOL_NAME: o nome do novo conjunto de nós.
  • CLUSTER_NAME: o nome do cluster no qual quer criar o node pool.
  • MAXIMUM_PODS: o número máximo de agrupamentos no conjunto de nós.

Consola

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster que quer modificar.

  3. Clique em Adicionar conjunto de nós.

  4. No painel de navegação, clique em Nodes.

  5. Em Rede, introduza um valor para o campo Máximo de pods por nó. O GKE usa este valor para ajustar o tamanho do intervalo de endereços IP atribuído aos nós.

Intervalos secundários de agrupamentos e agrupamentos máximos por nó

Quando configura o número máximo de agrupamentos por nó, está a afetar indiretamente o tamanho necessário do intervalo secundário de agrupamentos. O GKE requer um bloco CIDR mínimo de /24 por conjunto de nós. A tentativa de especificar um intervalo secundário de pods inferior a /24 ao criar um conjunto de nós resulta no seguinte erro:

Pod secondary range 'Pod' must have a CIDR block of at least /24

Se precisar de um intervalo inferior a /24 para o seu cluster geral, pode especificar esta opção ao nível do cluster através do argumento --cluster-ipv4-cidr com a CLI do Google Cloud. Para mais informações, consulte o artigo Criar um cluster com um intervalo CIDR específico. Também pode usar o CIDR de vários agrupamentos descontínuos para adicionar mais intervalos de endereços IP de agrupamentos ao cluster.

Cada cluster tem de criar pods kube-system, como kube-proxy, no namespace kube-system. Lembre-se de ter em conta os agrupamentos de carga de trabalho e os agrupamentos do sistema quando configurar o número máximo de agrupamentos por nó.

Acerca do número máximo de agrupamentos por nó predefinido

Por predefinição, o GKE permite até 110 pods por nó em clusters padrão. No entanto, os clusters padrão podem ser configurados para permitir até 256 pods por nó. Os clusters do Autopilot, com base na densidade de pods da carga de trabalho esperada, escolhem o número máximo de pods por nó num intervalo entre 8 e 256. O Kubernetes atribui a cada nó um intervalo de endereços IP, um bloco CIDR, para que cada Pod possa ter um endereço IP único. O tamanho do bloco CIDR corresponde ao número máximo de pods por nó.

Intervalos CIDR de pods em clusters padrão

Com o máximo predefinido de 110 agrupamentos por nó para clusters padrão, o Kubernetes atribui um bloco CIDR /24 (256 endereços) a cada um dos nós. Ao ter mais do dobro dos endereços IP disponíveis do que o número máximo de pods que podem ser criados num nó, o Kubernetes pode reduzir a reutilização de endereços IP à medida que os pods são adicionados e removidos de um nó.

Embora ter 256 pods por nó seja um limite rígido, pode reduzir o número de pods num nó. 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ó.

A tabela seguinte apresenta o tamanho do bloco CIDR e o número correspondente de endereços IP disponíveis que o Kubernetes atribui aos nós com base no número máximo de pods por nó:

Máximo de agrupamentos por nó Intervalo CIDR por nó Número de endereços IP
8 /28 16
9 – 16 /27 32
17 – 32 /26 64
33 – 64 /25 128
65 – 128 /24 256
129 - 256 /23 512

Considerações sobre o dimensionamento de clusters para o intervalo de endereços IP secundários para pods

Quando cria um cluster, o tamanho do intervalo de endereços IP secundários para pods é imutável. Tem de planear cuidadosamente o tamanho deste intervalo para dar resposta às necessidades de carga de trabalho atuais e futuras. O espaço de endereços IP insuficiente para os pods pode provocar falhas de agendamento e impedir o dimensionamento do cluster.

Se não tiver a certeza do tamanho necessário, recomendamos que comece com um intervalo maior, como /21, que é o predefinido para clusters criados com a CLI Google Cloud. Um intervalo maior fornece endereços IP suficientes para um cluster de tamanho moderado e dá-lhe flexibilidade para o crescimento futuro. Se ficar sem endereços IP de pods, pode usar o CIDR de vários pods não contíguos para adicionar mais intervalos de endereços IP de pods.

No entanto, se estiver a trabalhar num ambiente com espaço de endereços IP restrito, pode ter de usar um intervalo mais pequeno. Nesses casos, pode reduzir o número máximo de agrupamentos por nó. Reduzir o número máximo de agrupamentos por nó permite que cada nó tenha um intervalo CIDR de agrupamentos mais pequeno, o que, por sua vez, permite que mais nós se encaixem num intervalo secundário de agrupamentos mais pequeno para todo o cluster. A configuração é um compromisso entre a densidade de agrupamentos por nó e o número total de nós no cluster.

Para calcular o número máximo de pods que o cluster pode suportar, tem de fornecer valores de entrada para o número de pods por nó e os intervalos CIDR. O GKE usa estas entradas para determinar o tamanho dos intervalos de endereços para os seus nós e pods.

Valores especificados pelo utilizador

Estes são os valores que fornece quando cria um cluster ou um conjunto de nós.

  • Q: o número máximo de pods por nó.
    • Para clusters do Autopilot, Q é fixo (atualmente, 32).
    • Para clusters padrão, pode configurar Q.
  • DS: o comprimento do prefixo da sub-rede do agrupamento. Por exemplo, para um intervalo CIDR de /17, o comprimento do prefixo é 17.
  • S: o comprimento do prefixo da sub-rede principal. Por exemplo, para um intervalo CIDR de /24, o comprimento do prefixo é 24.

Valores calculados

O GKE calcula os seguintes valores com base nas suas entradas.

  • M: o tamanho da máscara de rede para o intervalo de pods de cada nó. none M = 31 - ⌈log₂(Q)⌉ Use a função ARRED.EXCESSO (⌈ ⌉) para arredondar para cima para o número inteiro mais próximo.

  • HM: o número de bits de anfitrião para a máscara de rede do intervalo de agrupamentos do nó. none HM = 32 - M

  • HD: o número de bits de anfitrião para a máscara de rede da sub-rede do agrupamento CIDR selecionada. none HD = 32 - DS

  • MN: O número máximo de nós que podem ser suportados pela sub-rede do agrupamento. none MN = 2^(HD - HM)

  • MP: O número máximo de agrupamentos que podem ser suportados pela sub-rede de agrupamentos. none MP = MN * Q

  • N: o número de endereços IP utilizáveis no intervalo principal. none N = 2^(32-S) - 4

Notas importantes:

  • Todos os endereços IP no intervalo secundário são utilizáveis para agrupamentos.
  • Estes cálculos fornecem os máximos teóricos. O desempenho no mundo real pode ser afetado por outros fatores.

Exemplo:

Suponhamos que está a criar um cluster do GKE Autopilot com o seguinte:

  • Um CIDR de sub-rede de agrupamento de /17 (DS = 17).
  • Um máximo de 32 agrupamentos por nó (Q = 32).

Calcular o número máximo de pods:

  1. M = 31 - ⌈log₂(32)⌉ = 26
  2. HM = 32 - 26 = 6
  3. HD = 32 - 17 = 15
  4. MN = 2(15 - 6) = 512
  5. MP = 512 * 32 = 16,384

Este cluster pode suportar um máximo de 512 nós e 16 384 pods.

Reduza o número máximo de pods

A redução do número máximo de pods por nó permite que o cluster tenha mais nós, uma vez que cada nó requer uma parte menor do espaço total de endereços IP. Em alternativa, pode suportar o mesmo número de nós no cluster especificando um espaço de endereços IP mais pequeno para pods no momento da criação do cluster.

Reduzir o número máximo de agrupamentos por nó também permite criar clusters mais pequenos que requerem menos endereços IP. Por exemplo, com oito pods por nó, cada nó recebe um CIDR /28. Estes intervalos de endereços IP, juntamente com os intervalos secundários e de sub-rede que definir, determinam o número de endereços IP necessários para criar um cluster com êxito.

Pode configurar o número máximo de pods por nó no momento da criação do cluster e no momento da criação do conjunto de nós.

O que se segue?