5 Gründe warum wir LXD verwenden
By zefanja
Linuxcontainer und der Container-Hypervisor LXD sind eine meiner Lieblingstechnologien seit Ubuntu 16.04. Wir verwenden [Linuxcontainer][1] bei uns in der Schule für unsere [Webanwendungen oder auch andere Dienste][2]. Es gibt einige Dinge, die ich an LXD sehr mag. Also: Warum LXD?
Einige Dinge, wie Installation, einen ersten Container erstellen usw. habe ich in [diesem kleinen Screencast][3] zusammengefasst:
1. LXC Client und REST API
Neben LXD gibt es noch das Kommandozeilenprogramm lxc
. Es ist sehr einfach zu bedienen und dabei sehr mächtig. Es macht einfach Spaß damit zu arbeiten. lxc
greift dabei auf die Rest API von LXD zurück. Hier ein paar kleine Beispiele:
Einen neuen Ubuntu Container erstellen und starten (x steht für Xenial):
$ lxc launch ubuntu:x mein_container
Root im Container werden:
$ lxc exec mein_container bash ``` Alle Container anzeigen: ``` $ lxc list ``` Eine Datei in den Container kopieren: ``` lxc file push /mein/lokaler/Pfad mein_container/mein/Pfad/im/Container ``` Das Tolle ist IMHO auch, dass man die API über das Netzwerk verfügbar machen kann. So kann ich an meinem Rechner mehrere Remotes hinzufügen. Wir haben z.B. mehrere LXD Hosts im Einsatz. Möchte ich nun auf diese Hosts zugreifen, ohne mich jedes Mal per SSH anzumelden, füge ich diese einfach als Remote hinzu: ``` $ lxc remote add host1 IP-des-Hosts ``` Nun kann ich die gleichen Befehle wie oben nutzen. Vor dem Containername muss einfach nur der Name des Remote-Hosts angegeben werden: ``` $ lxc launch ubuntu:x host1:container2 $ lxc list hosts1: $ lxc exec host1:container2 bash ``` ### 2. Geschwindigkeit Linuxcontainer sind schnell erstellt und man kann sie sehr schnell starten und beenden. Das dauert i.d.R. nur wenige Sekunden. Das ist vielleicht kein Alleinstellungsmerkmal für LXD, denn das Gleiche gilt auch für Docker oder andere Containertechnologien. ### 3. Snapshots & Migration Ein Feature von LXD sind Snapshots. Ich kann von jedem Container einfach ein Abbild erstellen, auf welches ich später wieder zurück kann. ``` $ lxc snapshot mein_container ``` Mit `lxc info mein_container` kann ich mir meine Snapshots anzeigen lassen und mit folgendem Befehl zum letzten Snapshot zurückkehren: ``` $ lxc restore mein_container snap0 ``` Ich kann aber auch aus einem Snapshot einen neuen Container (hier _test_) erstellen, um z.B. ein Update oder eine Änderung zu testen. ``` $ lxc copy mein_container/snap0 test ``` Auch hier gilt, dass ich das nicht nur lokal auf einem Host machen kann, sondern so z.B. einen Container von einem Host auf einen anderen (live) migrieren kann. Es gibt dabei zwei Möglichkeiten. Entweder erstelle ich eine Kopie oder ich verschiebe den Container. Ich mache davon manchmal Gebrauch, wenn ich z.B. eine neue Anwendung lokal auf meinem Rechner teste, kann ich sie später einfach auf den Host in der Schule schieben. ``` $ lxc copy mein_container host1:mein_container $ lxc move mein_container host1:mein_container ``` ### 4. Ressourcenschonend Linuxcontainer verbrauchen sehr wenig Speicherplatz, da sie sich viele Komponenten mit dem Container-Host teilen. Ein frisches Ubuntu-Image z.B. verbraucht nur wenige MB an Speicherplatz. Alle Container teilen sich zudem Arbeitsspeicher und CPU-Ressourcen. So kann eine viel höhere Dichte im Vergleich zu virtuellen Maschinen erreicht werden, die wesentlich mehr Ressourcen brauchen. Canonical spricht davon, dass auf einem Server [10x mehr Container-VMs][4] möglich sind im Vergleich zu klassischen virtuellen Maschinen (z.B. KVM). ### 5. Flexible Netzwerk und Speicherkonfiguration Mit LXD sind verschiedenste Anwendungsszenarien möglich. Es werden verschiedene Speicher-Backends unterstützt und verschiedene Netzwerktreiber. Man kann auch mehrere Speicher-Backends auf einem Host haben und bei der Erstellung eines Containers entscheiden, auf welchem Speicher er gestartet werden soll. Eine [Übersicht über alle möglichen Speicher][5] findet man in der Dokumentation. Auch netzwerktechnisch sind unterschiedliche Optionen vorhanden. Standardmäßig erstellt LXD ein eigenes Subnet für die Container. Man kann aber auch Netzwerkbrücken einrichten oder VLANs nutzen, um den Container die gewünschte IP zu geben bzw. die vorhandene Infrastruktur zu nutzen. ### Fazit Wer viel mit Linux-VMs arbeitet, sollte sich [LXD][6] auf jeden Fall anschauen. LXD ist für mich die perfekte Mischung aus den Vorteilen, die Container bringen und der gewohnten Umgebung, die man von einer Linux-VM gewohnt ist. Es ist wie eine „richtige“ virtuelle Maschine, nur schneller.Welche Erfahrungen hast du bereits mit Container allgemein bzw. mit LXD konkret gemacht?
[1]: https://zefanjas.de/wie-man-mehrere-webseiten-mit-nginx-und-haproxy-mit-lxd-hosten-kann/ [2]: https://zefanjas.de/5-grossartige-open-source-programme-die-wir-in-unserer-schule-einsetzen/ [3]: https://www.youtube.com/watch?v=14MS_NKTKUE [4]: https://www.ubuntu.com/containers/lxd [5]: https://lxd.readthedocs.io/en/latest/storage/#storage-backends-and-supported-functions [6]: https://zefanjas.de/tag/lxd/