Una soluzione che non comporta la modifica di unità di sistema o drop-in sarebbe quella di creare (o modificare) il /etc/docker/daemon.json
file di configurazione e includere quanto segue:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
Dopo averlo salvato, riavvia il servizio docker.
sudo systemctl restart docker
Questa soluzione ovviamente è fattibile solo se si desidera applicare questo a livello di sistema.
Poiché ho due file di configurazione, devo aggiungere anche la voce nel secondo file di configurazione -- /etc/systemd/system/docker.service.d/docker-thinpool.conf
:
--exec-opt native.cgroupdriver=systemd \
Solo per aggiungere, cgroupfs è il gestore del gruppo di controllo dei docker. Tuttavia, per la maggior parte delle distribuzioni Linux ssytemd è ora il sistema init predefinito e systemd ha una stretta integrazione con i gruppi di controllo Linux e nel sito Kubernetes, consigliano di utilizzare systemd (vedi sotto) poiché l'utilizzo di cgroupfs insieme a systemd sembra non essere ottimale
Quindi è meglio usare systemd quindi per la gestione di cgroup. kubelet è configurato per impostazione predefinita per utilizzare systemd. Quindi è più facile e migliore modificare Docker per utilizzare il driver systemd Cgroup
Una storia di questa sovrapposizione è qui https://lwn.net/Articles/676831/
Nel sito Kubernetes, consigliano di utilizzare systemd https://kubernetes.io/docs/setup/production-environment/container-runtimes/
Driver di cgroup Quando systemd viene scelto come sistema init per una distribuzione Linux, il processo init genera e consuma un controlgroup root (cgroup) e agisce come gestore di cgroup. Systemd ha una stretta integrazione con i cgroup e allocherà i cgroup per processo. È possibile configurare il runtime del contenitore e il kubelet su usecgroupfs. L'uso di cgroupfs accanto a systemd significa che ci saranno quindi due diversi gestori di cgroup.
I gruppi di controllo vengono utilizzati per vincolare le risorse allocate ai processi. Un singolo gestore di cgroup semplificherà la visualizzazione di quali risorse vengono allocate e per impostazione predefinita avrà una visualizzazione più coerente delle risorse disponibili e in uso. Quando abbiamo due manager, ci ritroviamo con due visioni di quelle risorse. Abbiamo visto casi nel campo in cui i nodi configurati per utilizzare cgroupfs per kubelet e Docker e systemd per il resto dei processi in esecuzione sul nodo diventano instabili a causa della pressione delle risorse.