Compartilhar via


Personalizar a configuração de nó para pools de nós do AKS (Serviço Kubernetes do Azure)

Personalizar a configuração de nó permite que você ajuste as configurações do sistema operacional (SO) ou os parâmetros kubelet para corresponder às necessidades das suas cargas de trabalho. Ao criar um cluster AKS ou adicionar um pool de nós ao cluster, você pode personalizar um subconjunto das configurações de SO e kubelet usadas com frequência. Para definir configurações além desse subconjunto, você pode usar um daemon definido para personalizar suas configurações necessárias sem perder o suporte do AKS para os nós.

Criar um cluster AKS com uma configuração de nó personalizada

Criar arquivos de configuração

As alterações de configuração de sistema operacional e kubelet exigem que você crie um novo arquivo de configuração com os parâmetros e as configurações desejadas. Se um valor para um parâmetro não for especificado, o valor será definido como o padrão.

Configuração do Kubelet

Crie um arquivo linuxkubeletconfig.json com os conteúdos a seguir:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

Configuração do SO

Crie um arquivo linuxosconfig.json com os conteúdos a seguir:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Criar um novo cluster usando arquivos de configuração personalizados

Ao criar um novo cluster, você pode usar os arquivos de configuração personalizados criados nas etapas anteriores para especificar a configuração do kubelet, a configuração do SO, ou ambos.

Observação

Se você especificar uma configuração ao criar um cluster, somente os nós no pool de nós inicial terão essa configuração aplicada. As configurações não configuradas no arquivo JSON manterão o valor padrão. CustomLinuxOsConfig não tem suporte para o tipo de SO: Windows.

Crie um novo cluster usando arquivos de configuração personalizados usando o comando az aks create e especificando seus arquivos de configuração. O seguinte comando de exemplo cria um novo cluster com os arquivos personalizados ./linuxkubeletconfig.json e ./linuxosconfig.json:

az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Adicionar um pool de nós usando os arquivos de configuração personalizados

Ao adicionar um pool de nós a um cluster, você pode usar o arquivo de configuração personalizado criado na etapa anterior para especificar a configuração do kubelet. CustomKubeletConfig tem suporte para pools de nós de Linux e Windows.

Observação

Quando você adiciona um pool de nós do Linux a um cluster existente, você pode especificar a configuração do kubelet, a configuração do SO, ou ambos. Quando você adiciona um pool de nós do Windows a um cluster existente, você pode especificar a configuração do kubelet. Se você especificar uma configuração ao adicionar um pool de nó, somente os nós no pool de nós novo terão essa configuração aplicada. As configurações não configuradas no arquivo JSON manterão o valor padrão.

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json

Outras configurações

As configurações a seguir podem ser usadas para modificar outras configurações de sistema operacional:

Mensagem do dia

Transmita o sinalizador --message-of-the-day com a localização do arquivo para substituir a Mensagem do dia nos nós do Linux na criação do cluster ou do pool de nós.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Criação do pool de nós
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

Solução de problemas de configurações de nó personalizado

Confirmar se as configurações foram aplicadas

Depois de aplicar a configuração de nó personalizado, você pode confirmar se as configurações foram aplicadas aos nós ao conectar-se ao host e verificar sysctl ou se as alterações de configuração foram feitas no sistema de arquivos.

Parâmetros com suporte para a configuração de nó personalizado

configuração personalizada Kubelet

A configuração personalizada do Kubelet tem suporte para pools de nós do Linux e Windows. Os parâmetros com suporte diferem e estão documentados abaixo.

Configuração personalizada do Linux Kubelet

Parâmetro Os valores/intervalos permitidos Padrão Descrição
cpuManagerPolicy nenhum, estático nenhum A política estática permite que contêineres em pods garantidos com CPU de inteiros solicitem acesso a CPUs exclusivas no nó.
cpuCfsQuota verdadeiro, falso true Habilitar/desabilitar a imposição de cota do 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 do disco que irá disparar 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 Otimizar o alinhamento de nó NUMA, veja mais aqui.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*, net.* Nenhum 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 girado.
containerLogMaxFiles ≥ 2 5 O número máximo de arquivos de log de contêiner que podem estar presentes para um contêiner.
podMaxPids -1 para o limite de PID do kernel -1 (∞) A quantidade máxima 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 falharão. Unconfined não impõe restrições às chamadas do sistema e permite todas, o que reduz a segurança. Para obter mais informações, confira o perfil de seccomp padrão containerD. Esse parâmetro está em versão prévia. Registre o sinalizador de recurso "KubeletDefaultSeccompProfilePreview" usando o comando az feature register com --namespace "Microsoft.ContainerService".

Configuração personalizada do Kubelet do Windows

Parâmetro Os valores/intervalos permitidos Padrão DESCRIÇÃO
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 do disco que irá disparar 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 girado.
containerLogMaxFiles ≥ 2 5 O número máximo de arquivos de log de contêiner que podem estar presentes para um contêiner.

