Kind su Docker Rootless non funziona su openSUSE Leap: analisi e soluzione definitiva
Kind su Docker Rootless non funziona su openSUSE Leap

Analisi completa del problema “Delegate=yes” e soluzione definitiva
In questo articolo analizzo una casistica reale su openSUSE Leap dove kind fallisce durante la creazione di un cluster Kubernetes usando Docker rootless, mostrando il noto errore:
ERROR: failed to create cluster: running kind with rootless provider requires setting systemd property "Delegate=yes"
Il messaggio sembra indicare che Delegate=yes non sia configurato, ma in realtà si tratta di qualcosa di più profondo: la delega dei controller cgroup.
Vediamo passo per passo come sono arrivato alla diagnosi corretta e alla soluzione definitiva.
Contesto
- Distribuzione: openSUSE Leap (ultima release disponibile)
- Configurazione:
- Docker rootless abilitato
- cgroup v2 attivo
- kind installato via Go (
~/go/bin/kind)
- Variabili d’ambiente corrette:
XDG_RUNTIME_DIR=/run/user/1000
DOCKER_HOST=unix:///run/user/1000/docker.sockNonostante ciò, il cluster non veniva creato.
Primo controllo: cgroup v2
Kind in modalità rootless richiede cgroup v2:
docker info --format '{{.CgroupVersion}}'
Output:
2
Verifica di Delegate=yes in systemd
systemctl show "user@$(id -u).service" -p Delegate
Output:
Delegate=yes
Ma nonostante questo kind falliva ancora.
Analisi dei controller cgroup realmente delegati
Verifica:
cat /sys/fs/cgroup/user.slice/cgroup.controllers
Output:
cpuset cpu io memory pids
Poi:
cat /sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/cgroup.controllers
Output:
pids
E:
cat /sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/cgroup.subtree_control
Output:
pids
Qui emerge il problema reale: vengono delegati solo i pids, non cpu, memory, io, cpuset.
Kind richiede almeno cpu e memory per funzionare in rootless.
Se non li trova, mostra il messaggio fuorviante relativo a “Delegate=yes”.
Tentativo alternativo: esecuzione in scope dedicato
systemd-run --scope --user -p "Delegate=yes" kind create cluster
Fallimento identico → conferma del problema sui controller cgroup.
Soluzione definitiva: delega esplicita dei controller
sudo mkdir -p /etc/systemd/system/user@.service.d
cat << 'EOF' | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
EOF
sudo systemctl daemon-reload
sudo rebootDopo il riavvio:
systemctl show "user@$(id -u).service" -p Delegate
Output:
Delegate=cpu cpuset io memory pids
E soprattutto:
cat /sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/cgroup.controllers
Output corretto:
cpu cpuset io memory pids
Riavvio Docker rootless
systemctl --user restart docker
Kind funziona
kind create cluster
Cluster creato correttamente.
kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.34.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a nice day! 👋Conclusioni
Il messaggio:
requires setting systemd property "Delegate=yes"
appare anche quando Delegate è già impostato, perché kind controlla i controller realmente delegati.
openSUSE Leap delega solo pids di default, quindi occorre delegare esplicitamente:
Delegate=cpu cpuset io memory pids
per permettere a Docker rootless di eseguire i container necessari a kind.
Codice completo della soluzione
sudo mkdir -p /etc/systemd/system/user@.service.d
cat << 'EOF' | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
EOF
sudo systemctl daemon-reload
sudo reboot
Valerio's Cave