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.
Vista geral
Pode personalizar a configuração do nó através de vários métodos. Por exemplo, pode especificar parâmetros como o tipo de máquina e a plataforma de CPU mínima quando cria um conjunto 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. 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 configurações do kernel do Linux de baixo nível (sysctl
) nos seus node pools.
Também pode personalizar o tempo de execução do contentor do containerd nos nós do GKE usando um ficheiro diferente denominado ficheiro de configuração do tempo de execução. Para ver instruções, consulte o artigo Personalize a configuração do containerd em nós do GKE.
Também pode usar DaemonSets para personalizar nós, como em Inicializar automaticamente nós do GKE com DaemonSets.
Usar uma configuração do sistema de nós
Pode personalizar a configuração do sistema de nós através de qualquer um dos seguintes métodos:
- Ficheiro de configuração: disponível no modo padrão. Usa um ficheiro YAML que contém os parâmetros de configuração do kubelet e do kernel do Linux. Os passos nesta página mostram como criar e usar um ficheiro de configuração.
- ComputeClass: disponível no modo Autopilot e no modo padrão. Especifica a configuração do sistema de nós na especificação ComputeClass do GKE. As classes de computação permitem-lhe definir conjuntos de atributos de nós para o GKE usar quando dimensiona o cluster. Disponível na versão 1.32.1-gke.1729000 e posteriores do GKE. Para obter detalhes, consulte o artigo Acerca das classes de computação no GKE.
Para usar um ficheiro de configuração do sistema de nós, faça o seguinte:
- Crie um ficheiro de configuração. Este ficheiro contém as suas configurações do
kubelet
e dosysctl
. - Adicione a configuração quando criar um cluster ou quando criar ou atualizar um conjunto de nós.
Criar um ficheiro de configuração
Escreva o ficheiro de configuração do sistema de nós em YAML. O exemplo seguinte mostra como adicionar 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:
cpuManagerPolicy: static
configura okubelet
para usar a política de gestão de CPU estática.- O
net.core.somaxconn: '2048'
limita a fila de tarefas pendentes dosocket listen()
a 2048 bytes. net.ipv4.tcp_rmem: '4096 87380 6291456'
define o valor mínimo, predefinido e máximo do buffer 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 no ficheiro de configuração. Por exemplo, para adicionar uma configuração, crie o seguinte ficheiro:kubelet
kubeletConfig:
cpuManagerPolicy: static
Para ver uma lista completa dos campos que pode adicionar ao ficheiro de configuração, consulte as secções Opções de configuração do Kubelet e Opções de configuração do Sysctl.
Adicionar a configuração a um conjunto de nós
Depois de criar o ficheiro de configuração, adicione a flag
--system-config-from-file
com a Google Cloud CLI. 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 com a 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 com a CLI gcloud ou o Terraform. As instruções seguintes aplicam a configuração do sistema de nós 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 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 dekubelet
esysctl
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 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. Também pode atualizar a configuração do sistema de nós de um node pool existente.
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
``` Replace the following:
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 dekubelet
esysctl
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 apoio técnico do Terraform para o GKE.
Atualize a configuração do sistema de nós de um node pool existente
Execute 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 dekubelet
esysctl
Esta alteração requer a recriação dos nós, o que pode causar interrupções nas cargas de trabalho em execução. Para ver detalhes 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.
Editar 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.
Edição através da criação de um node pool
Para editar a configuração do sistema de um nó através da criação de um node pool:
- 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.
Editar através da atualização de 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. A atualização de uma configuração do sistema de nós substitui a configuração do sistema do node pool pela nova configuração, o que requer a recriação dos nós. Se omitir parâmetros durante uma atualização, estes são definidos para os respetivos valores predefinidos.
Se quiser repor a configuração do sistema de nós para os valores predefinidos, atualize o ficheiro de configuração com valores vazios para kubelet
e sysctl
. Por
exemplo:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Eliminar uma configuração do sistema de nós
Para remover uma configuração do sistema de nós:
- 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 do Kubelet
A tabela seguinte mostra as opções de kubelet
que pode modificar.
Definições de configuração do Kubelet | Restrições | Predefinição | Descrição |
---|---|---|---|
allowedUnsafeSysctls |
Lista de sysctl nomes ou grupos. Grupos sysctl
permitidos: kernel.shm* , kernel.msg* ,
kernel.sem , fs.mqueue.* e net.* .
Exemplo: [kernel.msg*, net.ipv4.route.min_pmtu] .
|
none
|
Esta definição define uma lista de autorizações separada por vírgulas de nomes ou grupos sysctl sysctl não seguros, que podem ser definidos nos pods.
Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE. |
containerLogMaxSize |
O valor tem de ser um número positivo e um sufixo de unidade entre
10Mi e 500Mi , inclusive. As unidades válidas são
Ki, Mi, Gi .
|
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 . |
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ó. |
cpuCFSQuota |
O valor 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 da CPU para os pods são ignorados.Ignorar os limites da CPU pode ser desejável em determinados cenários em que os pods são sensíveis aos limites da CPU. O risco de desativar cpuCFSQuota é que um Pod não autorizado pode consumir mais recursos da CPU do que o pretendido.
|
cpuCFSQuotaPeriod | O valor 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. |
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. Utilização mais baixa do disco para recolher lixo. A percentagem é calculada dividindo o valor deste campo por 100. Quando especificado, o valor tem de ser inferior a imageGcHighThresholdPercent . |
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. A utilização de disco mais elevada para a qual a recolha de lixo deve ser feita. A percentagem é calculada dividindo o valor deste campo por 100. Quando especificado, o valor tem de ser superior a imageGcLowThresholdPercent . |
imageMinimumGcAge |
O valor tem de ser uma duração não superior a "2 m". As unidades de tempo válidas
são "ns", "us" (or "µs"), "ms", "s", "m", "h"
|
2m
|
imageMinimumGcAge é a idade mínima de uma imagem não usada antes de ser eliminada. |
imageMaximumGcAge | O valor tem de ser uma duração |
0s
|
imageMaximumGcAge é a idade máxima que uma imagem pode ter sem ser usada antes de ser recolhida como lixo. A predefinição deste campo é "0s", o que desativa este campo. Isto significa que as imagens não são eliminadas com base no facto de não serem usadas durante demasiado tempo. Quando especificado, o valor tem de ser superior a imageMinimumGcAge .
Disponível nas versões 1.30.7-gke.1076000, 1.31.3-gke.1023000 ou posteriores do GKE. |
insecureKubeletReadonlyPortEnabled |
O valor tem de ser um valor booleano (true ou false ) |
true |
Esta definição desativa a porta de leitura do kubelet não segura 10255
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. |
podPidsLimit | O valor tem de estar compreendido entre 1024 e 4194304 |
none
|
Esta definição define o número máximo de IDs de processos (PIDs) que cada Pod pode usar. |
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: 3 : pd-balanced , pd-ssd ,
ou existe um SSD local efémero.2 : pd-standard ou outros tipos de disco de arranque.Disponível nas versões 1.33.1-gke.1918000 ou posteriores do GKE. |
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 quantidades ou percentagens que definem os limites de remoção temporária. Um limite de remoção temporária tem de ter um período de tolerância. O kubelet não despeja pods até o período de tolerância ser excedido. |
evictionSoftGracePeriod |
Mapeamento de nomes de sinais, que tem as mesmas opções que evictionSoft com restrições diferentes. Para cada nome de sinal, o valor tem de ser uma duração positiva inferior a 5m , por exemplo, 30s ou 1m . As unidades de tempo válidas
são "ns" , "us" (ou "µs" ), "ms" , "s" , "m" ou "h" .
|
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 |
Mapeamento de nomes de sinais, que tem as mesmas opções que evictionSoft com restrições diferentes. Para cada nome de sinal, o valor tem de ser uma percentagem positiva inferior a 10% . Por exemplo, 5% .
|
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 para a flag evictionSoft
que pode modificar. As mesmas opções também se aplicam às flags evictionSoftGracePeriod
e evictionMinimumReclaim
com restrições diferentes.
Definições de configuração do Kubelet | 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ó. Por exemplo, 100Mi , 1Gi .
|
none
|
Representa a quantidade de memória disponível antes da remoção temporária. Define a quantidade de sinal memory.available no kubelet. |
nodefsAvailable |
O valor tem de estar entre 10% e 50% .
|
none
|
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
|
Representa os inodos nodefs que estão livres antes da remoção suave. Define a quantidade do sinal nodefs.inodesFree no kubelet. |
imagefsAvailable |
O valor tem de estar entre 15% e 50% .
|
none
|
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
|
Representa os inodos do 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
|
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. |
Gestores de recursos
O Kubernetes oferece um conjunto de gestores de recursos. Pode configurar estes ResourceManagers para coordenar e otimizar o alinhamento dos recursos de nós para pods configurados com requisitos específicos para recursos de CPUs, dispositivos e memória (páginas grandes). Para mais informações, consulte o artigo Gestores de recursos de nós.
Com o GKE, pode configurar as seguintes definições para estes Resource Managers. Pode configurar estas definições de forma independente. No entanto, recomendamos que as use em conjunto para alinhar a gestão de recursos. Pode usar as definições do Topology Manager juntamente com as definições do CPU Manager e do Memory Manager para alinhar a CPU e a memória com outros recursos pedidos na especificação do pod.
Definições de configuração do Kubelet | Restrições | Predefinição | Descrição |
---|---|---|---|
cpuManagerPolicy: |
O valor tem de ser none ou static
|
none
|
Esta definição controla a política do gestor de CPU do kubelet. 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 , permite que os pods que estão na classe de QoS Guaranteed e têm pedidos de CPU inteiros sejam atribuídos a CPUs exclusivas. |
memoryManager: policy: |
O valor tem de ser None ou Static |
None |
Esta definição controla a política do gestor de memória do kubelet. Com o valor predefinido de 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: policy: scope: |
O valor tem de ser uma das definições suportadas para cada um dos respetivos campos |
|
Estas definições controlam a política do gestor de topologia do kubelet, que coordena o conjunto de componentes responsáveis pelas otimizações de desempenho relacionadas com o isolamento da CPU, a memória e a localidade do dispositivo. Pode definir as definições de política e âmbito independentemente umas das outras. 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:
|
O exemplo seguinte mostra uma configuração do sistema de nós em que todas as três políticas do Resource Manager estão configuradas:
cpuManagerPolicy: static
memoryManager:
policy: Static
topologyManager:
policy: best-effort
scope: pod
Opções de configuração do Sysctl
Para otimizar o desempenho do seu sistema, pode modificar os seguintes atributos do kernel:
kernel.shmmni
kernel.shmmax
kernel.shmall
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.rmem_default
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv4.tcp_max_orphans
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
net.netfilter.nf_conntrack_acct
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.net.netfilter.nf_conntrack_max
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.net.netfilter.nf_conntrack_buckets
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.net.netfilter.nf_conntrack_tcp_timeout_close_wait
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.net.netfilter.nf_conntrack_tcp_timeout_established
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.net.netfilter.nf_conntrack_tcp_timeout_time_wait
– Disponível nas versões 1.32.0-gke.1448000 ou posteriores do GKE.fs.aio-max-nr
fs.file-max
fs.inotify.max_user_instances
fs.inotify.max_user_watches
fs.nr_open
vm.max_map_count
vm.dirty_background_ratio
vm.dirty_expire_centisecs
vm.dirty_ratio
vm.dirty_writeback_centisecs
vm.overcommit_memory
vm.overcommit_ratio
vm.vfs_cache_pressure
vm.swappiness
vm.watermark_scale_factor
vm.min_free_kbytes
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 do Linux podem ter valores únicos para um determinado sysctl
, enquanto outros são globais para todo o nó. A atualização das opções sysctl
através de uma configuração do sistema de nós garante que o sysctl
é aplicado globalmente no nó e em cada espaço de nomes, o que resulta em cada Pod com valores sysctl
idênticos em cada espaço de nomes do Linux.
Opções de configuração do modo cgroup do Linux
O kubelet e o tempo de execução do contentor 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 detalhes, 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 versões anteriores à 1.26. Para os node pools criados com o aprovisionamento automático de nós, a configuração do cgroup depende da versão inicial do cluster e não da versão do node pool. 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. Apenas a atualização de um pool de nós existente para a versão 1.26 não altera a definição para cgroupv2
, uma vez que os pools de nós existentes criados com uma versão anterior à 1.26, sem uma configuração de cgroup personalizada, continuam a usar cgroupv1
, a menos que especifique explicitamente o contrário.
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:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
As opções cgroupMode
compatíveis são:
CGROUP_MODE_V1
: usecgroupv1
no node pool.CGROUP_MODE_V2
: usecgroupv2
no node pool.CGROUP_MODE_UNSPECIFIED
: use a configuração do grupo de controlo 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 mais recente da CLI gcloud. Em alternativa, use o gcloud beta com a versão 395.0.0 ou mais recente.
- 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 o SO otimizado para contentores com o containerd ou o Ubuntu com a imagem do nó do 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
.- Certifique-se de que todas as ferramentas de monitorização ou de terceiros são compatíveis com o
cgroupv2
.
- Certifique-se de que todas as ferramentas de monitorização ou de terceiros são compatíveis com o
- Se usar o JDK (carga de trabalho Java), 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 terem sido recriados, pode validar a nova configuração.
Pode validar a configuração do cgroup para nós num conjunto de nós com a CLI gcloud ou a 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 usamcgroupv1
EFFECTIVE_CGROUP_MODE_V2
: os nós usamcgroupv2
A saída só mostra a nova configuração do cgroup depois de os nós no conjunto de nós terem sido recriados. A saída está vazia para pools de nós do servidor Windows, que não suportam cgroup.
kubectl
Para validar a configuração do cgroup para nós neste conjunto de nós com kubectl
,
escolha um nó e ligue-se a ele através das seguintes instruções:
- Crie um shell
interativo
com qualquer nó no node pool. Substitua
mynode
no comando pelo nome de qualquer nó no conjunto de nós. - Identifique a versão do cgroup nos nós do Linux.
Opções de configuração de páginas enormes do Linux
Pode usar o ficheiro de configuração do sistema de nós para usar a funcionalidade do kernel do Linux huge pages.
O Kubernetes suporta páginas grandes em nós como um tipo de recurso, semelhante à CPU ou à memória. Use os seguintes parâmetros para instruir os seus nós do Kubernetes a pré-atribuírem páginas grandes para consumo por parte dos pods. Para gerir o consumo de páginas grandes dos pods, consulte o artigo Gerir páginas grandes.
Para pré-atribuir páginas enormes aos seus nós, especifique as quantidades e os tamanhos. Por exemplo, para configurar os seus nós para alocar três páginas enormes de 1 gigabyte e 1024 páginas enormes de 2 megabytes, use uma configuração do sistema de nós, como a seguinte:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
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 enormes, o tamanho geral das páginas enormes atribuídas não pode exceder 60% da memória total em máquinas com menos de 30 GB de memória e 80% em máquinas com mais de 30 GB de memória. 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 enormes. E no 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.
Suporte de páginas enormes transparentes
Pode usar o ficheiro de configuração do sistema de nós para ativar a funcionalidade do kernel do Linux Suporte de páginas enormes transparentes. O suporte de páginas enormes transparentes (THP) é uma solução alternativa à página enorme estática. Com o THP, o kernel atribui automaticamente páginas grandes aos processos, pelo que não é necessário reservar páginas grandes manualmente. Os seguintes campos são suportados:
linuxConfig:
transparentHugepageEnabled: TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS
transparentHugepageDefrag: TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS
transparentHugepageEnabled
controla o suporte de páginas enormes transparentes para memória anónima. Os valores suportados são os seguintes:TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS
: a página enorme transparente está ativada em todo o sistema.TRANSPARENT_HUGEPAGE_ENABLED_MADVISE
: a página enorme transparente está ativada nas regiões MADV_HUGEPAGE. Esta é a configuração predefinida do kernel.TRANSPARENT_HUGEPAGE_ENABLED_NEVER
: a página enorme transparente está desativada.TRANSPARENT_HUGEPAGE_ENABLED_UNSPECIFIED
: valor predefinido. O GKE não modifica a configuração do kernel.
transparentHugepageDefrag
define a configuração de desfragmentação de páginas enormes transparentes no nó. Os valores suportados são os seguintes:TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS
: Uma aplicação que pede THP é bloqueada em caso de falha na atribuição e reclama diretamente páginas e compacta a memória para tentar atribuir um THP imediatamente.TRANSPARENT_HUGEPAGE_DEFRAG_DEFER
: Uma aplicação ativa o kswapd em segundo plano para reclamar páginas e ativa o kcompactd para compactar a memória, de modo que o THP esteja disponível num futuro próximo. É da responsabilidade do khugepaged instalar as páginas THP mais tarde.TRANSPARENT_HUGEPAGE_DEFRAG_DEFER_WITH_MADVISE
: Uma aplicação entra na recuperação direta e na compactação como sempre, mas apenas para regiões que usarammadvise(MADV_HUGEPAGE)
; todas as outras regiões ativam o kswapd em segundo plano para recuperar páginas e ativam o kcompactd para compactar a memória, de modo que a THP esteja disponível num futuro próximo.TRANSPARENT_HUGEPAGE_DEFRAG_MADVISE
: Uma aplicação entra na recuperação direta e na compactação como sempre, mas apenas para regiões que tenham usadomadvise(MADV_HUGEPAGE)
; todas as outras regiões ativam o kswapd em segundo plano para recuperar páginas e ativam o kcompactd para compactar a memória, de modo que a THP esteja disponível num futuro próximo.TRANSPARENT_HUGEPAGE_DEFRAG_NEVER
: uma aplicação nunca entra na recuperação direta nem na compactação.TRANSPARENT_HUGEPAGE_DEFRAG_UNSPECIFIED
: valor predefinido. O GKE não modifica a configuração do kernel.
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.