O que é o cgroupfs e como é usado com o Docker?

16

Na documentação do Docker, há uma discussão de opções para o execdriver nativo ( https://docs.docker.com/engine/reference/commandline/daemon/ ). A documentação diz

A opção native.cgroupdriver especifica o gerenciamento dos cgroups do contêiner. Você pode especificar cgroupfs ou systemd. Se você especificar systemd e ele não estiver disponível, o sistema utilizará o cgroupfs. Por padrão, se nenhuma opção for especificada, o execdriver primeiro tenta o systemd e volta ao cgroupfs. Este exemplo define o execdriver como cgroupfs:

Minha pergunta é o que é cgroupfse como ele se compara systemdnesse caso. Pesquisando informações sobre o Google cgroupfslevou a um tweet :

--exec-opt native.cgroupdriver = cgroupfs FTW. sério @docker, descartar o suporte para cgroups gerenciados pelo systemd, é um desastre

Mas espero que alguém possa fornecer mais detalhes sobre o que isso realmente faz, em vez de apenas dizer usar uma configuração diferente do padrão.

Gabriel Southern
fonte
Você percebe que tudo isso tem a ver com a alocação de recursos do sistema (CPU) para um contêiner, certo? O systemd possui integração de cgroup embutida. Cgroupfs é uma visão do sistema de arquivos da interface cgroup do kernel. Se é isso que você está procurando, eu responderei. Mas se você já sabe disso, eu teria que vasculhar o código.
Otheus
@Otheus Eu não coloquei a recompensa na pergunta, então não tenho certeza do que a pessoa que fez está interessada. A principal coisa que me motivou a fazer a pergunta foi o desejo de entender por que alguém recomendou o uso da opção --exec-opt native.cgroupdriver=cgroupfs. Mas suspeito que, se você escreveu uma resposta explicando a configuração que é mais fácil para um iniciante entender do que o que está na documentação do Docker, você receberia alguns votos positivos e isso também seria útil para as pessoas que encontrarem a pergunta do Google no futuro.
Gabriel Southern

Respostas:

1

Como posso ver no comentário em fontes em: vendor/src/github.com/opencontainers/runc/libcontainer/factory_linux.go

// Cgroupfs is an options func to configure a LinuxFactory to return
// containers that use the native cgroups filesystem implementation to
// create and manage cgroups.

cgroupfsparece ser a própria libcontainerimplementação do docker ( ), que configura os contêineres cgroupsgravando diretamente nos arquivos cgroups-file-system(por exemplo, montados /sys/fs/cgroup/).

Snorch
fonte