Zurück zum Blog

Eine Einführung in die Server-Provisionierung mit CloudInit

Eine Einführung in die Server-Provisionierung mit CloudInit

Diesen Monat haben wir eine sehr spannende Partnerschaft mit Canonical angekündigt, den Machern von Ubuntu. Das wichtigste Element dieser Partnerschaft ist vor allem die Einführung der vollständigen CloudInit-Unterstützung zwischen der CloudSigma-Cloud und Ubuntu.

Eine Einführung in CloudInit

Wenn Sie mit CloudInit nicht vertraut sind: Es ist der Industriestandard für das Bootstrapping von Cloud-Servern. Zur Verdeutlichung: Wenn Sie ein einfaches DSL verwenden, ist es möglich, beim ersten Booten problemlos Aufgaben auszuführen. Es ist auch erwähnenswert, dass CloudInit nicht auf Ubuntu beschränkt ist. Heute finden Sie CloudInit-Unterstützung in den meisten modernen Linux-Distributionen (die unterstützten Clouds variieren jedoch).

Bevor wir mit CloudInit beginnen, ist es wichtig zu verstehen, wie sich CloudInit in das Provisioning-Ökosystem einfügt. Obwohl es möglich ist, CloudInit als eigenständiges Provisioning-System auszuführen, ist es weitaus üblicher, es in Verbindung mit einem anderen Provisioning-System wie Ansible, Chef, Puppet oder Salt zu verwenden. In diesem Fall würden Sie CloudInit einfach verwenden, um Ihren neuen Server in einen Zustand zu versetzen, in dem das Provisioning-System die Verwaltung übernehmen kann. Ich persönlich verwende CloudInit oft in Kombination mit Ansible.

Verwendung von CloudInit auf CloudSigma

Die Verwendung von CloudInit auf CloudSigma ist sehr unkompliziert.

Um CloudInit auf einem Ubuntu 14.04-Server zu verwenden, führen Sie die folgenden Schritte aus:

    • Klonen Sie das Laufwerk “Ubuntu 14.04 Cloud Image” aus dem Marketplace (derzeit das einzige vollständig unterstützte Laufwerk mit CloudInit). Stellen Sie sicher, dass Sie die Größe des geklonten Laufwerks auf die gewünschte Größe anpassen, damit das Dateisystem beim ersten Booten automatisch erweitert wird.
    • Erstellen Sie einen neuen Server.
    • Sobald der Server erstellt ist, sehen Sie eine CloudInit-Schaltfläche unter dem Serverstatus.

CloudInit

    • Wenn Sie auf diese Schaltfläche klicken, wird der folgende Dialog angezeigt.

CloudInit_activate

  • Fügen Sie hier einfach Ihre CloudInit-Daten ein und drücken Sie auf ‘Aktivieren’.
  • Sie können Ihren Server starten, und das Skript wird beim ersten Booten ausgeführt.

SSH-Schlüssel mit CloudInit installieren

Da Sie nun wissen, wie Sie CloudInit in unserer Cloud verwenden, wollen wir dieses neu gewonnene Wissen nutzen, um zwei SSH-Schlüssel zu installieren. Die beiden fiktiven öffentlichen SSH-Schlüssel, die wir verwenden werden, sind ‘ssh-rsa AAA[…] user1@host‘ und ‘ssh-rsa AAA[…] user2@host‘. (Um mehr über das Generieren von SSH-Schlüsseln zu erfahren, werfen Sie bitte einen Blick auf diese Seite auf GitHub.)

Bei Ubuntu Cloud Images ist der Standard-Benutzername ‘ubuntu’. Daher werden die Schlüssel in diesem Benutzerkonto installiert.

Die CloudInit-Konfiguration hierfür würde wie folgt aussehen:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Bitte beachten Sie, dass Leerzeichen wichtig sind. Vor dem ‘-‘ stehen zwei Leerzeichen. Wenn Sie nur eines setzen, wird es vom Server möglicherweise nicht gelesen.

Sobald Sie die CloudInit-Konfiguration gespeichert und den Server gestartet haben, sollten Sie sich über SSH als Benutzer ‘ubuntu’ auf dem Server anmelden können:

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun Oct 19 21:51:54 UTC 2014

