Backup für LXD-Container

Backup für LXD-Container

LXD 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, 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, 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. 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) – je nach Anwendungsfall.

4 Comments:

  1. wynni

    Hallo,
    bitte bring weitere Artikel über LXD LXC. Bin begeistert darüber. Daumen hoch für deinen Blog

    wynni

  2. Howdie,
    bin gerade auch dabei etwas in LXC und jetzt spezieller in LXD (besonders für Zeug, was nicht so easy in Docker/K8s zu kriegen ist) einzutauchen und deine Blogbeiträge geben einen guten Start. Danke dafür! 😉

  3. Simon

    Kann ich damit auch einfach ein Backup auf eine externe Festplatte machen? rclone muss/kann dafür nicht extra konfiguriert werden.

    wie mache ich das?

Leave a Reply:

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert