Řešením, které nezahrnuje úpravu systémových jednotek nebo zásuvných modulů, by bylo vytvořit (nebo upravit) soubor /etc/docker/daemon.json
konfigurační soubor a zahrnout následující:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
Po uložení restartujte službu dockeru.
sudo systemctl restart docker
Toto řešení je samozřejmě proveditelné pouze v případě, že byste jej chtěli použít v celém systému.
Protože mám dva konfigurační soubory, musím také přidat položku do druhého konfiguračního souboru -- /etc/systemd/system/docker.service.d/docker-thinpool.conf
:
--exec-opt native.cgroupdriver=systemd \
Jen pro doplnění, cgroupfs je správce vlastní řídicí skupiny dockerů. Nicméně pro většinu linuxových distribucí je nyní ssytemd výchozím iniciačním systémem a systemd má úzkou integraci s ovládacími skupinami Linuxu a na webu Kubernetes doporučují používat systemd (viz níže), protože použití cgroupfs spolu s systemd se zdá být neoptimální
Takže je lepší použít systemd než pro správu cgroup. kubelet je ve výchozím nastavení nakonfigurován pro použití systemd. Je tedy jednodušší a lepší změnit Docker tak, aby používal ovladač systemd Cgroup
Historie tohoto překrývání je zde https://lwn.net/Articles/676831/
Na webu Kubernetes doporučují používat systemd https://kubernetes.io/docs/setup/production-environment/container-runtimes/
Ovladače Cgroup Když je systemd vybrán jako init systém pro linuxovou distribuci, proces init generuje a využívá kořenovou řídicí skupinu (cgroup) a funguje jako správce cgroup. Systemd má úzkou integraci s cgroups a bude alokovat cgroups pro proces. Je možné nakonfigurovat běhový modul kontejneru a kubelet na usecgroupfs. Použití cgroupfs vedle systemd znamená, že pak budou existovat dva různí správci cgroup.
Kontrolní skupiny se používají k omezení zdrojů, které jsou přiděleny procesům. Jediný správce cgroup zjednoduší pohled na to, jaké zdroje jsou přidělovány, a ve výchozím nastavení bude mít konzistentnější pohled na dostupné a používané zdroje. Když máme dva manažery, skončíme se dvěma pohledy na tyto zdroje. Viděli jsme případy v oboru, kdy se uzly, které jsou nakonfigurovány pro použití cgroupfs pro kubelet a Docker, a systemd pro zbytek procesů běžících na uzlu, stanou nestabilními pod tlakem zdrojů.