iX 3/2018
S. 64
Review
Virtualisierung
Aufmacherbild

Mit LinuxKit VM-Images generieren

Bildhauerwerkstatt

Ursprünglich von Docker Inc. initiiert, hat sich LinuxKit inzwischen als freies Projekt etabliert. Es überträgt das Konzept der Wegwerf-Container auf individuell konfigurierbare virtuelle Maschinen.

Das Ziel von LinuxKit ist das Generieren schlanker Linux Virtual Machine Images (VM-Images) – nur lesbar und auf Basis von Containern. Dafür nutzt das Tool Elemente des Docker-Universums. Es spielt in der gleichen Liga mit anderen VM-Build-Werkzeugen, etwa Packer, Boxfuse, Veewee oder B9, bietet aber mehr Freiheiten. LinuxKit kann Images in verschiedenen Formaten erzeugen, unter anderem ISO-EFI oder solche für AWS, Azure und OpenStack, sodass sich diese praktisch überall nutzen lassen.

Haupttreiber und Initiator von LinuxKit ist Docker Inc. Mittlerweile erfolgt die Weiterentwicklung der Repositories jedoch unabhängig von Docker als Teil des Moby-Projekts in einer offenen Community. Ende Januar veröffentlichten die LinuxKit-Entwickler Version 0.2. Dabei räumten sie die Ordnerstruktur im offiziellen GitHub-Repository inklusive der Beispiele auf. Weiter aktualisierten sie ihr Tool auf die aktuellen Versionen containerd 1.0.1 sowie Alpine Linux 3.7, auf dessen Basis LinuxKit alle Container baut. Dieser Artikel stellt anhand eines Beispiels die Möglichkeiten vor.

Der Begriff Image kann in diesem Zusammenhang allerdings etwas missverständlich sein: Zunächst nutzt das LinuxKit-Build-Werkzeug Docker-Images aus einer Registry für die gewünschten VM-Inhalte. Außerdem kann LinuxKit sowohl VM- als auch Docker-Images erstellen. Dieser Artikel beschäftigt sich hauptsächlich mit ersteren, weil sie die Hauptmotivation für den Einsatz von LinuxKit sind.

Design und Konzepte

Prinzipiell lässt sich LinuxKit auf der Seite der stark reduzierten Distributionen einsortieren. Das impliziert aber nicht, dass etwas fehlt – im Gegenteil: LinuxKit erlaubt einen stärkeren Fokus auf die tatsächlichen Bedürfnisse, indem Benutzer selbst entscheiden müssen, was im Image enthalten sein soll, welche Defaults gesetzt sind und wie Initialisierungs- und Shutdown-Phasen ablaufen sollen.

Diese Konfiguration beziehungsweise Build-Vorschrift erfolgt im YAML-Format, sodass einer Versionierung von VM-Images nichts im Wege steht. Das starke Reduzieren auf explizit gewünschte Services in den VM-Images verringert die Angriffsfläche und erhöht somit die Sicherheit. Zusätzlich schließt das nur lesbare Root-Dateisystem weitere Angriffsvektoren aus. LinuxKit-Systeme sind per se stateless, allerdings kann man eine beschreibbare Partition in das System einhängen und innerhalb der durch Namespaces gekapselten Container dann auch Schreiboperationen ausführen.

Beim Bauen wählt das Tool die gewünschten Dienste aus einer Registry und packt sie als Docker-Container in die VM ein. Anstelle einer vollständigen Docker Engine dient Containerd als Runtime.

Die LinuxKit-Entwickler heben ihre Software explizit als gute Grundlage für Clustersysteme hervor, etwa Redis, Swarm oder Kubernetes. Die Option, einen LinuxKit-Build vollständig zu automatisieren, hilft bei der Maintenance, dem Ausrollen von Sicherheitskorrekturen oder bei einem regelmäßigen Re-Deploy des kompletten Linux-Systems. Das funktioniert je nach Bedarf mit einfachen Skripten, kann aber auch mit anspruchsvolleren Projekten wie Dockers InfraKit erfolgen. Durch die starke Reduktion auf die wesentlichen Komponenten müssen beim Booten der VM weniger Services starten, sodass LinuxKit-VMs schneller als konventionelle Distributionen hochfahren. Dadurch eignen sie sich für hochdynamische Umgebungen, die mit hoher Frequenz beziehungsweise geringer Latenz neue Instanzen starten müssen.

Im Vergleich zu Provisionierungswerkzeugen wie Chef, Puppet oder Ansible bietet das Image-basierte Konzept einige Vorteile: Verwendet man ein Provisionierungs-Tool, lassen sich Änderungen zwar leicht realisieren, jedoch betrachten diese selten das Gesamtsystem. Mit der Zeit kann es deshalb leicht passieren, dass man etwa beim Entfernen von Softwarepaketen vergisst, Konfigurationsdateien zu löschen. Bei einem schreibgeschützten System wie LinuxKit sind Änderungen am laufenden System nur sehr aufwendig und nur begrenzt möglich.

Größere Ähnlichkeiten gibt es mit HashiCorps Packer, das ebenfalls Images aus Template-Dateien generiert. Der Unterschied besteht darin, dass Packer vollständige Linux-Distributionen als Grundlage benutzt und diese an die eigenen Bedürfnisse anpasst. LinuxKit startet im Gegensatz dazu mit einem reinen Kernel und minimalem Init-System bei null.

Ähnlich wie bei Packer reicht das Erzeugen nicht, sondern die Images sollen letztlich auf verschiedene Plattformen verteilt und dort gestartet werden. LinuxKit integriert sich in einen bestehenden Technologie-Stack, indem es neben den populären Cloud-Plattformen von Amazon, Google und Microsoft auch Packet, VMware und OpenStack unterstützt und selbst Images für den Raspberry Pi 3 erzeugen kann.

Im oben schon erwähnten Moby-Projekt entstehen die Bausteine für die Docker-Produkte Docker-CE und Docker-EE. LinuxKit entstand aus dem Wunsch nach besserer Portabilität der Docker Engine: Weil Docker intern auf Mechanismen des Linux-Kernels baut, lässt es sich nicht ohne Weiteres auf Windows oder macOS portieren. In den Anfängen von Docker war es daher notwendig, auf diesen Plattformen schwergewichtige VMs einzusetzen. Deren populärste Ausprägung ist boot2docker. Allerdings war auch damit die Integration in die beiden Plattformen aufwendig und unbequem, weshalb Docker Inc. nach einer schlankeren und flexibleren Lösung suchte – LinuxKit.