You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
É comum que uma role Ansible instale pacotes que utilizem unidades systemd para rodar. Como utilizamos o driver docker do molecule para testar as nossas roles, é preciso que o container utilizado como alvo seja capaz de rodar systemd, o que não é possível por padrão.
Até então, a forma como isso vinha sendo feito é utilizar uma imagem base pré-configurada com systemd e montar o caminho /sys/fs/cgroup do host dentro do container usando a seguite configuração do molecule:
Esse caminho é a raiz da hierarquia dos processos que estão rodando dentro dos cgroups, e isso funcionava anteriormente porque a maioria das ferramentas e distribuições Linux usavam a versão v1 do cgroups.
Mas, recentemente, essas ferramentas e distros passaram a migrar para utilizar a versão v2 de cgroups por padrão. Nessa nova versão, a hierarquia dos arquivos que descrevem os processos foi alterada para uma hierarquia unificada, de forma que apenas montar esse volume não é mais suportado.
O systemd passou a utilizar a hierarquia unificada como padrão a partir da versão 243. O Docker suporta cgroup v2 desde a versão 20.10.0 e o Docker Desktop começou a usar cgroup v2 como padrão na versão 4.3.0. Debian 11, Ubuntu 21.10, Fedora 31 e Arch Linux também já utilizam cgroup v2 por padrão.
Essas mudanças resultam em diversos problemas na hora de testar roles localmente, uma vez que cada máquina poderá utilizar versões diferentes dessas ferramentas.
Alternativas
Por enquanto não existe uma solução definitiva para o problema. A opção mais promissora para ser usar a flag --cgroupns host na criação do container, mas isso ainda não é suportado pelo molecule.
A melhor alternativa, por enquanto, é reverter configurações locais para utilizar a versão v1 do cgroups.
Linux
Adicionar a opção systemd.unified_cgroup_hierarchy=0 na configuração de boot do kernel.
Para sistemas Fedore/Centos/RHEL, é possível utilizar a ferramenta grubby:
Para sistemas Ubuntu/Debian esse valor pode ser definido na variável GRUB_CMDLINE_LINUX no arquivo /etc/default/grub e depois executando o comando sudo update-grub.
Reinicie o seu computador para aplicar a mudança.
Docker Desktop for Mac
Edite o arquivo ~/Library/Group\ Containers/group.com.docker/settings.json para habilitar a opção deprecatedCgroupv1:
{
..."deprecatedCgroupv1": true,
...
}
Reinicie o Docker Desktop.
The text was updated successfully, but these errors were encountered:
É comum que uma role Ansible instale pacotes que utilizem unidades
systemd
para rodar. Como utilizamos o driverdocker
domolecule
para testar as nossas roles, é preciso que o container utilizado como alvo seja capaz de rodarsystemd
, o que não é possível por padrão.Até então, a forma como isso vinha sendo feito é utilizar uma imagem base pré-configurada com
systemd
e montar o caminho/sys/fs/cgroup
do host dentro do container usando a seguite configuração do molecule:Esse caminho é a raiz da hierarquia dos processos que estão rodando dentro dos cgroups, e isso funcionava anteriormente porque a maioria das ferramentas e distribuições Linux usavam a versão v1 do cgroups.
Mas, recentemente, essas ferramentas e distros passaram a migrar para utilizar a versão v2 de cgroups por padrão. Nessa nova versão, a hierarquia dos arquivos que descrevem os processos foi alterada para uma hierarquia unificada, de forma que apenas montar esse volume não é mais suportado.
O systemd passou a utilizar a hierarquia unificada como padrão a partir da versão 243. O Docker suporta cgroup v2 desde a versão 20.10.0 e o Docker Desktop começou a usar cgroup v2 como padrão na versão 4.3.0. Debian 11, Ubuntu 21.10, Fedora 31 e Arch Linux também já utilizam cgroup v2 por padrão.
Essas mudanças resultam em diversos problemas na hora de testar roles localmente, uma vez que cada máquina poderá utilizar versões diferentes dessas ferramentas.
Alternativas
Por enquanto não existe uma solução definitiva para o problema. A opção mais promissora para ser usar a flag
--cgroupns host
na criação do container, mas isso ainda não é suportado pelomolecule
.A melhor alternativa, por enquanto, é reverter configurações locais para utilizar a versão v1 do cgroups.
Linux
Adicionar a opção
systemd.unified_cgroup_hierarchy=0
na configuração de boot do kernel.Para sistemas Fedore/Centos/RHEL, é possível utilizar a ferramenta
grubby
:$ sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
Para sistemas Ubuntu/Debian esse valor pode ser definido na variável
GRUB_CMDLINE_LINUX
no arquivo/etc/default/grub
e depois executando o comandosudo update-grub
.Reinicie o seu computador para aplicar a mudança.
Docker Desktop for Mac
Edite o arquivo
~/Library/Group\ Containers/group.com.docker/settings.json
para habilitar a opçãodeprecatedCgroupv1
:Reinicie o Docker Desktop.
The text was updated successfully, but these errors were encountered: