Personalizar a configuração do nó para pools de nós do Serviço Kubernetes do Azure (AKS)
Personalizar a configuração do nó permite ajustar as configurações do sistema operacional (SO) ou os parâmetros do kubelet para corresponder às necessidades de suas cargas de trabalho. Ao criar um cluster AKS ou adicionar um pool de nós ao cluster, você pode personalizar um subconjunto de configurações de SO e kubelet comumente usadas. Para definir configurações além desse subconjunto, você pode usar um conjunto de daemon para personalizar suas configurações necessárias sem perder o suporte AKS para seus nós.
Criar um cluster AKS com uma configuração de nó personalizada
Criar arquivos de configuração
As alterações de configuração do sistema operacional e do 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 padrão.
Configuração do Kubelet
Crie um linuxkubeletconfig.json
arquivo com o seguinte conteúdo:
{
"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 linuxosconfig.json
arquivo com o seguinte conteúdo:
{
"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 sistema operacional ou ambas.
Nota
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. Quaisquer configurações não configuradas no arquivo JSON manterão o valor padrão. CustomLinuxOsConfig
não é suportado para o tipo de SO: Windows.
Crie um novo cluster usando arquivos de configuração personalizados usando o az aks create
comando e especificando seus arquivos de configuração. O comando de exemplo a seguir cria um novo cluster com os arquivos e ./linuxosconfig.json
personalizados./linuxkubeletconfig.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 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
é suportado para pools de nós Linux e Windows.
Nota
Ao adicionar um pool de nós Linux a um cluster existente, você pode especificar a configuração do kubelet, a configuração do sistema operacional ou ambas. Ao adicionar um pool de nós do Windows a um cluster existente, você só pode especificar a configuração do kubelet. Se você especificar uma configuração ao adicionar um pool de nós, somente os nós no novo pool de nós terão essa configuração aplicada. Quaisquer 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 seguintes configurações podem ser usadas para modificar outras configurações do sistema operacional:
Mensagem do Dia
Passe o --message-of-the-day
sinalizador com o local do arquivo para substituir a Mensagem do Dia nos nós 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 de Nodepool
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ó personalizadas
Confirmar se as configurações foram aplicadas
Depois de aplicar a configuração de nó personalizada, você pode confirmar que as configurações foram aplicadas aos nós conectando-se ao host e verificando sysctl
se foram feitas alterações de configuração no sistema de arquivos.
Parâmetros suportados de configuração de nó personalizado
Configuração personalizada do Kubelet
A configuração personalizada do Kubelet é suportada para pools de nós Linux e Windows. Os parâmetros suportados diferem e estão documentados abaixo.
Configuração personalizada do Linux Kubelet
Parâmetro | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
cpuManagerPolicy |
nenhum, estático | nenhum | A política estática permite que contêineres em pods garantidos com solicitações de CPU inteiras tenham acesso a CPUs exclusivas no nó. |
cpuCfsQuota |
TRUE, false | verdadeiro | Habilitar/desabilitar a imposição de cota CFS da CPU para contêineres que especificam limites de CPU. |
cpuCfsQuotaPeriod |
Intervalo em milissegundos (ms) | 100ms |
Define o valor do período de cota CFS da CPU. |
imageGcHighThreshold |
0-100 | 85 | A porcentagem de uso do disco após a qual a coleta de lixo de imagem é sempre executada. Uso mínimo do disco que acionará a coleta de lixo. Para desativar a coleta de lixo de imagem, defina como 100. |
imageGcLowThreshold |
0-100, não superior a imageGcHighThreshold |
80 | A porcentagem de uso do disco antes da qual a coleta de lixo de imagem nunca é executada. Uso mínimo de disco que pode acionar a coleta de lixo. |
topologyManagerPolicy |
nenhum, melhor esforço, restrito, nó único | nenhum | Otimize o alinhamento do nó NUMA, veja mais aqui. |
allowedUnsafeSysctls |
kernel.shm* , kernel.msg* , kernel.sem , fs.mqueue.* , net.* |
Nenhuma | Lista permitida de sysctls não seguros ou padrões de sysctl não seguros. |
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 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 seccomp padrão para todas as cargas de trabalho. RuntimeDefault Usa o perfil Seccomp padrão do Containerd, restringindo determinadas chamadas do sistema para aumentar a segurança. Syscalls restritos falharão. Unconfined não coloca restrições em syscalls, e todas as chamadas do sistema são permitidas, o que reduz a segurança. Para obter mais detalhes, consulte o perfil seccomp padrão containerD. Este parâmetro está em pré-visualização. Registre o sinalizador de recurso "KubeletDefaultSeccompProfilePreview" usando o az feature register comando com --namespace "Microsoft.ContainerService". |
Configuração personalizada do Windows Kubelet
Parâmetro | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
imageGcHighThreshold |
0-100 | 85 | A porcentagem de uso do disco após a qual a coleta de lixo de imagem é sempre executada. Uso mínimo do disco que acionará a coleta de lixo. Para desativar a coleta de lixo de imagem, defina como 100. |
imageGcLowThreshold |
0-100, não superior a imageGcHighThreshold |
80 | A porcentagem de uso do disco antes da qual a coleta de lixo de imagem nunca é executada. Uso mínimo de disco que pode acionar 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. |
Definições 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 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 do kernel abaixo e os limites internos para permitir que você manipule mais, ao custo de alguma memória do sistema.
Definição | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
fs.file-max |
8192 - 12000500 | 709620 | Número máximo de identificadores de arquivos que o kernel 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 arquivos permitido pelo sistema. Cada relógio 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 de solicitações de e/s assíncronas em todo o sistema. AIO-Max-NR permite que você altere o valor máximo para o qual AIO-NR pode crescer. |
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 devem lidar com um número muito grande de sessões simultâneas, você pode usar o subconjunto de TCP e opções de rede abaixo que você pode ajustar por pool de nós.
Definição | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
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. Um limite superior para o valor do parâmetro backlog passado para a função listen(2 ). Se o argumento da lista de pendências for maior que o somaxconn , ele será silenciosamente truncado até esse limite. |
net.core.netdev_max_backlog |
1000 - 3240000 | 1000 | Número máximo de pacotes, enfileirados no lado INPUT, quando a interface recebe pacotes mais rápido do que o kernel pode processá-los. |
net.core.rmem_max |
212992 - 134217728 | 212992 | O tamanho máximo do buffer de soquete de recebimento em bytes. |
net.core.wmem_max |
212992 - 134217728 | 212992 | O tamanho máximo do buffer de soquete de envio em bytes. |
net.core.optmem_max |
20480 - 4194304 | 20480 | Tamanho máximo do buffer auxiliar (buffer de memória opcional) 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 de conexão. Se esse número for excedido, o kernel começará a descartar solicitações. |
net.ipv4.tcp_max_tw_buckets |
8000 - 1440000 | 32768 | Número máximo de timewait tomadas mantidas pelo sistema simultaneamente. Se esse número for excedido, o soquete de espera é imediatamente destruído e o aviso é impresso. |
net.ipv4.tcp_fin_timeout |
5 - 120 | 60 | O período de tempo em que uma conexão órfã (não mais referenciada por nenhum aplicativo) permanecerá no estado FIN_WAIT_2 antes de ser abortada no final local. |
net.ipv4.tcp_keepalive_time |
30 - 432000 | 7200 | Com que frequência o keepalive TCP envia mensagens quando keepalive está ativado. |
net.ipv4.tcp_keepalive_probes |
1 - 15 | 9 | Quantas keepalive sondas o TCP envia, até decidir que a conexão está quebrada. |
net.ipv4.tcp_keepalive_intvl |
10 - 90 | 75 | Com que frequência as sondas são enviadas. Multiplicado por tcp_keepalive_probes ele compõe o tempo para matar uma conexão que não está respondendo, depois que as sondas começaram. |
net.ipv4.tcp_tw_reuse |
0 ou 1 | 0 | Permitir a reutilização TIME-WAIT de soquetes para novas conexões quando for 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 locais usado pelo tráfego TCP e UDP para escolher a porta local. Composto por 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 de 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á acionada se o número de entradas estiver abaixo dessa configuração. |
net.ipv4.neigh.default.gc_thresh2 |
512 - 90000 | 8192 | Número máximo flexível de entradas que podem estar no cache ARP. Esta configuração é sem dúvida a mais importante, pois a coleta de lixo ARP será acionada cerca de 5 segundos depois de atingir esse máximo suave. |
net.ipv4.neigh.default.gc_thresh3 |
1024 - 100000 | 16384 | Número máximo de entradas no cache ARP. |
net.netfilter.nf_conntrack_max |
131072 - 2097152 | 131072 | nf_conntrack é um módulo que rastreia entradas de conexão para NAT dentro do Linux. O módulo nf_conntrack utiliza uma tabela hash para registar o registo de ligação estabelecida do protocolo TCP. nf_conntrack_max é o número máximo de nós na tabela hash, ou seja, o número máximo de ligações suportadas pelo módulo nf_conntrack ou o tamanho da tabela de rastreio de ligações. |
net.netfilter.nf_conntrack_buckets |
65536 - 524288 | 65536 | nf_conntrack é um módulo que rastreia entradas de conexão para NAT dentro do Linux. O módulo nf_conntrack utiliza uma tabela hash para registar o registo de ligação estabelecida do protocolo TCP. nf_conntrack_buckets é o tamanho da tabela hash. |
Limites de trabalho
Como os limites do descritor de arquivo, o número de trabalhadores ou threads que um processo pode criar são limitados por uma configuração do kernel e limites de usuário. O limite de usuários no AKS é ilimitado.
Definição | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
kernel.threads-max |
20 - 513785 | 55601 | Os processos podem girar threads de trabalho. O número máximo de todos os threads que podem ser criados é definido com a configuração kernel.threads-max do kernel. |
Memória virtual
As configurações abaixo podem ser usadas para ajustar a operação do subsistema de memória virtual (VM) do kernel Linux e os dados sujos para o writeout
disco.
Definição | Valores/intervalo permitidos | Predefinido | Description |
---|---|---|---|
vm.max_map_count |
65530 - 262144 | 65530 | Este arquivo contém o número máximo de áreas de mapa de memória que um processo pode ter. As áreas do mapa de memória são usadas como um efeito colateral de chamar malloc , diretamente por mmap , mprotect e , e madvise também ao carregar bibliotecas compartilhadas. |
vm.vfs_cache_pressure |
1 - 100 | 100 | Esse valor percentual controla a tendência do kernel de recuperar a memória, que é usada para armazenar em cache objetos de diretório e inode. |
vm.swappiness |
0 - 100 | 60 | Esse controle é usado para definir o quão agressivo o kernel trocará páginas de memória. Valores mais altos aumentarão a agressividade, valores mais baixos diminuirão a quantidade de swap. Um valor de 0 instrui o kernel a não iniciar a troca até que a quantidade de páginas livres e apoiadas por arquivos seja menor do que a marca d'água alta em uma zona. |
swapFileSizeMB |
1 MB - Tamanho do disco temporário (/dev/sdb) | Nenhuma | SwapFileSizeMB especifica o tamanho em MB de um arquivo de permuta que será criado nos nós do agente a partir desse pool de nós. |
transparentHugePageEnabled |
always , madvise , never |
always |
Transparent Hugepages é um recurso do kernel Linux destinado a melhorar o desempenho, fazendo um uso mais eficiente do hardware de mapeamento de memória do seu processador. Quando ativado, o kernel tenta alocar hugepages sempre que possível e qualquer processo Linux receberá páginas de 2 MB se a mmap região estiver naturalmente alinhada com 2 MB. Em certos casos, quando hugepages estão habilitados em todo o sistema, os aplicativos podem acabar alocando mais recursos de memória. Um aplicativo pode mmap ser uma região grande, mas tocar apenas em 1 byte dela, nesse caso, uma página de 2 MB pode ser alocada em vez de uma página 4k sem um bom motivo. Esse cenário é o motivo pelo qual é possível desativar hugepages todo o sistema ou tê-los apenas dentro MADV_HUGEPAGE madvise de 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óximos passos
- Saiba como configurar o cluster AKS.
- Saiba como atualizar as imagens de nó no cluster.
- Consulte Atualizar um cluster do Serviço Kubernetes do Azure (AKS) para saber como atualizar seu cluster para a versão mais recente do Kubernetes.
- Consulte a lista de Perguntas frequentes sobre o AKS para encontrar respostas para algumas perguntas comuns do AKS.
Azure Kubernetes Service