2020
Juni
23
2020

cloud-init – Server einrichten auf Cloud-Art

Um einen neuen Cloud-Server einzurichten, klickt man sich üblicherweise nicht manuell durch einen OS-Installer. Dennoch benötigt jeder Server ein gewisses Mass an individueller Konfiguration. Hier kommt cloud-init ins Spiel: Dieses vielseitige Paket nimmt alle nötigen Grundeinstellungen vor, um mit einem neuen Server loslegen zu können. Darüber hinaus erlaubt es Ihnen, den Server perfekt in Ihre spezifische Cloud-Umgebung einzubinden und von Anfang an mit Ihren eigenen Tools zu verknüpfen.

Sofort startklar dank cloud-init

Um einen neuen Cloud-Server innert Sekunden starten zu können, stellen die grossen Linux-Distributionen Images bereit, die im Wesentlichen ein Festplatten-Abbild des fertig installierten Betriebssystems enthalten. Ein neuer Server, als Klon von einem solchen Image erstellt, ist damit schon fast einsatzbereit; einige Details wie der Hostname oder die autorisierten SSH-Keys fehlen in diesem generischen Image jedoch und müssen noch individuell gesetzt werden.

Das in vielen Images enthaltene Paket cloud-init wird beim Systemstart aktiv und erledigt diese Einstellungen vollautomatisch. Wird erkannt, dass der spezifische Server zum ersten Mal startet, läuft das volle Programm; nebst dem Namen des Servers und den Zugangsdaten kümmert sich cloud-init z.B. auch um das Erstellen neuer SSH-Host-Keys. Deren öffentlicher Teil wird bei cloudscale.ch zudem auf die serielle Konsole ausgegeben – so können wir im Cloud-Control-Panel die Fingerprints anzeigen, damit Sie bereits beim ersten Einloggen überprüfen können, dass die Verbindung vertrauenswürdig ist. Bei nachfolgenden Systemstarts kann cloud-init für Sie beispielsweise das Filesystem vergrössern, falls Sie das virtuelle Volume Ihres Servers zwischenzeitlich skaliert haben.

Drehscheibe für die Config: Der Metadaten-Server

Daten wie Hostname und SSH-Key, die Sie beim Server-Launch angeben, speichern wir auf unserem Metadaten-Server. Hier kann cloud-init diese Daten abholen, um Ihren Server passend zu konfigurieren. Einer der Wege, um an die Daten zu kommen, ist die sog. "Magic IP": via DHCP erhält der Server eine spezielle Route zugewiesen, und cloud-init kann anschliessend seine Config von der URL http://169.254.169.254 abrufen. Neu stellen wir die Config zudem auch via "Config-Drive" zur Verfügung. Dabei sieht jeder neue Server ein virtuelles CD-ROM-Laufwerk (z.B. /dev/sr0), das seine individuelle Konfiguration enthält.

Den maximalen Nutzen mit cloud-init erzielen Sie, wenn Sie dieses Tool auch für Ihre eigenen Einrichtungsaufgaben nutzen. Als "User Data" können Sie beim Server-Launch eine Vielzahl von Settings angeben bis hin zu beliebigen Kommandos, die auf dem neuen Server ohne weiteres Zutun ausgeführt werden (siehe auch die cloud-init Dokumentation). So installiert Ihr Server selbständig die von Ihnen gwünschten Pakete und Patches und integriert sich in Ihr Config-Management oder Monitoring – noch bevor Sie sich das erste Mal einloggen.

Server-Konfiguration mit cloud-init

Selbstverständlich können Sie die Daten vom Metadaten-Server auch mit Ihren eigenen Tools auslesen und nutzen, so z.B. die UUID Ihres Servers, um via unsere API automatisiert Aktionen auszulösen. Insbesondere falls Sie Netzwerk-Optionen statisch konfigurieren, haben Sie dank dem neuen Config-Drive in jedem Fall die Daten zu Ihrem Server lokal zur Verfügung. Alternativ finden Sie die Angaben auch unter /run/cloud-init/instance-data.json, wo cloud-init eine Kopie der gelesenen Config ablegt.

Gut zu wissen

Die Version und Möglichkeiten des cloud-init Pakets unterscheidet sich zwischen den verschiedenen Linux-Distributionen zum Teil stark. Prüfen Sie falls nötig, welche der zahlreichen Optionen im Einzelfall unterstützt werden oder durch das Aktivieren bestimmter Module zusätzlich benutzt werden können. Denken Sie beim Hinzufügen von User Data zudem daran, dass die Metadaten potenziell von jedem Benutzer oder Tool auf Ihrem Server eingesehen werden können.

Übrigens: Obwohl weit verbreitet, ist cloud-init nicht das einzige Projekt, um die Einrichtung neuer Server zu automatisieren; eine Alternative ist hier Ignition, das z.B. bei Flatcar Container Linux zum Einsatz kommt. Ignition erwartet seine Config im JSON-Format, beim Start eines Servers mit Flatcar bei cloudscale.ch können Sie als User Data aber auch eine YAML-formatierte "cloud-config" wie für cloud-init angeben.


Egal, ob Sie eine Copy/Paste-Vorlage für den Launch im Control-Panel bereithalten oder Server via API starten: Dank cloud-init und Ignition automatisieren Sie über das reine Erstellen von Servern hinaus viele Einrichtungsschritte, die Sie bisher manuell ausgeführt haben. Und auch im laufenden Betrieb haben Sie – z.B. in Scripts – jederzeit Zugriff auf die wesentlichen Metadaten Ihrer Server.

Für einen guten Start,
Ihr cloudscale.ch-Team

Zurück zur Übersicht