Parâmetros de configuração de nó personalizados para AKS (Serviço de Kubernetes do Azure)

Este artigo lista os parâmetros de configuração de nó personalizado com suporte para pools de nós AKS (Serviço de Kubernetes do Azure). Para saber como criar e aplicar arquivos de configuração, consulte Personalizar a configuração do nó para pools de nós do AKS.

Parâmetros de configuração personalizados do Kubelet

Importante

Ao habilitar sysctls não seguros, você assume a responsabilidade pela estabilidade do nó e pelo comportamento da carga de trabalho. Sysctls não seguros podem possivelmente causar instabilidade no nó ou vulnerabilidades de segurança se configurados incorretamente. Certifique-se de entender as implicações de habilitar sysctls não seguros específicos e monitore a integridade do cluster de perto depois de fazer alterações.

Configuração personalizada do kubelet do Linux

Parâmetro Os valores/intervalos permitidos Default Description
cpuManagerPolicy nenhum, estático Nenhum A política estática permite que contêineres em pods garantidos com solicitações de CPU por número inteiro tenham acesso exclusivo a CPUs no nó.
cpuCfsQuota verdadeiro, falso verdadeiro Habilitar/desabilitar a imposição de cota de CFS da CPU para contêineres que especificam limites de CPU.
cpuCfsQuotaPeriod Intervalo emmilissegundos(ms) 100ms Define o valor do período de cota do CFS da CPU.
imageGcHighThreshold 0-100 85 A porcentagem de uso do disco após a qual a coleta de lixo da imagem é sempre executada. Uso mínimo de disco que inicia a coleta de lixo. Para desabilitar a coleta de lixo de imagem, defina como 100.
imageGcLowThreshold 0-100, não é maior que imageGcHighThreshold 80 A porcentagem de uso do disco antes da qual a coleta de lixo da imagem nunca é executada. Uso mínimo do disco que pode disparar a coleta de lixo.
topologyManagerPolicy nenhum, melhor esforço, restrito, nó único Nenhum Otimize o alinhamento do nó NUMA. Para obter mais informações, consulte Políticas de Gerenciamento de Topologia de Controle em um nó.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, , fs.mqueue.*net.* None Lista permitida de padrões de sysctl sysctls ou inseguros.
containerLogMaxSizeMB Tamanho em megabytes (MB) 50 O tamanho máximo (por exemplo, 10 MB) de um arquivo de log de contêiner antes de ser rotacionado.
containerLogMaxFiles 2 ou superior 5 O número máximo de arquivos de log de contêiner a serem retidos para um contêiner.
podMaxPids -1 para o limite de PID do kernel -1 (infinito) O número máximo de IDs de processo que podem ser executadas em um pod.
seccompDefault Unconfined, RuntimeDefault Unconfined Define o perfil de seccomp padrão para todas as cargas de trabalho. RuntimeDefault usa o perfil de seccomp padrão do contêiner, restringindo determinadas chamadas do sistema para aprimorar a segurança. As chamadas restritas falham. Unconfined não impõe restrições a chamadas de sistema (syscalls), permitindo todas as chamadas do sistema e reduzindo a segurança. Para obter mais informações, consulte o perfil de seccomp padrão do containerd. Esse parâmetro está em versão prévia. Registre o sinalizador de recurso "KubeletDefaultSeccompProfilePreview" com o comando az feature register usando --namespace "Microsoft.ContainerService".
kubeReserved.cpuMillicores 1 para a capacidade de CPU do pool de nós em millicores None Reserva CPU para daemons do sistema Kubernetes em pools de nós do Linux. Esse parâmetro está em prévia e requer o sinalizador de recurso CustomNodeConfigPreview.
kubeReserved.memoryMB 1 para a capacidade de memória do pool de nós no MiB None Reserva memória para daemons do sistema Kubernetes em pools de nós do Linux. Esse parâmetro está em prévia e requer o sinalizador de recurso CustomNodeConfigPreview.
hardEvictionThreshold.memoryAvailable <number>Ki, <number>Miou <number>Gi<number>% onde a porcentagem não é superior a 100 None Define o limiar rígido de despejo do kubelet para a memória disponível em pools de nós Linux. Esse parâmetro está em prévia e requer o sinalizador de recurso CustomNodeConfigPreview.
hardEvictionThreshold.nodeFsAvailable <number>Ki, <number>Miou <number>Gi<number>% onde a porcentagem não é superior a 100 None Define o limite rígido de expulsão do kubelet para o espaço disponível no sistema de arquivos do nó nos pools de nós Linux. Esse parâmetro está em prévia e requer o sinalizador de recurso CustomNodeConfigPreview.
hardEvictionThreshold.nodeFsInodesFree <number> ou <number>% onde a porcentagem não é superior a 100 None Define o limite de remoção rígido do kubelet para inodes de sistema de arquivos de nó gratuito em pools de nós do Linux. Esse parâmetro está em prévia e requer o sinalizador de recurso CustomNodeConfigPreview.

