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
- Saiba como configurar o cluster AKs.
- Saiba como atualizar as imagens de nó no cluster.
- Confira Atualizar um cluster do AKS (Serviço de Kubernetes do Azure) para saber como atualizar o cluster para a versão mais recente do Kubernetes.
- Confira a lista de Perguntas frequentes sobre o AKS para encontrar respostas a algumas perguntas comuns sobre o AKS.
Azure Kubernetes Service