Configurar o máximo de pods por nó

Nesta página, explicamos como otimizar os recursos do cluster para garantir capacidade de programação suficiente para seus pods. Para isso, configure o número máximo de pods por nó em clusters padrão no Google Kubernetes Engine (GKE). Esta página ajuda você a entender como a relação entre pods, tamanhos de blocos CIDR e o número de nós influencia a maneira como o GKE programa pods e aloca endereços IP no cluster. Nesta página, também há detalhes sobre restrições e valores padrão para o número máximo de pods por nó.

Esta página ajuda operadores, arquitetos de nuvem, desenvolvedores e engenheiros de rede que provisionam e configuram recursos de nuvem, implantam apps e serviços e gerenciam a rede para implantações na nuvem. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud, consulte Tarefas e funções de usuário comuns do GKE.

Antes de ler esta página, saiba quando usar o GKE Standard em vez do Autopilot e o modelo de rede do Kubernetes.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Restrições

  • Só é possível configurar o máximo de pods por nó em clusters nativos de VPC.
  • A criação de nós é limitada pelo número de endereços disponíveis no intervalo de endereços do pod. Verifique a Tabela de planejamento de intervalo de endereços IP para os tamanhos padrão, mínimo e máximo do intervalo. Também é possível adicionar endereços IP de pod adicionais usando o CIDR de vários pods descontínuos.
  • Cada cluster precisa criar pods do kube-system, como kube-proxy, no namespace kube-system. Lembre-se de considerar os pods de carga de trabalho e os pods do sistema ao reduzir o número máximo de pods por nó. Para listar os pods do sistema no cluster, execute o seguinte comando:

    kubectl get pods --namespace kube-system
    

Configurar o máximo de pods por nó

É possível configurar o número máximo de pods por nó em um cluster padrão ao criar um cluster ou um pool de nós. Não é possível mudar essa configuração depois que o cluster ou o pool de nós é criado. Nos clusters do Autopilot, o número máximo de nós é pré-configurado e imutável.

No entanto, se os endereços IP do pod ficarem sem capacidade, crie intervalos de endereços IP do pod adicionais usando CIDR de vários pods distintos.

Defina o tamanho do intervalo de endereços do pod ao criar um cluster usando a CLI gcloud ou o console Google Cloud .

gcloud

Para definir o máximo de pods padrão por nó usando a gcloud CLI, execute este 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:

  • CLUSTER_NAME: o nome do novo cluster;
  • SUBNET_NAME: o nome da nova sub-rede do cluster;
  • MAXIMUM_PODS: o número máximo padrão de pods por nó para o cluster. Pode ser configurado até 256. Se omitido, o Kubernetes atribuirá o valor padrão 110.
  • COMPUTE_LOCATION: o local do Compute Engine para o novo cluster.

Console

  1. No console Google Cloud , acesse a página Criar um cluster do Kubernetes.

    Acessar "Criar um cluster do Kubernetes"

  2. Configure seu novo cluster.

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

  4. Verifique se a caixa de seleção Ativar roteamento de tráfego nativo de VPC (usa IP do alias) está marcada.

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

  6. Defina o campo Máximo de pods por nó como 110. O GKE usa esse valor para ajustar o tamanho do intervalo de endereços IP atribuído aos nós.

  7. Clique em Criar.

Ao configurar o número máximo de pods por nó, o Kubernetes usa esse valor para alocar um intervalo CIDR para os nós. Você pode calcular o número máximo de nós no cluster com base no intervalo de endereço de IP secundário para pods e o intervalo CIDR alocado para o nó.

Por exemplo, se você definir o número máximo padrão de pods como 110 e o intervalo de endereços IP secundário dos pods como /21, o Kubernetes atribuirá um intervalo CIDR /24 aos nós no cluster. A atribuição de intervalo CIDR permite no máximo 2(24-21) = 23 = 8 nós no cluster.

Da mesma forma, se você definir os pods máximos padrão como 8 e o intervalo de endereços IP secundários do cluster para pods como /21, o Kubernetes atribuirá um intervalo CIDR /28 aos nós. A atribuição de intervalo CIDR permite no máximo 2(28-21) = 27 = 128 nós no cluster.

Definir o número máximo de pods em um novo pool de nós para um cluster

Também é possível especificar o número máximo de pods por nó ao criar um pool de nós em um cluster padrão. Criar um novo pool de nós permite otimizar a alocação de endereços IP, mesmo em clusters atuais em que não há número máximo padrão configurado de pods por nó no nível do cluster.

A definição do número máximo de pods no nível do pool de nós substitui o máximo padrão no nível do cluster. Se você não configurar um número máximo de pods por nó ao criar o pool de nós, o máximo no nível do cluster será aplicado.

gcloud

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

Substitua:

  • POOL_NAME: o nome do novo pool de nós.
  • CLUSTER_NAME: o nome do cluster em que você quer criar o pool de nós.
  • MAXIMUM_PODS: o número máximo de pods nos nós do pool.

Console

  1. Acesse a página Google Kubernetes Engine no Google Cloud console.

    Acessar o Google Kubernetes Engine

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

  3. Clique em Adicionar pool de nós.

  4. No painel de navegação, clique em Nós.

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