Configurações de sistema operacional personalizadas do Linux

Importante

Para facilitar a pesquisa e a legibilidade, as configurações do sistema operacional são exibidas neste artigo por seu 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 "configuração vm.max_map_count", deverá reformatar para "vmMaxMapCount" no arquivo JSON de configuração.

Limites de identificador de arquivo

Ao servir muito tráfego, o tráfego geralmente vem de um grande número de arquivos locais. Você pode ajustar as configurações de kernel abaixo e os limites internos para permitir que você manipule mais, com o custo de alguma memória do sistema.

Configuração Os valores/intervalos permitidos Padrão Descrição
fs.file-max 8192 - 12000500 709620 Número máximo de identificadores de arquivo que o kernel do Linux alocará, aumentando esse valor, você pode aumentar o número máximo de arquivos abertos permitidos.
fs.inotify.max_user_watches 781250 - 2097152 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 O AIO-NR mostra o número atual do sistema de solicitações de e/s assíncronas. AIO-Max-NR permite que você altere o valor máximo AIO-NR pode aumentar para.
fs.nr_open 8192 - 20000500 1048576 O número máximo de identificadores de arquivo que um processo pode alocar.

Ajuste de soquete e rede

Para nós de agente, que são esperados para lidar com números muito grandes de sessões simultâneas, você pode usar o subconjunto de opções de TCP e de rede abaixo que você pode ajustar por pool de nós.

Configuração Os valores/intervalos permitidos Padrão Descrição
net.core.somaxconn 4096 - 3240000 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 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 212992 O tamanho do buffer do soquete recebido máximo em bytes
net.core.wmem_max 212992 - 134217728 212992 O tamanho do buffer do soquete enviado máximo em bytes
net.core.optmem_max 20480 - 4194304 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 O número máximo de solicitações de conexão enfileiradas que ainda não receberam uma confirmação do cliente que está se conectando. Se esse número for excedido, o kernel começará a descartar as solicitações.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 32768 Número máximo de timewait 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 O período de tempo que uma conexão órfã (não é mais referenciada por qualquer aplicativo) permanecerá no estado de FIN_WAIT_2 antes de ser anulada na extremidade local.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 Com que frequência o TCP envia keepalive mensagens quando keepalive está habilitado.
net.ipv4.tcp_keepalive_probes 1 - 15 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 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 0 ou 1 0 Permita a reutilização TIME-WAIT de soquetes para novas conexões quando ele estiver seguro do ponto de vista do protocolo.
net.ipv4.ip_local_port_range Primeiro: 1024 - 60999 e último: 32768 - 65535] Primeiro: 32768 e último: 60999 O intervalo de portas local que é usado pelo tráfego TCP e UDP para escolher a porta local. Composto de dois números: o primeiro número é a primeira porta local permitida para o tráfego TCP e UDP no nó do agente, o segundo é o último número da porta local.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 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 Número mínimo flexível de entradas que podem estar no cache ARP. Essa configuração é, de forma imprecisa, a mais importante, pois a coleta de lixo ARP será disparada cerca de 5 segundos depois de atingir esse máximo flexível.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 O número máximo inflexível de entradas no cache ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 131072 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 nf_conntrack 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.
net.netfilter.nf_conntrack_buckets 65536 - 524288 65536 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 nf_conntrack do protocolo TCP. nf_conntrack_buckets é o tamanho da tabela de hash.

Limites de trabalho

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.

Configuração Os valores/intervalos permitidos Padrão Descrição
kernel.threads-max 20 - 513785 55601 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.

Memória virtual

As configurações abaixo podem ser usadas para ajustar a operação do subsistema de memória virtual (VM) do kernel do Linux e do writeout de dados sujos em disco.

Configuração Os valores/intervalos permitidos Padrão Descrição
vm.max_map_count 65530 - 262144 65530 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 - 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 Esse controle é usado para definir o quão agressivo o kernel vai trocar páginas de memória. Valores mais altos aumentarão a agressividade, os valores mais baixos diminuirão a quantidade de permuta. 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) Nenhum SwapFileSizeMB especifica o tamanho em MB de um arquivo de permuta que será criado nos nós de agente deste pool de nós.
transparentHugePageEnabled always, madvise, never always O Hugepages transparente é 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 habilitada, o kernel tenta alocar hugepages sempre que possível e qualquer processo do Linux receberá páginas de 2 MB se a mmap região for 2 MB naturalmente alinhada. Em determinados casos em que o hugepages sistema é habilitado, os aplicativos podem acabar alocando mais recursos de memória. Um aplicativo pode mmap ser uma região grande, mas apenas toque 1 byte, nesse caso, uma página de 2 MB pode ser alocada em vez de uma página de 4K sem um bom motivo. 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, madvise, never madvise Esse valor controla se o kernel deve fazer uso agressivo da compactação de memória para tornar mais hugepages disponível.

Próximas etapas