Ein Storage Pool ist in Incus ein Treiber und eine Quelle. Treiber gibt es mehrere: zfs, btrfs, lvm, ceph, dir. dir ist der langweiligste davon, ein Verzeichnis. Und ein Verzeichnis darf auch ein tmpfs-Mount sein.
mount -t tmpfs -o size=32g none /mnt/tmpfs
incus storage create tmpfs dir source=/mnt/tmpfs
Ab hier landet jede Instanz, die auf diesem Pool startet, im Arbeitsspeicher.
Erstellen
incus launch images:debian/trixie runner --storage tmpfs
Sichern
incus publish macht aus der Instanz ein Image. Läuft sie noch, verlangt Incus --force — sie wird kurz gestoppt und danach automatisch neu gestartet. Die Aliasse rotieren die Generationen:
incus publish runner --alias runner-current --compression none --reuse --force
incus image delete runner-old || true
incus image alias rename runner runner-old || true
incus image alias rename runner-current runner
runner ist danach der letzte saubere Stand, runner-old der davor.
Auf dir gibt es keine echten Snapshots — publish kopiert das rootfs per rsync, bevor daraus das Image wird. Auf tmpfs heißt das: für die Dauer des Publish braucht der Container etwa das Doppelte seiner Größe an RAM.
Wiederherstellen
Instanz weg, Image da — ein Befehl:
incus launch runner runner --storage tmpfs
Auf den Stand davor:
incus launch runner-old runner --storage tmpfs
Löschen
incus delete --force runner
Am Stück
❯ incus launch docker.io:library/alpine:edge runner -s tmpfs
Launching runner
~
❯ incus publish runner --alias runner
Error: The instance is currently running. Use --force to have it stopped and restarted
~
❯ incus publish runner --alias runner --force
Instance published with fingerprint: e5337dc9f3751419f4720f64397e528801d53e57cb0ab5fd5769f84d6c8a6183
~
❯ incus rm -f runner
~
❯ incus launch runner runner
Launching runner
~
❯ incus console --show-log runner
/ #
Nur die Datenbank, wenn man will
Man muss nicht die ganze Instanz auf tmpfs stellen. Ein Volume auf dem Pool lässt sich als Device an eine einzelne Instanz hängen:
incus storage volume create tmpfs runner-db
incus config device add runner incusdb disk \
pool=tmpfs source=runner-db path=/var/lib/incus/database
Das rootfs bleibt, wo es war, nur dqlite landet im RAM — der wahrscheinlich eigentliche Engpass eines Incus-Daemons.
In der Praxis
So sichere ich den Runner für die CI von incus-compose. Aus 23 Minuten CI wurden 8.
Von René Jochum - LLM Assistiert. Lizenz: CC-BY-4.0.
