Este documento mostra como personalizar a configuração dos nós do Google Kubernetes Engine (GKE) através de um ficheiro de configuração denominado configuração do sistema de nós.
Uma configuração do sistema de nós é um ficheiro de configuração que permite ajustar um conjunto limitado de definições do sistema. No seu conjunto de nós, pode usar uma configuração do sistema de nós para especificar definições personalizadas para o agente de nós do Kubernetes kubelet e para as configurações do kernel do Linux de sysctl baixo nível.
Este documento detalha as configurações disponíveis para uma configuração do sistema de nós e como aplicá-las aos seus conjuntos de nós padrão do GKE. Tenha em atenção que, uma vez que os clusters do GKE Autopilot têm um ambiente de nós mais gerido, as respetivas opções de configuração do sistema de nós diretos são limitadas em comparação com os conjuntos de nós do GKE Standard.
Por que motivo usar configurações do sistema de nós
As configurações do sistema de nós oferecem as seguintes vantagens:
- Ajuste do desempenho: otimize o desempenho da pilha de rede, a gestão de memória, o agendamento da CPU ou o comportamento de E/S para aplicações exigentes, como preparação ou fornecimento de IA, bases de dados, servidores Web com tráfego elevado ou serviços sensíveis à latência.
- Reforço da segurança: aplique definições de segurança específicas ao nível do kernel ou restrinja determinados comportamentos do sistema para reduzir a superfície de ataque.
- Gestão de recursos: ajuste a forma como o
kubeletgere os PIDs, o espaço em disco, a recolha de lixo de imagens ou os recursos de CPU e memória. - Compatibilidade da carga de trabalho: ajuda a garantir que o ambiente do nó cumpre os pré-requisitos específicos para software especializado ou aplicações mais antigas que requerem definições específicas do kernel.
Outras opções para personalizar as configurações dos nós
Também pode personalizar a configuração do nó através de outros métodos:
- Ficheiro de configuração de tempo de execução: para personalizar um tempo de execução de contentores do containerd nos seus nós do GKE, pode usar um ficheiro diferente denominado ficheiro de configuração de tempo de execução. Para mais informações, consulte o artigo Personalize a configuração do containerd nos nós do GKE.
- ComputeClass: pode especificar atributos de nós na especificação de ComputeClass do GKE. Pode usar ComputeClasses no modo GKE Autopilot e no modo padrão na versão 1.32.1-gke.1729000 do GKE e posteriores. Para mais informações, consulte o artigo Personalize a configuração do sistema de nós.
- DaemonSets: também pode usar DaemonSets para personalizar nós. Para mais informações, consulte o artigo Inicializar automaticamente nós do GKE com DaemonSets.
As configurações do sistema de nós não são suportadas em nós do Windows Server.
Antes de começar
Antes de começar, certifique-se de que faz o seguinte:
- Instale ferramentas de linhas de comando:
- Se usar os exemplos da CLI gcloud neste documento, certifique-se de que instala e configura a CLI Google Cloud.
- Se usar os exemplos do Terraform, certifique-se de que instala e configura o Terraform.
- Conceder autorizações: precisa das autorizações de IAM adequadas para criar e atualizar clusters do GKE e conjuntos de nós, como
container.clusterAdminou uma função diferente com autorizações equivalentes. - Planeie uma potencial interrupção da carga de trabalho: as configurações de nós personalizadas são aplicadas ao nível do conjunto de nós. Normalmente, as alterações acionam uma atualização contínua dos nós no conjunto, o que envolve recriar os nós. Planeie uma potencial interrupção da carga de trabalho e use orçamentos de interrupção de pods (PDBs) quando apropriado.
- Faça uma cópia de segurança e teste todas as alterações: teste sempre as alterações de configuração num ambiente de preparação ou desenvolvimento antes de as aplicar à produção. As definições incorretas podem levar à instabilidade do nó ou a falhas de carga de trabalho.
- Reveja as predefinições do GKE: as imagens dos nós do GKE incluem configurações predefinidas otimizadas. Personalize os parâmetros apenas se tiver uma necessidade específica e compreender o impacto das alterações.
Use uma configuração do sistema de nós no modo padrão do GKE
Quando usa uma configuração do sistema de nós, usa um ficheiro YAML que contém os parâmetros de configuração para o kubelet e o kernel do Linux. Embora as configurações do sistema de nós também estejam disponíveis no modo
Autopilot do GKE, os passos neste documento mostram como criar e
usar um ficheiro de configuração para o modo Standard do GKE.
Para usar uma configuração do sistema de nós no modo padrão do GKE, faça o seguinte:
- Crie um ficheiro de configuração. Este ficheiro contém as suas configurações do
kubelete dosysctl. - Adicione a configuração quando criar um cluster ou quando criar ou atualizar um conjunto de nós.
Crie um ficheiro de configuração
Escreva a configuração do sistema de nós em YAML. O exemplo seguinte adiciona configurações para as opções kubelet e sysctl:
kubeletConfig:
cpuManagerPolicy: static
allowedUnsafeSysctls:
- 'kernel.shm*'
- 'kernel.msg*'
- 'kernel.sem'
- 'fs.mqueue*'
- 'net.*'
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
Neste exemplo, aplica-se o seguinte:
- O campo
cpuManagerPolicy: staticconfigura okubeletpara usar a política de gestão de CPU estática. + O camponet.core.somaxconn: '2048'limita a fila de tarefas pendentes a 2048 bytes.socket listen() - O campo
net.ipv4.tcp_rmem: '4096 87380 6291456'define o valor mínimo, predefinido e máximo da memória intermédia de receção do soquete TCP como 4096 bytes, 87 380 bytes e 6 291 456 bytes, respetivamente.
Se quiser adicionar configurações apenas para o kubelet ou o sysctl, inclua apenas essa secção na configuração do sistema de nós. Por exemplo, para adicionar uma configuração de kubelet, crie o seguinte ficheiro:
kubeletConfig:
cpuManagerPolicy: static
Para ver uma lista completa dos campos que pode adicionar à configuração do sistema de nós, consulte as secções Opções de configuração do Kubelet e Opções de configuração do Sysctl.
Adicione a configuração a um grupo de nós padrão
Depois de criar a configuração do sistema de nós, adicione a flag
--system-config-from-file
através da CLI do Google Cloud. Pode adicionar esta flag quando cria um cluster ou quando cria ou atualiza um conjunto de nós. Não pode adicionar uma configuração do sistema de nós através da consola Google Cloud .
Crie um cluster com a configuração do sistema de nós
Pode adicionar uma configuração do sistema de nós durante a criação do cluster através da CLI gcloud ou do Terraform. As instruções que se seguem aplicam a configuração do sistema do nó ao conjunto de nós predefinido:
CLI gcloud
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Substitua o seguinte:
CLUSTER_NAME: o nome do seu clusterLOCATION: a zona de computação ou a região do clusterSYSTEM_CONFIG_PATH: o caminho para o ficheiro que contém as configurações dekubeletesysctl
Depois de aplicar uma configuração do sistema de nós, o conjunto de nós predefinido do cluster usa as definições que definiu.
Terraform
Para criar um cluster regional com uma configuração do sistema de nós personalizada através do Terraform, consulte o seguinte exemplo:
Para mais informações sobre a utilização do Terraform, consulte o artigo Apoio técnico do Terraform para o GKE.
Crie um novo node pool com a configuração do sistema de nós
Pode adicionar uma configuração do sistema de nós quando usa a CLI gcloud ou o Terraform para criar um novo conjunto de nós.
As instruções seguintes aplicam a configuração do sistema de nós a um novo conjunto de nós:
CLI gcloud
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Substitua o seguinte:
POOL_NAME: o nome do seu node poolCLUSTER_NAME: o nome do cluster ao qual quer adicionar um node poolLOCATION: a zona de computação ou a região do clusterSYSTEM_CONFIG_PATH: o caminho para o ficheiro que contém as configurações dekubeletesysctl
Terraform
Para criar um node pool com uma configuração do sistema de nós personalizada através do Terraform, consulte o seguinte exemplo:
Para mais informações sobre a utilização do Terraform, consulte o artigo Apoio técnico do Terraform para o GKE.
Atualize a configuração do sistema de nós de um node pool existente
Pode atualizar a configuração do sistema de nós de um conjunto de nós existente executando o seguinte comando:
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Substitua o seguinte:
POOL_NAME: o nome do node pool que quer atualizarCLUSTER_NAME: o nome do cluster que quer atualizarLOCATION: a zona de computação ou a região do clusterSYSTEM_CONFIG_PATH: o caminho para o ficheiro que contém as configurações dokubelete dosysctl
Esta alteração requer a recriação dos nós, o que pode causar interrupções nas suas cargas de trabalho em execução. Para mais informações acerca desta alteração específica, encontre a linha correspondente na tabela alterações manuais que recriam os nós através de uma estratégia de atualização de nós sem respeitar as políticas de manutenção.
Para mais informações sobre as atualizações de nós, consulte o artigo Planeamento de interrupções de atualizações de nós.
Edite uma configuração do sistema de nós
Para editar a configuração do sistema de um nó, pode criar um novo conjunto de nós com a configuração pretendida ou atualizar a configuração do sistema de nós de um conjunto de nós existente.
Edite criando um node pool
Para editar a configuração de um sistema de nós criando um node pool, faça o seguinte:
- Crie um ficheiro de configuração com a configuração que quer.
- Adicione a configuração a um novo conjunto de nós.
- Migre as suas cargas de trabalho para o novo conjunto de nós.
- Elimine o node pool antigo.
Edite atualizando um node pool existente
Para editar a configuração do sistema de nós de um node pool existente, siga as instruções no separador Atualizar node pool para adicionar a configuração a um node pool. Quando atualiza uma configuração do sistema de nós e a nova configuração substitui a configuração do sistema existente do node pool, os nós têm de ser recriados. Se omitir parâmetros durante uma atualização, os parâmetros são definidos para as respetivas predefinições.
Se quiser repor a configuração do sistema do nó para as predefinições, atualize o ficheiro de configuração com valores vazios para os campos kubelet e sysctl, por exemplo:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Elimine uma configuração do sistema de nós
Para remover uma configuração do sistema de nós, siga estes passos:
- Crie um node pool.
- Migre as suas cargas de trabalho para o novo conjunto de nós.
- Elimine o node pool que tem a configuração do sistema de nós antiga.
Opções de configuração para o kubelet
As tabelas nesta secção descrevem as opções de kubelet que pode modificar.
Gestão da CPU
A tabela seguinte descreve as opções de gestão da CPU para o kubelet.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
cpuCFSQuota |
Tem de ser true ou false. |
true |
Esta definição aplica o limite de CPU do pod. Se definir este valor como false, significa que os limites de CPU para os pods são ignorados.Ignorar os limites de CPU pode ser benéfico em determinados cenários em que os pods são sensíveis aos limites de CPU. O risco de desativar o cpuCFSQuota é que um Pod não autorizado pode consumir mais recursos da CPU do que o pretendido. |
cpuCFSQuotaPeriod |
Tem de ser uma duração. | "100ms" |
Esta definição define o valor do período da quota do CFS da CPU, cpu.cfs_period_us, que especifica o período com que o acesso de um cgroup aos recursos da CPU deve ser realocado. Esta opção permite-lhe ajustar o comportamento de limitação da CPU. |
Gestão e eliminação de memória
A tabela seguinte descreve as opções modificáveis para a gestão de memória e a
remoção. Esta secção também contém uma tabela separada que descreve as opções modificáveis para a flag evictionSoft.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
evictionSoft |
Mapa de nomes de sinais. Para restrições de valores, consulte a tabela seguinte. | none |
Esta definição mapeia os nomes dos sinais para uma quantidade ou uma percentagem que define os limites de remoção temporária. Um limite de remoção suave tem de ter um período de tolerância. O kubelet não remove os pods até que o período de tolerância seja excedido. |
evictionSoftGracePeriod |
Mapa de nomes de sinais. Para cada nome de sinal, o valor tem de ser uma duração positiva inferior a 5m. As unidades de tempo válidas são ns, us (ou µs), ms, s ou m. |
none |
Esta definição mapeia os nomes dos sinais para durações que definem os períodos de tolerância para os limites de rejeição parcial. Cada limite de remoção temporária tem de ter um período de tolerância correspondente. |
evictionMinimumReclaim |
Mapa de nomes de sinais. Para cada nome de sinal, o valor tem de ser uma percentagem positiva inferior a 10%. |
none |
Esta definição mapeia os nomes dos sinais para percentagens que definem a quantidade mínima de um determinado recurso que o kubelet reclama quando realiza uma remoção de pods. |
evictionMaxPodGracePeriodSeconds |
O valor tem de ser um número inteiro entre 0 e 300. |
0 |
Esta definição define, em segundos, o período de tolerância máximo para o encerramento do pod durante a expulsão. |
A tabela seguinte mostra as opções modificáveis para a flag evictionSoft.
As mesmas opções também se aplicam às flags evictionSoftGracePeriod e evictionMinimumReclaim com restrições diferentes.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
memoryAvailable |
O valor tem de ser uma quantidade superior a 100Mi e inferior a 50% da memória do nó. |
none |
Esta definição representa a quantidade de memória disponível antes da remoção temporária. Define a quantidade do sinal memory.available no kubelet . |
nodefsAvailable |
O valor tem de estar entre 10% e 50%. |
none |
Esta definição representa o nodefs disponível antes da remoção temporária. Define a quantidade do sinal nodefs.available no kubelet . |
nodefsInodesFree |
O valor tem de estar entre 5% e 50%. |
none |
Esta definição representa os inodos nodefs que estão livres antes da remoção temporária. Define a quantidade do sinal nodefs.inodesFree no kubelet . |
imagefsAvailable |
O valor tem de estar entre 15% e 50%. |
none |
Esta definição representa os imagefs disponíveis antes da remoção temporária. Define a quantidade de sinal imagefs.available no kubelet . |
imagefsInodesFree |
O valor tem de estar entre 5% e 50%. |
none |
Esta definição representa os inodos imagefs que estão livres antes da remoção temporária. Define a quantidade do sinal imagefs.inodesFree no kubelet. |
pidAvailable |
O valor tem de estar entre 10% e 50%. |
none |
Esta definição representa os PIDs disponíveis antes da remoção temporária. Define a quantidade do sinal pid.available no kubelet. |
singleProcessOOMKill
|
O valor tem de ser true ou false. |
true para nós cgroupv1 e false para nós cgroupv2. |
Esta definição determina se os processos no contentor são terminados por falta de memória individualmente ou como um grupo.
Disponível nas versões 1.32.4-gke.1132000, 1.33.0-gke.1748000 ou posteriores do GKE. |
Gestão de PIDs
A tabela seguinte descreve as opções modificáveis para a gestão de PIDs.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
podPidsLimit |
O valor tem de estar entre 1024 e 4194304. |
none |
Esta definição define o número máximo de IDs de processos (PIDs) que cada Pod pode usar. |
Registo
A tabela seguinte descreve as opções modificáveis para o registo.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
containerLogMaxSize |
O valor tem de ser um número positivo e um sufixo de unidade entre 10Mi e 500Mi, inclusive. |
10Mi |
Esta definição controla a definição containerLogMaxSize da política de rotação de registos do contentor, que lhe permite configurar o tamanho máximo de cada ficheiro de registo. O valor predefinido é 10Mi. As unidades válidas são Ki, Mi e Gi. |
containerLogMaxFiles |
O valor tem de ser um número inteiro entre 2 e 10, inclusive. |
5 |
Esta definição controla a definição containerLogMaxFiles da política de rotação de ficheiros de registo do contentor, que lhe permite configurar o número máximo de ficheiros permitidos para cada contentor, respetivamente. O valor predefinido é 5. O tamanho total do registo (container_log_max_size*container_log_max_files) por contentor não pode exceder 1% do armazenamento total do nó. |
Recolha de lixo de imagens
A tabela seguinte descreve as opções modificáveis para a recolha de lixo de imagens.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
imageGCHighThresholdPercent |
O valor tem de ser um número inteiro entre 10 e 85, inclusive, e superior a imageGcLowThresholdPercent. |
85 |
Esta definição define a percentagem de utilização do disco acima da qual é executada a recolha de lixo de imagens. Representa a utilização máxima do disco para recolher lixo. A percentagem é calculada dividindo o valor deste campo por 100. |
imageGCLowThresholdPercent |
O valor tem de ser um número inteiro entre 10 e 85, inclusive, e inferior a imageGcHighThresholdPercent. |
80 |
Esta definição define a percentagem de utilização do disco antes da qual a recolha de lixo de imagens nunca é executada. Representa a utilização de disco mais baixa para a qual se deve recolher lixo. A percentagem é calculada dividindo o valor deste campo por 100. |
imageMinimumGcAge |
O valor tem de ser uma duração não superior a 2m. As unidades de tempo válidas são ns, us (ou µs), ms, s, m ou h. |
2m |
Esta definição define a idade mínima de uma imagem não utilizada antes de ser recolhida como lixo. |
imageMaximumGcAge |
O valor tem de ser uma duração. | 0s |
Esta definição define a idade máxima que uma imagem pode ter sem ser usada antes de ser recolhida como lixo. O valor predefinido deste campo é Disponível nas versões 1.30.7-gke.1076000, 1.31.3-gke.1023000 ou posteriores do GKE. |
Extração de imagens
A tabela seguinte descreve as opções modificáveis para a obtenção de imagens.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
maxParallelImagePulls |
O valor tem de ser um número inteiro entre 2 e 5, inclusive. | 2 ou 3 com base no tipo de disco. |
Esta definição define o número máximo de obtenções de imagens em paralelo. O valor predefinido é decidido pelo tipo de disco de arranque. |
Segurança e operações não seguras
A tabela seguinte descreve as opções modificáveis para configurar a segurança e processar operações não seguras.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
allowedUnsafeSysctls |
Lista de
|
none |
Esta definição define uma lista de autorizações separada por vírgulas de nomes ou grupos sysctl não seguros que podem ser definidos nos Pods.sysctl |
insecureKubeletReadonlyPortEnabled |
O valor tem de ser um valor booleano, true ou false. |
true |
Esta definição desativa a porta kubelet de leitura apenas 10255 não segura em cada novo conjunto de nós no seu cluster. Se configurar esta definição neste ficheiro, não pode usar um cliente da API GKE para alterar a definição ao nível do cluster. |
Gestores de recursos
O Kubernetes oferece um conjunto de gestores de recursos. Pode configurar estes Resource Managers para coordenar e otimizar o alinhamento dos recursos de nós para Pods que estão configurados com requisitos específicos para recursos de CPUs, dispositivos e memória (hugepages).
A tabela seguinte descreve as opções modificáveis para os gestores de recursos.
kubelet definições de config |
Restrições | Predefinição | Descrição |
|---|---|---|---|
cpuManagerPolicy |
O valor tem de ser none ou static. |
none |
Esta definição controla a kubelet política do CPU Manager. O valor predefinido é none, que é o esquema de afinidade de CPU predefinido, não oferecendo afinidade além do que o agendador do SO faz automaticamente.Se definir este valor como static, os pods que estão na classe de QoS Guaranteed e têm pedidos de CPU inteiros podem ser atribuídos a CPUs exclusivas. |
memoryManager.policy |
O valor tem de ser None ou Static. |
None |
Esta definição controla a Se definir este valor como Esta definição é suportada para clusters com o plano de controlo a executar a versão 1.32.3-gke.1785000 ou posterior do GKE. |
topologyManager |
O valor tem de ser uma das definições suportadas para cada um dos respetivos campos. Não pode definir o campo |
|
Estas definições controlam a configuração do Pode definir as definições de política e âmbito de forma independente. Para mais informações sobre estas definições, consulte o artigo Âmbitos e políticas do gestor de topologia. Os seguintes recursos do GKE suportam esta definição:
|
Opções de configuração do Sysctl
Para otimizar o desempenho do seu sistema, pode modificar os parâmetros do kernel do Linux. As tabelas nesta secção descrevem os vários parâmetros do kernel que pode configurar.
Parâmetros do sistema de ficheiros (fs.*)
A tabela seguinte descreve os parâmetros modificáveis para o sistema de ficheiros do Linux. Estas definições controlam o comportamento do sistema de ficheiros Linux, como os limites de identificadores de ficheiros e a monitorização de eventos.
Parâmetro Sysctl |
Restrições | Descrição |
|---|---|---|
fs.aio-max-nr |
Tem de ser um valor entre [65536, 4194304]. | Esta definição define o número máximo de pedidos de E/S assíncronos ao nível do sistema. |
fs.file-max |
Tem de ser um valor entre [104857, 67108864]. | Esta definição define o número máximo de identificadores de ficheiros que o kernel do Linux pode atribuir. |
fs.inotify.max_user_instances |
Tem de ser um valor entre [8192 e 1048576]. | Esta definição define o número máximo de instâncias inotify que um utilizador pode criar. |
fs.inotify.max_user_watches |
Tem de ser um valor entre [8192 e 1048576]. | Esta definição define o número máximo de observações inotify que um utilizador pode criar. |
fs.nr_open |
Tem de ser um valor entre [1048576 e 2147483584]. | Esta definição define o número máximo de descritores de ficheiros que podem ser abertos por um processo. |
Parâmetros do kernel (kernel.*)
A tabela seguinte descreve os parâmetros modificáveis para o kernel do Linux. Estas definições configuram as funcionalidades essenciais do kernel, incluindo a alocação de memória partilhada.
| Parâmetro Sysctl | Restrições | Descrição |
|---|---|---|
kernel.shmmni |
Tem de ser um número entre [4096 e 32768]. | Esta definição define o número máximo de segmentos de memória partilhada ao nível do sistema. Se este valor não estiver definido, é utilizado 4096 por predefinição. |
kernel.shmmax |
Tem de ser um valor entre [0, 18446744073692774399]. | Esta definição define o tamanho máximo, em bytes, de um único segmento de memória partilhada permitido pelo kernel. Este valor é ignorado se for superior à quantidade real de RAM, o que significa que toda a RAM disponível pode ser partilhada. |
kernel.shmall |
Tem de ser um valor entre [0, 18446744073692774399]. | Esta definição define a quantidade total de páginas de memória partilhada que podem ser usadas no sistema em simultâneo. Uma página tem 4096 bytes na arquitetura AMD64 e Intel 64. |
kernel.perf_event_paranoid |
Tem de ser um número entre [-1, 3]. | Esta definição controla a utilização do sistema de eventos de desempenho por utilizadores sem privilégios sem CAP_PERFMON. O valor predefinido é 2 no kernel. |
kernel.sched_rt_runtime_us |
Tem de ser um valor entre [-1, 1000000]. | Esta definição define um limite global sobre o tempo que o agendamento em tempo real pode usar. |
kernel.softlockup_panic |
Opcional (booleano). | Esta definição controla se o kernel entra em pânico quando é detetado um bloqueio temporário. |
kernel.yama.ptrace_scope |
Tem de ser um valor entre [0 e 3]. |
Esta definição define o âmbito e as restrições para a chamada do sistema
|
kernel.kptr_restrict |
Tem de ser um número entre [0, 2]. | Esta definição indica se são impostas restrições à exposição de endereços do kernel através do /proc e de outras interfaces. |
kernel.dmesg_restrict |
Opcional (booleano). | Esta definição indica se os utilizadores sem privilégios estão impedidos de usar o dmesg(8) para ver mensagens da memória intermédia de registo do kernel. |
kernel.sysrq |
Tem de ser um número entre [0 e 511]. |
Esta definição controla as funções que podem ser invocadas através da tecla SysRq. Os valores possíveis incluem o seguinte:
|
Parâmetros de rede (net.*)
A tabela seguinte descreve os parâmetros modificáveis para a rede. Estas definições ajustam o desempenho e o comportamento da pilha de rede, desde as memórias intermédias de soquetes ao acompanhamento de ligações.
| Parâmetro sysctl | Restrições | Descrição |
|---|---|---|
net.core.busy_poll |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o limite de tempo limite de sondagem ocupada de baixa latência para sondagem e seleção. Representa o tempo aproximado em µs para o ciclo de espera ocupado por eventos. |
net.core.busy_read |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o limite de tempo de sondagem ocupada de baixa latência para leituras de tomadas. Representa o tempo aproximado em µs para o ciclo de espera ocupado à espera de pacotes na fila do dispositivo. |
net.core.netdev_max_backlog |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o número máximo de pacotes colocados em fila no lado de ENTRADA quando a interface recebe pacotes mais rapidamente do que o kernel os consegue processar. |
net.core.rmem_default |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o tamanho predefinido do buffer do socket de receção, em bytes. |
net.core.rmem_max |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o tamanho máximo da memória intermédia do socket de receção, em bytes. |
net.core.wmem_default |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define a predefinição, em bytes, da memória intermédia de envio do soquete. |
net.core.wmem_max |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o tamanho máximo da memória intermédia do soquete de envio, em bytes. |
net.core.optmem_max |
Qualquer número inteiro positivo inferior a 2147483647. | Esta definição define o tamanho máximo da memória intermédia auxiliar permitido por tomada. |
net.core.somaxconn |
Tem de ser um valor entre [128, 2147483647]. | Esta definição define o limite da fila de espera do socket listen(), que é conhecido no espaço do utilizador como SOMAXCONN. Esta definição é 128 por predefinição. |
net.ipv4.tcp_rmem |
{min, default, max} (cada um > 0, memória em bytes). | Esta definição define o tamanho mínimo, em bytes, da memória intermédia de receção usada pelos soquetes UDP na moderação. A predefinição é de 1 página. |
net.ipv4.tcp_wmem |
{min, default, max} (cada um > 0, memória em bytes). | Esta definição define o tamanho mínimo, em bytes, da memória intermédia de envio usada por sockets UDP na moderação. A predefinição é de 1 página. |
net.ipv4.tcp_tw_reuse |
Tem de ser um número entre {0, 1}. | Esta definição define se deve permitir a reutilização de sockets no estado TIME_WAIT para novas ligações quando for seguro do ponto de vista do protocolo. O valor predefinido é 0. |
net.ipv4.tcp_max_orphans |
Tem de ser um valor entre [16384, 262144]. | Esta definição define o número máximo de sockets TCP que não estão anexados a nenhum identificador de ficheiro do utilizador. |
net.ipv4.tcp_max_tw_buckets |
Tem de ser um valor entre [4096, 2147483647]. | Esta definição define o número máximo de sockets de espera de tempo mantidos pelo sistema em simultâneo. Se este número for excedido, o soquete de espera é imediatamente destruído e é apresentado um aviso. |
net.ipv4.tcp_syn_retries |
Tem de ser um número entre [1 e 127]. | Esta definição define o número de vezes que os SYNs iniciais de uma tentativa de ligação TCP ativa são retransmitidos. |
net.ipv4.tcp_ecn |
Tem de ser um número entre [0, 2]. | Esta definição controla a utilização da Notificação de Congestão Explícita (ECN) pelo TCP. O ECN é usado apenas quando ambas as extremidades da ligação TCP indicam suporte para o mesmo. |
net.ipv4.tcp_mtu_probing |
Tem de ser um número entre [0, 2]. |
Esta definição controla a descoberta de MTU do caminho da camada de packetização de TCP. Os valores suportados são os seguintes:
|
net.ipv4.tcp_congestion_control |
Tem de ser um dos valores suportados da coluna Description. | Esta definição não é suportada quando o GKE Dataplane V2 está ativado no cluster. Os seguintes valores suportados dependem do tipo de imagem:
|
net.ipv6.conf.all.disable_ipv6 |
Booleano. | Alterar este valor é o mesmo que alterar a definição conf/default/disable_ipv6 e também todas as definições disable_ipv6 por interface para o mesmo valor. |
net.ipv6.conf.default.disable_ipv6 |
Booleano. | Esta definição desativa o funcionamento do IPv6. |
net.netfilter.nf_conntrack_acct |
Tem de ser um número entre {0, 1}. | Esta definição ativa a contabilização do fluxo de acompanhamento de ligações. O valor predefinido é 0, o que significa que a definição está desativada. Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
net.netfilter.nf_conntrack_max |
Tem de ser um valor entre [65536, 4194304]. | Esta definição define o tamanho da tabela de acompanhamento de ligações. Se o valor máximo for atingido, a nova associação falha. Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
net.netfilter.nf_conntrack_buckets |
Tem de ser um valor entre [65536, 524288]. |
Esta definição define o tamanho da tabela de hash. A definição recomendada é o resultado do seguinte: Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
net.netfilter.nf_conntrack_tcp_timeout_close_wait |
Tem de ser um valor entre [60 e 3600]. |
Esta definição define o período, em segundos, durante o qual as ligações TCP podem permanecer no estado Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
net.netfilter.nf_conntrack_tcp_timeout_established |
Tem de ser um valor entre [600, 86400]. |
Esta definição define a duração, em segundos, das ligações inativas antes de serem eliminadas automaticamente da tabela de monitorização de ligações. Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
net.netfilter.nf_conntrack_tcp_timeout_time_wait |
Tem de ser um número entre [1 e 600]. |
Esta definição define o período, em segundos, durante o qual as ligações TCP podem permanecer no estado Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
Parâmetros de memória virtual (vm.*)
A tabela seguinte descreve os parâmetros modificáveis para o subsistema de memória virtual. Estas definições gerem o subsistema de memória virtual, que controla a forma como o kernel processa a memória, a troca e o armazenamento em cache do disco.
Parâmetro sysctl |
Restrições | Descrição |
|---|---|---|
vm.max_map_count |
Tem de ser um valor entre [65536, 2147483647]. | Este ficheiro define o número máximo de áreas de mapeamento de memória que um processo pode ter. |
vm.dirty_background_ratio |
Tem de ser um número entre 1 e 100. | Esta definição define a percentagem de memória do sistema que pode ser preenchida com páginas sujas antes de os threads de limpeza do kernel em segundo plano começarem a escrever de volta. O valor tem de ser inferior ao valor do campo vm.dirty_ratio. |
vm.dirty_background_bytes |
Tem de ser um número entre [0, 68719476736]. |
Esta definição define a quantidade de memória suja na qual os threads de limpeza do kernel em segundo plano iniciam a gravação. Tenha em atenção que |
vm.dirty_expire_centisecs |
Tem de ser um número entre [0, 6000]. | Esta definição define a idade máxima, em centésimos de segundo, que os dados sujos podem permanecer na memória antes de os threads de descarga do kernel os escreverem no disco. |
vm.dirty_ratio |
Tem de ser um número entre 1 e 100. | Esta definição define a percentagem de memória do sistema que pode ser preenchida com páginas sujas antes de os processos que realizam escritas serem forçados a bloquear e escrever dados sujos de forma síncrona. |
vm.dirty_bytes |
Tem de ser um número entre [0, 68719476736]. |
Esta definição define a quantidade de memória suja na qual um processo que gera escritas no disco inicia a gravação de volta. O valor mínimo permitido para Tenha em atenção que |
vm.dirty_writeback_centisecs |
Tem de ser um número entre [0 e 1000]. | Esta definição define o intervalo, em centésimos de segundo, ao qual os threads de descarga do kernel são ativados para escrever dados antigos alterados no disco. |
vm.overcommit_memory |
Tem de ser um número entre {0, 1, 2}. |
Esta definição determina a estratégia do kernel para processar a sobrecarga de memória. Os valores são os seguintes:
|
vm.overcommit_ratio |
Tem de ser um valor entre [0 e 100]. | Esta definição define a percentagem de RAM física permitida para o excesso de compromisso quando o valor do campo vm.overcommit_memory está definido como 2. |
vm.vfs_cache_pressure |
Tem de ser um valor entre [0 e 100]. | Esta definição ajusta a preferência do kernel para reclamar memória usada para caches de dentry (diretório) e inode. |
vm.swappiness |
Tem de ser um número entre [0 e 200]. | Esta definição controla a tendência do kernel para mover processos da memória física para o disco de troca. O valor predefinido é 60. |
vm.watermark_scale_factor |
Tem de ser um valor entre [10, 3000]. | Esta definição controla a agressividade do kswapd. Define a memória restante antes de o kswapd ser ativado e a memória a libertar antes de ser desativado. O valor predefinido é 10. |
vm.min_free_kbytes |
Tem de ser um valor entre [67584 e 1048576]. | Esta definição define a memória livre mínima antes de OOM. O valor predefinido é 67584. |
Para mais informações sobre os valores suportados para cada indicador sysctl, consulte a
documentação da CLI gcloud --system-config-from-file.
Os diferentes
namespaces Linux
podem ter valores únicos para uma determinada flag sysctl, mas outros podem ser globais
para todo o nó. A atualização das opções sysctl através de uma configuração do sistema de nós ajuda a garantir que o sysctl é aplicado globalmente no nó e em cada espaço de nomes, para que cada Pod tenha valores sysctl idênticos em cada espaço de nomes do Linux.
Opções de configuração do modo cgroup do Linux
O tempo de execução do contentor e o kubelet usam cgroups do kernel do Linux para a gestão de recursos, como limitar a quantidade de CPU ou memória a que cada contentor num pod pode aceder. Existem duas versões do subsistema cgroup no kernel: cgroupv1 e cgroupv2.
O suporte do Kubernetes para cgroupv2 foi introduzido como alfa na versão 1.18 do Kubernetes, beta na 1.22 e DG na 1.25. Para mais informações, consulte a
documentação cgroups v2 do Kubernetes.
A configuração do sistema de nós permite-lhe personalizar a configuração do cgroup dos seus node pools. Pode usar o cgroupv1 ou o cgroupv2. O GKE usa o cgroupv2 para novos conjuntos de nós padrão que executam a versão 1.26 e posterior, e o cgroupv1 para conjuntos de nós que executam versões anteriores à 1.26. Para os conjuntos de nós criados com a administração de contas automática de nós, a configuração do cgroup depende da versão inicial do cluster e não da versão do conjunto de nós. O cgroupv1 não é suportado em máquinas Arm.
Pode usar a configuração do sistema de nós para alterar a definição de um conjunto de nós para usar cgroupv1 ou cgroupv2 explicitamente. A atualização de um node pool existente que usa cgroupv1 para a versão 1.26 não altera a definição para cgroupv2.
Os conjuntos de nós existentes que executam uma versão anterior à 1.26 e que não incluem uma configuração de cgroup personalizada continuam a usar o cgroupv1.
Para alterar a definição, tem de especificar explicitamente cgroupv2 para o conjunto de nós existente.
Por exemplo, para configurar o seu conjunto de nós para usar cgroupv2, use um ficheiro de configuração do sistema de nós, como o seguinte:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
As opções cgroupMode suportadas são as seguintes:
CGROUP_MODE_V1: usecgroupv1no node pool.CGROUP_MODE_V2: usecgroupv2no node pool.CGROUP_MODE_UNSPECIFIED: use a configuração de cgroup do GKE predefinida.
Para usar o cgroupv2, aplicam-se os seguintes requisitos e limitações:
- Para um conjunto de nós que execute uma versão anterior à 1.26, tem de usar a versão 408.0.0 ou posterior da CLI gcloud. Em alternativa, use o gcloud beta com a versão 395.0.0 ou posterior.
- O cluster e os conjuntos de nós têm de executar a versão 1.24.2-gke.300 ou posterior do GKE.
- Tem de usar a imagem do nó do SO otimizado para contentores com o containerd ou do Ubuntu com o containerd.
- Se alguma das suas cargas de trabalho depender da leitura do sistema de ficheiros cgroup (
/sys/fs/cgroup/...), certifique-se de que são compatíveis com a APIcgroupv2. - Se usar ferramentas de monitorização ou de terceiros, certifique-se de que são compatíveis com o
cgroupv2. - Se usar cargas de trabalho Java (JDK), recomendamos que use versões que
suportem totalmente o cgroupv2,
incluindo o JDK
8u372, o JDK 11.0.16 ou posterior, ou o JDK 15 ou posterior.
Valide a configuração do cgroup
Quando adiciona uma configuração do sistema de nós, o GKE tem de recriar os nós para implementar as alterações. Depois de adicionar a configuração a um conjunto de nós e os nós serem recriados, pode validar a nova configuração.
Pode validar a configuração do cgroup para nós num conjunto de nós através da CLI gcloud ou da ferramenta de linha de comandos kubectl:
CLI gcloud
Verifique a configuração do cgroup para um conjunto de nós:
gcloud container node-pools describe POOL_NAME \
--format='value(Config.effectiveCgroupMode)'
Substitua POOL_NAME pelo nome do seu conjunto de nós.
O potencial resultado é um dos seguintes:
EFFECTIVE_CGROUP_MODE_V1: os nós usamcgroupv1EFFECTIVE_CGROUP_MODE_V2: os nós usamcgroupv2
O resultado mostra apenas a nova configuração do cgroup após a recriação dos nós no conjunto de nós. A saída está vazia para pools de nós do servidor Windows, que não suportam cgroup.
kubectl
Para usar kubectl para validar a configuração do cgroup para nós neste conjunto de nós, selecione um nó e ligue-se a ele através das seguintes instruções:
- Crie um shell interativo
com qualquer nó no node pool. No comando, substitua
mynodepelo nome de qualquer nó no conjunto de nós. - Identifique a versão do cgroup nos nós Linux.
Opções de configuração de páginas enormes do Linux
Pode usar um ficheiro de configuração do sistema de nós para pré-atribuir páginas grandes. O Kubernetes suporta páginas grandes pré-atribuídas como um tipo de recurso, semelhante à CPU ou à memória.
Para usar páginas enormes, aplicam-se as seguintes limitações e requisitos:
- Para garantir que o nó não está totalmente ocupado por páginas grandes, o tamanho geral das páginas grandes atribuídas não pode exceder nenhuma das seguintes opções:
- Em máquinas com menos de 30 GB de memória: 60% da memória total. Por exemplo, numa máquina e2-standard-2 com 8 GB de memória, não pode alocar mais de 4,8 GB para páginas grandes.
- Em máquinas com mais de 30 GB de memória: 80% da memória total. Por exemplo, em máquinas c4a-standard-8 com 32 GB de memória, as páginas enormes não podem exceder 25,6 GB.
- As páginas enormes de 1 GB só estão disponíveis nos tipos de máquinas A3, C2D, C3, C3D, C4, C4A, C4D, CT5E, CT5LP, CT6E, H3, M2, M3, M4 ou Z3.
A tabela seguinte descreve as definições modificáveis para páginas grandes do Linux.
| Parâmetro de configuração | Restrições | Valor predefinido | Descrição |
|---|---|---|---|
hugepage_size2m |
Contagem de números inteiros. Sujeito aos limites de atribuição de memória descritos anteriormente. | 0 |
Esta definição pré-atribui um número específico de páginas enormes de 2 MB. |
hugepage_size1g |
Contagem de números inteiros. Sujeito a ambas as limitações de memória e tipo de máquina descritas anteriormente. | 0 |
Esta definição pré-atribui um número específico de páginas enormes de 1 GB. |
Páginas enormes transparentes (THP)
Pode usar um ficheiro de configuração do sistema de nós para ativar o suporte de páginas enormes transparentes do kernel do Linux. Com o THP, o kernel atribui automaticamente páginas enormes a processos sem pré-atribuição manual.
A tabela seguinte descreve os parâmetros modificáveis para o THP.
| Parâmetro de configuração | Valores suportados | Valor predefinido | Descrição |
|---|---|---|---|
transparentHugepageEnabled |
|
UNSPECIFIED |
Esta definição controla se o THP está ativado para memória anónima. |
transparentHugepageDefrag |
|
UNSPECIFIED |
Esta definição define a configuração de desfragmentação para THP. |
O THP está disponível na versão 1.33.2-gke.4655000 ou posterior do GKE. Também está ativado por predefinição em novos pools de nós de TPU na versão 1.33.2-gke.4655000 ou posterior do GKE. O THP não está ativado quando atualiza os conjuntos de nós existentes para uma versão suportada ou posterior.