Configuração personalizada do kubelet do Windows

Parâmetro Os valores/intervalos permitidos Default Description
imageGcHighThreshold 0-100 85 A porcentagem de uso do disco após a qual a coleta de lixo da imagem é sempre executada. Uso mínimo de disco que inicia a coleta de lixo. Para desabilitar a coleta de lixo de imagem, defina como 100.
imageGcLowThreshold 0-100, não é maior que imageGcHighThreshold 80 A porcentagem de uso do disco antes da qual a coleta de lixo da imagem nunca é executada. Uso mínimo do disco que pode disparar a coleta de lixo.
containerLogMaxSizeMB Tamanho em megabytes (MB) 10 O tamanho máximo (por exemplo, 10 MB) de um arquivo de log de contêiner antes de ser rotacionado.
containerLogMaxFiles 2 ou superior 5 O número máximo de arquivos de log de contêiner a serem retidos para um contêiner.

Parâmetros de configuração do sistema operacional personalizado do Linux

Importante

Para simplificar a pesquisa e a legibilidade, as configurações do sistema operacional são exibidas neste artigo pelo nome, mas devem ser adicionadas ao arquivo JSON de configuração ou à API do AKS usando a convenção de capitalização camelCase.

Por exemplo, se você modificar a vm.max_map_count configuração, deverá reformatá-la vmMaxMapCount no arquivo JSON de configuração.

Limites do identificador de arquivo do Linux

Ao atender a altas quantidades de tráfego, esse tráfego geralmente vem de um grande número de arquivos locais. É possível ajustar as seguintes configurações de kernel e limites internos para aumentar a capacidade de processamento, ao custo de uma parte da memória do sistema.

A tabela a seguir lista os limites de manipuladores de arquivos que você pode personalizar por pool de nós.

Setting Os valores/intervalos permitidos Padrão do Ubuntu 22.04 Padrão do Ubuntu 24.04 Padrão do Azure Linux 3.0 Description
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Número máximo de descritores de arquivo alocados pelo kernel do Linux. Esse valor é definido como o valor máximo possível (2^63-1) para evitar o esgotamento do descritor de arquivo e garantir um número ilimitado de identificadores de arquivo em nível de sistema para cargas de trabalho em contêineres.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Número máximo de inspeções de arquivo permitidas pelo sistema. Cada inspeção tem aproximadamente 90 bytes em um kernel de 32 bits e aproximadamente 160 bytes em um kernel de 64 bits.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 O aio-nr mostra o número atual de solicitações de E/S assíncronas em todo o sistema. AIO-Max-NR permite que você altere o valor máximo AIO-NR pode aumentar para.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 O número máximo de identificadores de arquivo que um processo pode alocar.

Note

O fs.file-max parâmetro é definido como 9223372036854775807 (o valor máximo para um inteiro de 64 bits assinado) no Ubuntu e no Azure Linux com base em padrões upstream. Esta configuração:

  • Impede ataques de negação de serviço com base no esgotamento do descritor de arquivos em todo o sistema.
  • Garante que as cargas de trabalho de contêiner nunca sejam afuniladas pelos limites de identificador de arquivo de todo o sistema.
  • Mantém a segurança por meio de limites por processo (fs.nr_open e ulimit) que ainda se aplicam a processos individuais.
  • Otimiza para plataformas de contêiner em que muitos contêineres podem ser executados simultaneamente, cada um potencialmente abrindo muitos arquivos e conexões de rede.

