Como personalizar a configuração do sistema de nós


Uma configuração do sistema de nós é um arquivo de configuração em que é possível especificar configurações personalizadas para o agente de nó do Kubernetes (o kubelet) e configurações de kernel do Linux de nível inferior (sysctl) nos pools de nós.

Como usar uma configuração do sistema de nós

Para usar uma configuração do sistema de nós:

  1. Crie um arquivo de configuração. Este arquivo contém as configurações kubelet e sysctl.
  2. Adicione a configuração ao criar um cluster ou ao criar ou atualizar um pool de nós.

Como criar um arquivo de configuração

Grave o arquivo de configuração do sistema de nós em YAML. O exemplo a seguir mostra como adicionar configurações para as opções kubelet e sysctl:

kubeletConfig:
  cpuManagerPolicy: static
linuxConfig:
 sysctl:
   net.core.somaxconn: '2048'
   net.ipv4.tcp_rmem: '4096 87380 6291456'

Neste exemplo:

  • cpuManagerPolicy: static configura o kubelet para usar a política de gerenciamento de CPU estática.
  • net.core.somaxconn: '2048' limita o backlog socket listen() a 2.048 bytes.
  • net.ipv4.tcp_rmem: '4096 87380 6291456' define o valor mínimo, padrão e máximo do soquete TCP para conter 4.096 bytes, 87.380 bytes e 6.291.456 bytes, respectivamente.

Se você quiser adicionar configurações exclusivamente para kubelet ou sysctl, inclua essa seção apenas no arquivo de configuração. Por exemplo, para adicionar uma configuração kubelet, crie o seguinte arquivo:

kubeletConfig:
  cpuManagerPolicy: static

Para uma lista completa dos campos que podem ser adicionados ao arquivo de configuração, consulte as seções Opções de configuração do Kubelet e Opções de configuração do Sysctl.

Como adicionar a configuração a um pool de nós

Depois de criar o arquivo de configuração, adicione a sinalização --system-config-from-file usando a ferramenta de linha de comando gcloud. É possível adicionar essa sinalização ao criar um cluster ou ao criar ou atualizar um pool de nós. Não é possível adicionar uma configuração do sistema de nós com o Console do Google Cloud.

Para adicionar uma configuração do sistema de nós, execute o seguinte comando:

Criar cluster

gcloud container clusters create CLUSTER_NAME \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • SYSTEM_CONFIG_PATH: o caminho para o arquivo que contém as configurações kubelet e sysctl.

Depois que você aplicar uma configuração de sistema de nós, o pool de nós padrão do cluster usará as configurações definidas.

Criar pool de nós

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --system-config-from-file=SYSTEM_CONFIG_PATH

Substitua:

  • POOL_NAME: o nome do pool de nós.
  • CLUSTER_NAME: o nome do cluster ao qual você quer adicionar um pool de nós.
  • SYSTEM_CONFIG_PATH: o caminho para o arquivo que contém as configurações kubelet e sysctl.

Atualizar pool de nós

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME
    --system-config-from-file=SYSTEM_CONFIG_PATH

Substitua:

  • POOL_NAME: o nome do pool de nós que você quer atualizar.
  • CLUSTER_NAME: o nome do cluster que você quer atualizar.
  • SYSTEM_CONFIG_PATH: o caminho para o arquivo que contém as configurações kubelet e sysctl.

Como editar uma configuração do sistema de nós

Para editar uma configuração do sistema de nós, crie um novo pool de nós com a configuração que quiser ou atualize a configuração do sistema de nós de um pool de nós atual.

Como editar criando um pool de nós

Para editar uma configuração do sistema de nós criando um pool de nós:

  1. Crie um arquivo de configuração com a configuração que você quer.
  2. Adicione a configuração a um novo pool de nós.
  3. Migre suas cargas de trabalho para o novo pool de nós.
  4. Exclua o pool de nós antigo.

Como editar atualizando um pool de nós atual

Para editar uma configuração do sistema de nós, atualizando um pool de nós atual, atualize a configuração do sistema do nó com os valores desejados. A atualização de uma configuração do sistema de nós substitui a configuração do sistema do pool de nós pela nova configuração. Se você omitir qualquer parâmetro durante uma atualização, eles serão definidos com os respectivos padrões.

Se você quiser redefinir a configuração do sistema de nós para os padrões, atualize seu arquivo de configuração com valores vazios para kubelet e sysctl. Exemplo:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

Como excluir uma configuração do sistema de nós

Para remover uma configuração do sistema de nós:

  1. Crie um pool de nós.
  2. Migre suas cargas de trabalho para o novo pool de nós.
  3. Exclua o pool de nós que tenha a configuração anterior do sistema de nós.

Opções de configuração do Kubelet

A tabela a seguir mostra as opções de kubelet que você pode modificar.

Configurações do Kubelet Restrições Configuração padrão Descrição
cpuManagerPolicy O valor precisa ser none ou static. none Essa configuração controla a política do Gerenciador de CPU do kubelet. O valor padrão é none, que é o esquema padrão de afinidade da CPU, que não fornece afinidade além do que o programador do SO faz automaticamente.

Definir esse valor como static permite que os pods na classe QoS garantida com solicitações de CPU de número inteiro recebam o uso exclusivo das CPUs.
cpuCFSQuota O valor precisa ser true ou false. true Essa configuração aplica o limite de CPU do pod. Definir esse valor como false significa que os limites de CPU para pods serão ignorados.

Ignorar os limites da CPU pode ser desejável em determinados cenários em que os pods são sensíveis aos limites da CPU. O risco de desativar cpuCFSQuota é que um pod não autorizado pode consumir mais recursos da CPU do que o pretendido.
cpuCFSQuotaPeriod O valor precisa ser uma duração de tempo "100ms" Esta configuração define o valor do período da cota do CFS da CPU, cpu.cfs_period_us, que especifica a frequência com que o acesso de um cgroup aos recursos da CPU precisa ser realocado. Essa opção permite ajustar o comportamento de limitação da CPU.

Opções de configuração de Sysctl

Para ajustar o desempenho do sistema, modifique os seguintes atributos do kernel:

  • net.core.netdev_max_backlog
  • net.core.rmem_max
  • net.core.wmem_default
  • net.core.wmem_max
  • net.core.optmem_max
  • net.core.somaxconn
  • net.ipv4.tcp_rmem
  • net.ipv4.tcp_wmem
  • net.ipv4.tcp_tw_reuse
  • net.ipv6.conf.all.disable_ipv6
  • net.ipv6.conf.default.disable_ipv6

Para saber mais sobre esses atributos, consulte a documentação do kernel do Linux sysctl.

Diferentes namespaces Linux podem ter valores exclusivos para um determinado sysctl, enquanto outros são globais para todo o nó. A atualização das opções sysctl usando uma configuração do sistema de nós garante que sysctl seja aplicado globalmente no nó e em cada namespace, resultando em cada pod com valores sysctl idênticos em cada namespace do Linux.

A seguir