LXD-Container unter Ubuntu verwalten

Auf neuen Wegen

Im April wurde mit Ubuntu 16.04 "Xenial Xerus" wieder ein Release der Linux-Distribution veröffentlicht, für das Canonical fünf Jahre Update-Support garantiert. Zumindest in puncto Container-Technologie drückt Ubuntu auf die Tube, denn LXD und ZFS sollen das Leben jedes Container-Fans vereinfachen. Hier erfahren Sie alles Wichtige über die LXD-Container.
Sind Anwendungen oder Dateien unerwartet nicht mehr verfügbar, stehen schnell Teile des Unternehmens still und die Augen sind auf den Admin gerichtet. Um ... (mehr)

Das LXD-Team spricht bei seinem Container-Management von einem "Lightervisor". Im Gegensatz zur traditionellen Virtualisierung sind Containern also leichtfüßig unterwegs. Tatsächlich benötigen Container weniger Ressourcen als vollvirtualisierte Maschinen mit Hypervisor, stellen aber trotzdem ein komplettes Linux zur Verfügung. Die Vorgehensweise, ein vollwertiges System statt nur einen Service im Container zu kapseln, ist der wesentliche Unterschied zu Docker, das die LXD-Entwickler vor allem als Mechanismus zur Auslieferung von Anwendungen sehen.

LXD ist die konsequente Weiterentwicklung des LXC-Toolsets. Die LXC-Kommandos sind erstmals 2008 aufgetaucht und dienen zur Verwaltung von Linux Containern. Im Hintergrund werkeln seit Beginn die Mainline-Kernel-Features Cgroups und Namespaces. Die für eine Virtualisierung wichtigen Funktionen der Ressourcen-Limitierung übernehmen Cgroups, über Namespaces werden Ressourcen voneinander isoliert. LXD ändert an der Container-Umsetzung nichts, ganz im Gegenteil. Braucht LXD neue Funktionen, implementieren sie die Entwickler zuerst im LXC-Toolset und reichen sie dann an den Lightervisor weiter.

Installation

Ubuntu propagiert LXD als wichtiges Feature von Ubuntu 16.04. Mindestens so viel Aufmerksamkeit kommt der Integration eines neuen Dateisystems zugute – dem von Solaris bekannten ZFS. Im Februar titelte der Ubuntu-Entwickler Dustin Kirkland: "ZFS is the FS for Containers in Ubuntu 16.04". Die Schlagzeile rund um Ubuntu und ZFS ließ viele Herzen höher schlagen, wünschen sich doch viele Linux-Fans seit langem eine native ZFS-Integration.

LXD-Enthusiasten finden somit bei Xenial Xerus alles zum Starten von Containern vor. In den ersten Schritten wird sichergestellt, dass der aktuelle Benutzer der Gruppe "lxd" angehört. Diese dürfen mit dem LXD-Daemon ohne root-Rechte kommunizieren:

 

Um von Beginn an vom zuvor erwähnten ZFS zu profitieren, initialisieren Sie am besten ein separates Block-Device als Container-Speicher. Dazu kommt als Benutzer root das Kommando lxd init zum Einsatz, das vorzugsweise via sudo -i in einer root-Session ausgeführt wird (Listing 1). Bei direkter Verwendung von sudo lxd init werden fälschlicherweise Konfigurationsdateien im User-Verzeichnis dem Benutzer root zugewiesen – LXD-Befehle schlagen daraufhin fehl.

Im Zuge der ZFS-Initialisierung wird LXD auch für das Remote-Management per HTTPS-Protokoll konfiguriert. Eine sinnvolle Erweiterung zum traditionellen Management – zum einen werden Container per REST-API gesteuert, zum anderen lassen sich mehrere LXD-Hosts übers Netzwerk verwalten.

Nach dem Setup lauscht der LXD-Daemon der Konfiguration entsprechend am Port 8090 auf Netzwerkanfragen:

 

Listing 1: LXD-Initialisierung

 

Container-Management

LXD baut per Design eine abgesicherte Container-Umgebung auf. Dazu setzt das Projekt auf Kernel-Technologien wie User Namespaces, Apparmor und Seccomp. LXD ist außerdem so konzipiert, dass unprivilegierte Benutzer ohne Root-Rechte Container erzeugen und verwalten dürfen – sogenannte "Unprivileged Containers". Für einen ersten Container wird aus dem öffentlichen Ubuntu Image-Server eine gewünschte Distribution importiert, in Listing 2 ein Ubuntu Trusty 14.04.

Listing 2: Distribution importieren

 

Alle verfügbaren Images des Remote Servers listet der folgende Befehl auf:

 

Bei Bedarf startet ein Container auch ohne den Import direkt vom Remote-Image weg, wobei ein lokaler Image Cache angelegt wird. Bei häufigem Verwenden eines Images ist die lokale Kopie ein naheliegender Zwischenschritt, da der Image-Server in diesem Fall nicht kontaktiert werden muss.

Mit dem launch-Befehl startet im nächsten Schritt aus dem lokalen Image einen Container:

 

 Da das Image bereits lokal zur Verfügung steht, dauert es nur rund 6s, bis "container1" erstellt und gestartet ist – "lxc exec" führt sogleich in eine Shell von "container0". Das Kommando "lxc init" legt den Container nur an, ohne zu starten:

 

Einen Überblick über laufende Container inklusive derer IP-Adressen bietet der list-Befehl (Listing 3).

comments powered by Disqus

Artikel der Woche

Systeme mit Vamigru verwalten

Auch wer nur kleine Flotten von Linux-Servern verwaltet, freut sich über Werkzeuge, die ihm diese Arbeit erleichtern. Vamigru tritt mit diesem Versprechen an. Wir verraten, was es leistet und wie Sie es in der eigenen Umgebung in Betrieb nehmen. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite