Container

5 Gründe warum wir LXD verwenden

Linuxcontainer und der Container-Hypervisor LXD sind eine meiner Lieblingstechnologien seit Ubuntu 16.04. Wir verwenden Linuxcontainer bei uns in der Schule für unsere Webanwendungen oder auch andere Dienste. 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 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 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 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 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?

7 Comments:

  1. Melanie Kleist

    Hi,
    ich bin Bibliothekarin und für ein privates Projekt wollte ich Koha als Bibliotheksverwaltungsprogramm aufsetzen. So kam ich hier auf die Seite. Nun ja, also mit meinem angelesenen Halbwissen hab ich nun einen Cloud Server mit Ubuntu 20.04, bin dem oben verlinkten Screencast gefolgt und will nun auf auf dem Server LXD installieren. Das Ziel ist, das Koha-Setup später ggf. auf andere Server transferieren zu können. Zudem will ich den Webserver noch für andere Projekte wie z.B. eine Website benutzen. Soweit ich verstanden habe, lässt sich das mit Containern ja ordentlich strukturieren.

    Zurück zu LXD: nun sind seit der Screencastaufnahme zwei Jahre in Land gezogen. Die Abfragen bei der Konfiguration von LXD sehen inzwischen etwas anders aus. Ich werde nach einem MAAS Server plus API key gefragt, beides habe ich nicht. Muss ich dort zwingend korrekte Angaben machen? Kann ich das ggf. umgehen? Ansonsten kann ich LXD nicht nutzen.

  2. zefanja

    @Melanie: Ja, einfach die Abfragen leer lassen bzw. Standardantwort verwenden.

Leave a Reply:

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