Was ist Cloud-Init und warum ist es so cool?

Cloud-Init Header Bild

Das Aufsetzen einer neuen Cloud-Instanz kann sehr zeitintensiv sein, besonders wenn viele Programme installiert und konfiguriert werden müssen. Mit Cloud-Init gehört dieses Problem der Vergangenheit an.

Cloud-Init ist eine Software, die für Cloud-Server-Instanzen entwickelt wurde und den Server automatisch anhand der bereitgestellten Metadaten einrichtet.

Wie funktioniert Cloud-init?

Cloud-Init richtet Deine Cloud-Instanz so ein, wie es in der Konfigurationsdatei angegeben wurde. Solltest Du bereits mit Docker vertraut sein, ist die Cloud-Init Konfigurationsdatei ähnlich wie ein Dockerfile und die Cloud-Instanz ähnlich wie ein Container. Die Cloud-Init Konfigurationsdatei ist im YAML-Format geschrieben und dient als Vorlage für neue Cloud-Instanzen. Hier ist ein Beispiel einer solchen cloud.cfg:

#cloud-config
users:
    - default
disable_root: true
preserve_hostname: false
apt_preserve_sources_list: true
system_info:
   distro: debian
   default_user:
      name: debian
      lock_passwd: True
      gecos: Debian
      groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
      sudo: ["ALL=(ALL) NOPASSWD:ALL"]
      shell: /bin/bash
   paths:
      cloud_dir: /var/lib/cloud/
      templates_dir: /etc/cloud/templates/
      upstart_dir: /etc/init/
   package_mirrors:
     - arches: [default]
       failsafe:
         primary: http://deb.debian.org/debian
         security: http://security.debian.org/
   ssh_svcname: ssh
bootcmd:
  - echo “Hello world!” > /home/hello.txt
packages:
  - vim
  - git
  - htop

Diese Konfigurationsdatei sorgt dafür, dass die Pakete vim, git und htop installiert werden. Zudem wird die Datei /home/hello.txt erstellt, welche den Satz „Hello world!“ beinhaltet. Zudem wird, wie in system_info beschrieben, ein Standardbenutzer erstellt und der root-Benutzer deaktiviert.

Zudem gibt es viele Module, mit denen Du Deinen Server genau so konfigurieren kannst, wie Du ihn brauchst. So kannst Du z.B. das bootcmd-Modul benutzen, um während des Bootvorgangs benutzerdefinierte Befehle auszuführen, oder um benutzerdefinierte Benutzer zu erstellen und denen durch das users-and-groupsModul Gruppen zuzuweisen.

Weitere Beispiele von Cloud-Init Konfigurationsdateien findest Du hier.

Ich habe Docker, wozu also Cloud-Init?

Wenn es um das Replizieren von Umgebungen geht denkst Du vielleicht eher an Docker als an Cloud-Init. Das Gute ist allerdings, dass Du Dich nicht zwischen den beiden entscheiden musst. Um Docker zu benutzen, muss Docker zunächst auf deinem Server installiert und konfiguriert werden. Hier kommt Cloud-Init ins Spiel. Wenn Du also einen neuen Server aufsetzt, kannst Du Cloud-Init nutzen, um Docker zu installieren und zu konfigurieren und schon kannst Du Docker ganz normal nutzen, um Deine Programme auszuführen.

Cloud-Init bei Contabo

Unsere Kunden hier bei Contabo können Cloud-Init mit Ihrem VPS oder VDS nutzen. Am besten geht dies über die Contabo API. Mit dieser API ist es möglich, Deine Cloud-Init Konfiguration direkt bei der Bestellung eines VPS hochzuladen. Sobald Dein VPS fertig ist, wurde die Konfiguration bereits angewendet und der Server ist bereit. Zudem ist es auch möglich, Cloud-Init auf bereits bestehenden Servern zu aktivieren und diesen mit Cloud-Init neu zu installieren. In unserer API-Dokumentation findest Du weitere Informationen bezüglich der Contabo REST API.

Vorteile von Cloud-Init

Cloud-Init kann weit über die bloße Einrichtung der Cloud-Instanz mit bestimmten Benutzern und Paketen hinaus verwendet werden. So kannst Du zum Beispiel eine ganze LAMP-Stack-Anwendung wie WordPress nur mit Cloud-Init einrichten. Mit der Contabo-API ist eine neue WordPress-Installation nur einen API-Aufruf entfernt.

Das bedeutet auch, dass das Erstellen mehrerer Maschinen mit derselben Konfiguration und Software keine große Sache mehr ist. Du erstellst einmal eine Cloud-Init-Konfiguration und kannst sie immer wieder verwenden. Mit dieser Technik gibt es also keinen Grund mehr, alle Instanzen manuell zu konfigurieren.

Wiederherstellung im Notfall

Die Neuinstallation eines Servers kann im Notfall nötig sein, da Dein Projekt z.B.  mehrere Instanzen gleichzeitig benötigt, um die Arbeitslast zu bewältigen. Sollte also ein Server ausfallen kannst Du Cloud-Init dazu verwenden, neue Instanzen mit der erforderlichen Konfiguration und Software schnell einsatzbereit zu machen. Mit Cloud-Init ist das schnelle Wiederherstellen bestimmter Umgebungen kein Problem mehr. In solchen Notsituationen ist Zeit die wichtigste Ressource und mit Cloud-Init sparst Du eben diese bei der Neuinstallation eines Servers.

Cluster und Kubernetes

In einem Cluster gibt es mehrere Knoten (Nodes) bzw. Server, welche bestimmte Aufgaben ausführen und schnell auf sich ändernde Arbeitslasten reagieren können. Doch selbst in einem Cluster kann es früher oder später dazu kommen, dass Deine aktuelle Serverkonfiguration nicht mehr ausreicht, um alle Aufgaben bewältigen zu können. Dieser Fall kann schneller eintreten als Du denkst. Genau in so einem Fall ist es wichtig, schnell handeln zu können. Auch hier kommt Cloud-Init zur Hilfe, indem es die neuen Knoten automatisch anhand der zentralen Konfigurationsdatei einrichtet, so dass keine manuelle Konfiguration der einzelnen Nodes mehr notwendig ist.