Backup für LXD-Container
By zefanja
[LXD][1] ist ein Hypervisor für Linuxcontainer, den es seit einigen Versionen in Ubuntu gibt. Ein Linuxcontainer ist im Prinzip wie eine virtuelle Maschine, nur leichtgewichtiger. Wir verwenden LXD / LXC für viele unserer Anwendungen an der Schule. LXD lässt sich leicht bedienen und es gibt so [einige Gründe][2], warum wir es verwenden. Heute möchte ich zeigen, wie man das Backup für LXD-Container machen kann.
1. Möglichkeit: lxc copy
Die einfachste Möglichkeit besteht darin, das man einen LXD-Container einfach auf einen anderen Rechner kopiert. Dazu braucht man einen zweiten LXD-Host, den man auf dem ersten als Remote hinzufügt.
$ sudo lxc remote add lxd2 192.168.1.50
lxd2 ist dabei der Name, den man dem zweiten LXD-Host geben wollen, gefolgt von der IP. Beim Setup des zweiten LXD-Hosts muss man darauf achten, dass er über das Netzwerk erreichbar ist und man muss auch ein Admin-Passwort vergeben. Dieses Passwort muss man eingeben, wenn man die Remote hinzufügen will.
Ist alles eingerichtet kann man sich z.B. alle Container auf der Remote anzeigen lassen:
$ lxc list lxd2:
Um nun ein Backup eines Containers zu machen, kopiert man ihn bzw. einen Snapshot auf die eben hinzugefügte Remote:
$ lxc snapshot my-container my-snapshot
$ lxc copy my-container/my-snapshot lxd2:my-backup
In umgekehrter Weise kann man den Container wieder auf dem ursprünglichen Host wiederherstellen.
$ lxc copy lxd2:my-backup my-container-restored
2. Möglichkeit: lxc export und lxc publish
Mit LXD kann man auch einen Container als komprimiertes Image exportieren und dann auf einem NAS, einem Offsite-Backup oder einem Cloud-Speicher sichern. Später können diese Images dann mit lxc import
wieder importiert bzw. wiederherstellt werden.
Auf [Github habe ich ein Skript gefunden][3], welches genau unsere Anforderungen erfüllt. Es exportiert den gewünschten Container und sichert ihn dann mit rclone
(tolles Projekt!!!) auf einen Cloud-Speicher/NAS unserer Wahl.
Dazu muss man sich erst noch rclone
installieren und einrichten. Ein Anleitung für die Installation und Pakete für alle Plattformen gibt auf der [Projektwebseite][4]. rclone
unterstützt so ziemlich jeden Cloud-Speicher und Protokoll (ssh, webdav, …). Wir haben uns für ein Backup auf Google Drive entschieden, da wir da durch GSuite for Education unbegrenzten Speicherplatz haben 🙂
Ist rclone
eingerichtet lädt man sich das Backup-Skript herunter, macht es ausführbar:
$ wget https://raw.githubusercontent.com/cloudrkt/lxdbackup/master/lxdbackup
$ chmod +x lxdbackup
Damit der Upload des Backups auch funktioniert muss man noch einige Parameter festlegen (v.a. RCLONETARGET).
$ nano lxdbackup # Settings # The target bucket or container in your Rclone cloudstorage RCLONETARGETDIR="lxdbackup" # Optional Rclone settings. RCLONEOPTIONS="" # Rclone target cloud used in your rlcone.conf RCLONETARGET="my-remote" # Directory were local images are stored before upload WORKDIR="/tmp/lxdbackup" ``` Nun kann man das Skript mit folgendem Aufruf testen: ``` $ lxdbackup my-container ``` Wenn alles gut geht, sollten man sein Backup nach einiger Zeit (der Export eines Containers kann etwas dauern, je nach Größe) auf dem Speichern finden, den man in `rclone` konfiguriert hat. ### Fazit Bisher haben wir einfach den LXD-Host im Gesamten gesichert. Das reicht in der Regel aus, aber man verliert die Möglichkeit einzelne Container getrennt voneinander wiederherstellen zu können. Mit dem lxdbackup-Skript und der Kombination mit `rclone` haben wir nun viel mehr Möglichkeiten und können unsere Container sehr flexibel sichern. Mit Hilfe von Cronjobs haben wir das Backup automatisiert. Manche Container werden z.B. 2x am Tag gesichert, andere nur 1x in der Woche ([und das nur, wenn keine Schulferien sind][5]) – je nach Anwendungsfall. [1]: https://linuxcontainers.org/lxd/ [2]: https://zefanjas.de/5-gruende-warum-wir-lxd-verwenden/ [3]: https://github.com/cloudrkt/lxdbackup/ [4]: https://rclone.org/ [5]: https://github.com/anschuetz/linuxmuster/tree/master/schultag