O cgroup v2 unifica o controle de recursos, melhora o gerenciamento de memória e garante compatibilidade com o Kubernetes.
Versões do cgroup
O kernel 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 com um modelo de controlador unificado. Como as interfaces do sistema de arquivos são incompatíveis, atualize as aplicações que acessam diretamente o cgroupfs.
Consulte Diferenças entre cgroup v1 e cgroup v2 .
O Kubernetes v 1.31 moveu o suporte ao cgroup v1 para 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 com eficiência. Isso resolve o problema do cgroup v1, no qual aplicações com alto I/O de disco preemptam memória e causam 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 das hierarquias paralelas do cgroup v1.
Observabilidade aprimorada de recursos: O Pressure Stall Information (PSI) mede o tempo de paralisação em CPU, memória ou I/O e fornece métricas detalhadas para análise de gargalos.
Verificar a versão do cgroup
Faça logon em um nó e execute o comando abaixo 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
O sistema operacional define a versão do cgroup de um nó.
-
Pools de nós ECS (incluindo EGS):
Altere o sistema operacional no nível do pool de nós. Os seguintes sistemas operacionais usam 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 e posteriores
RHEL 9 e posteriores
Ubuntu 22 e posteriores
-
Reinstale os nós e adicione-os novamente ao cluster:
-
Remova o nó: Remova um nó Lingjun do cluster ACK. Opcionalmente, execute a operação de Drain antes da remoção.
A drenagem de um nó exige outros nós com recursos suficientes para acomodar os Pods evacuados. Garanta que o cluster tenha capacidade adequada.
Reinstale o SO: No console Lingjun, reinstale o nó com uma imagem de SO habilitada para cgroup v2.
Adicione novamente ao cluster: Adicione o nó Lingjun de volta ao cluster ACK.
-
-
Você gerencia o SO. Atualize para um SO compatível com cgroup v2 para evitar falhas durante atualizações ou ao readicionar nós.
Nível da aplicação: Garantir compatibilidade das cargas de trabalho
Os sistemas de arquivos e nomes de parâmetros do cgroup v1 e v2 são incompatíveis. Verifique ou atualize para o cgroup v2 qualquer aplicação que leia diretamente /sys/fs/cgroup.
|
Categoria |
Descrição |
|
Aplicações Java |
|
|
Aplicações Go |
Se utilizar uber-go/automaxprocs, atualize para a versão v1.5.1 ou superior. |
|
cAdvisor |
Caso implante 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 à interpretação incorreta de núcleos de CPU no cgroup v2. Atualize para v1.11.2 ou superior. Consulte GitHub Issue #9665. Para atualizar o Nginx Ingress Controller do ACK, consulte Atualizar o componente Nginx Ingress Controller. |
Outras aplicações 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 a cgroup v2.
Ferramentas de segurança e auditoria: Soluções como Falco e Sysdig utilizam dados do cgroup para atribuir eventos. Versões desatualizadas podem resultar em falhas nas regras de detecção ou falsos positivos. Atualize para uma versão compatível e valide as regras em ambiente de teste.
Scripts personalizados e aplicações sensíveis a desempenho: Scripts de inicialização que leem arquivos do cgroup para ajuste automático (como definir a quantidade 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 aplicações
Verifique se suas aplicações 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 SO redefine o nó. Utilize os recursos do pool de nós para persistir modificações personalizadas. Tópicos relacionados:
Monitoramento e alertas: Ative o monitoramento Alibaba Cloud Prometheus para observar a integridade do cluster e o uso de recursos dos contêineres, permitindo a detecção rápida de anomalias.