System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]

System-Updates mit CloudInit installieren

Eine weitere sehr nützliche Sache, die Sie mit CloudInit leicht erreichen können, ist das Ausführen von System-Updates beim ersten Booten. Obwohl wir unsere Disk-Images häufig aktualisieren, ist es dennoch ratsam, zusätzliche Vorkehrungen zu treffen, um sicherzustellen, dass Ihre Systeme auf dem neuesten Stand sind.

Um System-Updates beim ersten Booten zu installieren, fügen Sie Folgendes hinzu:

[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

Sie werden vielleicht auch bemerken, dass es eine ähnliche Option namens ‘package_update’ gibt, die ein distributionsneutraler Alias für ‘apt_update’ unter Ubuntu ist.

Zudem wird ‘apt_update’ standardmäßig auf true gesetzt, wenn ‘packages’ (unten) definiert ist, aber ich habe es oben hinzugefügt, um es expliziter zu machen.

Pakete mit CloudInit installieren

Ein wesentlicher Bestandteil beim Bootstrapping von Systemen ist die Möglichkeit, Pakete beim Booten zu installieren. Glücklicherweise macht CloudInit auch dies einfach. Wir müssen lediglich eine Liste der zu installierenden Pakete unter ‘packages’ angeben. Wenn wir beispielsweise ‘python-pip’, ‘fail2ban’ und ‘vim’ installieren möchten, sieht das wie folgt aus:

[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]

Bitte beachten Sie auch hier, dass Leerzeichen wichtig sind. Vor dem ‘-‘ stehen zwei Leerzeichen.

Hostname mit CloudInit festlegen

Wenn Sie einen neuen Server bereitstellen, möchten Sie möglicherweise auch dessen Hostnamen festlegen.

[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Befehle beim ersten Booten mit CloudInit ausführen

Angenommen, Sie machen etwas Anspruchsvolleres mit Ihren Servern, besteht die Wahrscheinlichkeit, dass Sie einen Befehl haben, den Sie beim ersten Booten ausführen müssen.

Hier kommen ‘runcmd’ und ‘bootcmd’ ins Spiel. Beide ermöglichen es Ihnen, Befehle beim ersten Booten auszuführen. Der Unterschied besteht darin, dass ‘bootcmd’ früher im Boot-Prozess ausgeführt wird als ‘runcmd’.

Um einen dieser Befehle zu verwenden, fügen Sie Folgendes zu Ihrem CloudInit hinzu:

[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Verwendung von CloudInit mit einem Konfigurationsmanager

Schließlich verwenden Sie, wenn Sie ein fortgeschrittener Cloud-Nutzer sind, höchstwahrscheinlich einen Konfigurationsmanager. Glücklicherweise ist CloudInit darauf vorbereitet. Aufgrund der vielen Variablen ist dies jedoch ein recht komplexes Thema.

Hier sind also einige Beispiele, die Sie in die richtige Richtung weisen sollten:

Wie man mehrere Elemente miteinander verbindet

Für diejenigen, die mit Dateien im YAML-Stil nicht vertraut sind, ist es möglicherweise nicht offensichtlich, wie man mehrere CloudInit-Elemente miteinander verknüpft. Es ist jedoch unkompliziert. In der ersten Zeile benötigen Sie ‘#cloud-config‘. Danach fügen Sie einfach Ihre Konfiguration hinzu.

Wenn man beispielsweise alle oben genannten Beispiele in einer Konfiguration kombiniert, würde das wie folgt aussehen:

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Zusätzliche Ressourcen

Wir haben in diesem Artikel wirklich nur an der Oberfläche dessen gekratzt, was CloudInit tun kann. Es gibt noch eine Menge anderer Dinge, die Sie lernen können, wie zum Beispiel Benutzer und Gruppen erstellen, Dateien auf die Festplatte schreiben und URLs aufrufen, wenn fertig (zur Benachrichtigung anderer Systeme).

Wenn Sie mehr über CloudInit erfahren möchten, empfehle ich die folgenden Quellen:

author

Viktor Petersson

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.