Intervalos secundários de pods e número máximo de pods por nó

Ao configurar o número máximo de pods por nó, você está indiretamente afetando o tamanho necessário do intervalo secundário do pod. O GKE exige um bloco CIDR mínimo de /24 por pool de nós. A tentativa de especificar um intervalo secundário de pod menor que /24 ao criar um pool de nós resulta no seguinte erro:

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

Se você precisar de um intervalo menor que /24 para o cluster geral, especifique isso no nível do cluster usando o argumento --cluster-ipv4-cidr com a Google Cloud CLI. Para mais informações, consulte Como criar um cluster com um intervalo de CIDR específico. Também é possível usar o CIDR de vários pods descontínuos para adicionar mais intervalos de endereços IP de pod ao cluster.

Cada cluster precisa criar pods do kube-system, como o kube-proxy, no namespace kube-system. Lembre-se de considerar os pods de carga de trabalho e do sistema ao configurar o número máximo de pods por nó.

Sobre o máximo padrão de pods por nó

Por padrã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 de carga de trabalho esperada, escolhem o máximo de pods por nó em um intervalo entre 8 e 256. O Kubernetes atribui a cada nó um intervalo de endereços IP, um bloco CIDR, para que cada Pod tenha um endereço IP exclusivo. 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 padrão de 110 pods por nó para clusters padrão, o Kubernetes atribui um bloco CIDR /24 (256 endereços) a cada um dos nós. Tendo mais que o dobro de endereços IP disponíveis que o número máximo de pods que podem ser criados em um 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 absoluto, é possível reduzir o número de pods em um nó. O tamanho do bloco CIDR atribuído a um nó depende dos pods máximos 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ó.

A tabela a seguir lista 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ó:

Número máximo de pods 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 do cluster para o intervalo de endereços IP secundário para pods

Ao criar um cluster, o tamanho do intervalo de endereços IP secundário para pods é imutável. Planeje cuidadosamente o tamanho desse intervalo para acomodar suas necessidades de carga de trabalho atuais e futuras. O espaço de endereço IP insuficiente para pods pode levar a falhas de programação e impedir o escalonamento do cluster.

Se você não tiver certeza sobre o tamanho necessário, recomendamos começar com um intervalo maior, como /21, que é o padrão para clusters criados com a Google Cloud CLI. Um intervalo maior fornece endereços IP suficientes para um cluster de tamanho moderado e oferece flexibilidade para crescimento futuro. Se os endereços IP do pod ficarem sem capacidade, use o CIDR de vários pods descontínuos para adicionar mais intervalos de endereços IP do pod.

No entanto, se você estiver trabalhando em um ambiente com espaço de endereço IP limitado, talvez seja necessário usar um intervalo menor. Nesses casos, é possível reduzir o número máximo de pods por nó. Reduzir o número máximo de pods por nó permite que cada nó tenha um intervalo CIDR de pod menor, o que, por sua vez, permite que mais nós se encaixem em um intervalo secundário de pod menor para todo o cluster. A configuração é uma troca entre a densidade de pods por nó e o número total de nós no cluster.

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

Valores especificados pelo usuário

Esses são os valores fornecidos ao criar um cluster ou pool 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, é possível configurar o Q.
  • DS: o tamanho do prefixo da sub-rede do pod. Por exemplo, para um intervalo CIDR de /17, o tamanho do prefixo é 17.
  • S: o tamanho do prefixo da sub-rede principal. Por exemplo, para um intervalo CIDR de /24, o tamanho 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 pod de cada nó. none M = 31 - ⌈log₂(Q)⌉ Use a função teto (⌈ ⌉) para arredondar para o número inteiro mais próximo.

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

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

  • MN: o número máximo de nós que podem ser compatíveis com a sub-rede de pods. none MN = 2^(HD - HM)

  • MP: o número máximo de pods que podem ser aceitos pela sub-rede de pods. none MP = MN * Q

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

Observações importantes:

  • Todos os endereços IP no intervalo secundário podem ser usados para pods.
  • Esses cálculos fornecem os máximos teóricos. O desempenho no mundo real pode ser afetado por outros fatores.

Exemplo:

Imagine que você esteja criando um cluster do GKE Autopilot com o seguinte:

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

Calcule 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

Esse cluster pode aceitar no máximo 512 nós e 16.384 pods.

Reduzir o número máximo de pods.

Reduzir o número máximo de pods por nó permite que o cluster tenha mais nós, já que cada um deles exige uma parte menor do espaço total de endereços IP. Uma alternativa é fornecer o mesmo número de nós no cluster, especificando um espaço de endereços IP menor para pods no momento da criação do cluster.

Reduzir o número máximo de pods por nó também permite criar clusters menores que exigem menos endereços IP. Por exemplo, com oito pods por nó, cada nó recebe um CIDR /28. Esses intervalos de endereços IP, além das sub-redes e intervalos secundários definidos, determinam o número de endereços IP necessários para criar um cluster.

É possível configurar o número máximo de pods por nó no momento da criação do cluster e do pool de nós.

A seguir