Ajuste de rede e soquete do Linux

Para nós de agentes, que devem lidar com um grande número de sessões simultâneas, podem-se usar as seguintes opções de TCP e rede e ajustá-las por pool de nós:

Setting Os valores/intervalos permitidos Padrão do Ubuntu 22.04 Padrão do Ubuntu 24.04 Padrão do Azure Linux 3.0 Description
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Número máximo de solicitações de conexão que podem ser enfileiradas para qualquer soquete de escuta específico. Um limite superior para o valor do parâmetro backlog passado para a função Listen (2). Se o argumento da pendência for maior que o somaxconn, ele será silenciosamente truncado para esse limite.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Número máximo de pacotes, em fila no lado de entrada, quando a interface recebe pacotes mais rápidos do que o kernel pode processá-los.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 O tamanho do buffer do soquete recebido máximo em bytes
net.core.wmem_max 212992 - 134217728 212992 212992 212992 O tamanho do buffer do soquete enviado máximo em bytes
net.core.optmem_max 20480 - 4194304 20480 131072 20480 Tamanho máximo de buffer auxiliar (buffer de memória de opção) permitido por soquete. A memória de opção de soquete é usada em alguns casos para armazenar estruturas extras relacionadas ao uso do soquete.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 O número máximo de solicitações de conexão na fila que não receberam uma confirmação do cliente de conexão. Se esse número for excedido, o kernel começará a remover solicitações.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Número máximo de TIME-WAIT soquetes mantidos pelo sistema simultaneamente. Se esse número for excedido, o soquete de espera de tempo será destruído imediatamente e o aviso será impresso.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 O período de tempo em que uma conexão órfã (não referenciada por nenhum aplicativo) permanece no estado FIN_WAIT_2 antes de ser anulada no final local.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 Com que frequência o TCP envia keepalive mensagens quando keepalive está habilitado.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Quantas keepalive investigações o TCP envia, até que decida que a conexão foi interrompida.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Com que frequência as investigações são enviadas. Multiplicado por tcp_keepalive_probes ele torna-se o tempo para eliminar uma conexão que não está respondendo, após o início das investigações.
net.ipv4.tcp_tw_reuse 2 2 2 Permite a reutilização de TIME-WAIT soquetes para novas conexões quando ele estiver seguro em um ponto de vista de protocolo.
net.ipv4.ip_local_port_range Primeiro: 1024 - 60999 e último: 32768 - 65535] Primeiro: 32768 e último: 60999 Primeiro: 32768 e último: 60999 Primeiro: 32768 e último: 60999 O intervalo de portas local que é usado pelo tráfego TCP e UDP para escolher a porta local. O intervalo é composto por dois números: a primeira porta local permitida para tráfego TCP e UDP no nó do agente e o último número da porta local.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Número mínimo de entradas que podem estar no cache ARP. A coleta de lixo não será disparada se o número de entradas estiver abaixo dessa configuração.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Número máximo flexível de entradas que podem estar no cache ARP. Essa configuração é, sem dúvida, a mais importante, pois a coleta de lixo ARP inicia cerca de 5 segundos depois de atingir esse limite flexível.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 O número máximo inflexível de entradas no cache ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 Calculado dinamicamente Calculado dinamicamente Calculado dinamicamente nf_conntrack é um módulo que controla as entradas de conexão para NAT no Linux. O nf_conntrack módulo usa uma tabela de hash para registrar o registro de conexão estabelecido do protocolo TCP. nf_conntrack_max é o número máximo de nós na tabela de hash, ou seja, o número máximo de conexões com suporte no nf_conntrack módulo ou o tamanho da tabela de controle de conexão. O valor padrão é calculado dinamicamente com base na memória do sistema usando a fórmula: RAM_in_bytes / 16384 (ou RAM_in_MB * 64). Por exemplo, uma máquina virtual com 8 GB de RAM tem um padrão de aproximadamente 524.288 conexões. Os valores reais variam de acordo com o tamanho da máquina virtual e a memória disponível.
net.netfilter.nf_conntrack_buckets 65536 - 524288 Calculado dinamicamente Calculado dinamicamente Calculado dinamicamente nf_conntrack é um módulo que controla as entradas de conexão para NAT no Linux. O nf_conntrack módulo usa uma tabela de hash para registrar o registro de conexão estabelecido do protocolo TCP. nf_conntrack_buckets é o tamanho da tabela de hash. O valor padrão é calculado dinamicamente com base na memória do sistema usando a fórmula: RAM_in_bytes / 16384, com um mínimo de 1.024 buckets e um máximo de 262.144 buckets. O padrão nf_conntrack_max normalmente é definido como nf_conntrack_buckets * 4. Os valores reais variam de acordo com o tamanho da máquina virtual e a memória disponível.

