O cgroup v2 unifica o controle de recursos, melhora o gerenciamento de memória e garante a compatibilidade com o Kubernetes.
Versões do cgroup
O kernel do Linux oferece o cgroup v1 e o cgroup v2 para limitar, contabilizar e isolar recursos físicos (como CPU, memória e I/O) de grupos de processos. O cgroup v2 resolve os problemas de múltiplas hierarquias da versão v1 por meio de um modelo de controlador unificado. As interfaces do sistema de arquivos são incompatíveis, portanto, os aplicativos que acessam diretamente o cgroupfs precisam ser atualizados.
Consulte Differences between cgroup v1 and cgroup v2 .
O Kubernetes v 1.31 colocou o suporte ao cgroup v1 em modo de manutenção, e a versão v 1.35 removeu esse suporte completamente. Principais vantagens do cgroup v2:
Maior estabilidade: A contabilização unificada de memória gerencia o cache de páginas de forma eficaz. Isso resolve um problema do cgroup v1, no qual aplicativos com alto I/O de disco preemptavam a memória e causavam eventos OOMKilled.
Hierarquia unificada: Todos os controladores de recursos (como CPU e memória) compartilham uma única hierarquia, o que elimina conflitos de configuração causados pelas hierarquias paralelas do cgroup v1.
Observabilidade de recursos aprimorada: O Pressure Stall Information (PSI) mede o tempo de paralisação em CPU, memória ou I/O, fornecendo métricas detalhadas para a análise de gargalos.
Verificar a versão do cgroup
Log on to a node e execute o seguinte comando para verificar a versão do cgroup.
# Run this command after logging on to the target node
stat -fc %T /sys/fs/cgroup/
# Expected output:
# cgroup2fs --> Indicates cgroup v2
# tmpfs --> Indicates cgroup v1
Procedimento de migração
Nível do nó: Alterar o sistema operacional
A versão do cgroup de um nó é determinada pelo seu sistema operacional.
-
ECS (including EGS) node pools:
Change the operating system no nível do pool de nós. Os seguintes operating systems usam o cgroup v2 por padrão:
Alibaba Cloud Linux 3.2104 LTS 64-bit container-optimized
Alibaba Cloud Linux 4 LTS 64-bit container-optimized
ContainerOS 3.3 ou superior
RHEL 9 ou superior
Ubuntu 22 ou superior
-
Reinstale os nós e adicione-os novamente ao cluster:
-
Remova o nó: Remove a Lingjun node do cluster ACK. Opcionalmente, execute uma Drain antes da remoção.
A drenagem de um nó exige que outros nós tenham recursos suficientes para acomodar os Pods evacuados. Certifique-se de que o cluster tenha capacidade adequada.
Reinstale o sistema operacional: Na Lingjun console, reinstall the node com uma imagem de sistema operacional compatível com o cgroup v2.
Adicione novamente ao cluster: Add the Lingjun node de volta ao cluster ACK.
-
-
Gerencie o sistema operacional. Atualize para um sistema operacional compatível com o cgroup v2 e evite falhas ao atualizar ou readicionar nós.
Nível do aplicativo: Garantir a compatibilidade da carga de trabalho
O cgroup v1 e o v2 possuem estruturas de sistema de arquivos e nomes de parâmetros incompatíveis. Qualquer aplicativo que leia diretamente o /sys/fs/cgroup deve ser verificado ou atualizado para o cgroup v2.
|
Categoria |
Descrição |
|
Aplicativos Java |
|
|
Aplicativos Go |
Se você usar o uber-go/automaxprocs, atualize para a versão v1.5.1 ou superior. |
|
cAdvisor |
Se você implantar o cAdvisor como um DaemonSet independente, atualize para a versão v0.43.0 ou superior. |
|
Nginx Ingress |
Versões mais antigas podem gerar erros OOMKilled devido à análise incorreta de núcleos de CPU no cgroup v2. Atualize para a versão v1.11.2 ou superior. Consulte a Issue #9665 no GitHub. Para atualizar o Nginx Ingress Controller do ACK, consulte Upgrade the Nginx Ingress Controller component. |
Outros aplicativos e componentes
Agentes de monitoramento e APM de terceiros: Ferramentas como Prometheus Node Exporter, Datadog Agent e SkyWalking leem o cgroupfs para obter métricas. Versões incompatíveis podem causar perda de dados ou anomalias. Atualize para uma versão com suporte ao cgroup v2.
Ferramentas de segurança e auditoria: Soluções como Falco e Sysdig utilizam dados do cgroup para atribuir eventos. Versões incompatíveis podem causar falhas nas regras de detecção ou gerar falsos positivos. Atualize para uma versão compatível e verifique as regras em um ambiente de teste.
Aplicativos sensíveis a desempenho e scripts personalizados: Scripts de inicialização que leem arquivos do cgroup para ajuste automático (como definir a contagem de threads com base na cota de CPU) falharão no cgroup v2 devido a alterações nos caminhos. Revise e atualize esses scripts para o cgroup v2.
Recomendações para produção
-
Compatibilidade de aplicativos
Verifique se os seus aplicativos e scripts não dependem de arquivos do cgroup v1, como
cpu.cfs_quota_us, pois o cgroup v2 utiliza interfaces incompatíveis. -
Configurações personalizadas de nós
A alteração do sistema operacional redefine o nó. Utilize os recursos do pool de nós para persistir modificações personalizadas. Tópicos relacionados:
Monitoramento e alertas: Ative o Alibaba Cloud Prometheus monitoring para observar a integridade do cluster e o uso de recursos dos contêineres, permitindo a detecção rápida de anomalias.