Limites de trabalho do Linux

Como os limites do descritor de arquivo, o número de trabalhos ou threads que um processo pode criar são limitados por uma configuração de kernel e limites de usuário. O limite de usuários em AKS é ilimitado. A tabela a seguir lista a configuração do kernel que você pode personalizar por pool de nós:

Setting Padrão do Ubuntu 22.04 Padrão do Ubuntu 24.04 Padrão do Azure Linux 3.0 Description
kernel.threads-max Calculado dinamicamente Calculado dinamicamente Calculado dinamicamente Os processos podem criar threads de trabalho. O número máximo de todos os threads que podem ser criados é definido com a configuração do kernel kernel.threads-max. O valor padrão é calculado dinamicamente com base na memória do sistema usando a fórmula: total_ram_pages / 4 (em que cada página normalmente tem 4 KB). Os valores reais variam de acordo com o tamanho da máquina virtual e a memória disponível.

Memória virtual do Linux

A tabela a seguir lista as configurações de kernel que você pode personalizar por pool de nós para ajustar a operação do subsistema de memória virtual (VM) do kernel do Linux e os writeout dados sujos em disco:

Setting Os valores/intervalos permitidos Padrão do Ubuntu 22.04 Padrão do Ubuntu 24.04 Padrão do Azure Linux 3.0 Description
vm.max_map_count 65530 1048576 1048576 Esse arquivo contém o número máximo de áreas de mapa de memória que um processo pode ter. As áreas de mapa de memória são usadas como um efeito colateral de chamar malloc , diretamente por mmap, mprotect e madvise também ao carregar bibliotecas compartilhadas.
vm.vfs_cache_pressure 1 a 100 100 100 100 Esse valor de porcentagem controla a tendência do kernel de recuperar a memória, que é usada para armazenar em cache os objetos de diretório e inode.
vm.swappiness 0 - 100 60 60 60 Esse controle é usado para definir a agressividade com que o kernel troca páginas de memória. Valores mais altos aumentam a agressividade, os valores mais baixos diminuem a quantidade de troca. Um valor de 0 instrui o kernel a não iniciar a permuta até que a quantidade de páginas livres e com backup em arquivo seja menor que a marca d' água alta em uma zona.
swapFileSizeMB 1 MB - Tamanho temporário de disco (/dev/sdb) None None None SwapFileSizeMB especifica o tamanho em MB de um arquivo de troca a ser criado nos nós de agente deste pool de nós.
transparentHugePageEnabled always, madvise, never always always madvise Transparent Hugepages é um recurso de kernel do Linux destinado a melhorar o desempenho, fazendo uso mais eficiente do hardware de mapeamento de memória do processador. Quando habilitado, o kernel tenta alocar hugepages sempre que possível e qualquer processo do Linux recebe páginas de 2 MB se a região mmap estiver naturalmente alinhada em 2 MB. Quando hugepages estão habilitados para todo o sistema, os aplicativos podem acabar alocando mais recursos de memória. Um aplicativo pode mmap um grande espaço de memória, mas apenas acessar 1 byte dele; nesse caso, uma página de 2 MB pode ser alocada em vez de uma página de 4k sem motivo justificado. Esse cenário é o motivo pelo qual é possível desabilitar hugepages todo o sistema ou apenas tê-los dentro de MADV_HUGEPAGE madvise regiões.
transparentHugePageDefrag always, defer, defer+madvise, , madvisenever madvise madvise madvise Esse valor controla se o kernel deve fazer uso agressivo da compactação de memória para tornar mais hugepages disponível.