Cloud-Init und VMs

Cloud-Init und VMs
Der folgende Artikel spricht ein wenig über Cloud-Init und die Probleme, die es hat und wie Open Source nicht unbedingt Freiheit bedeutet. Wenn Sie Cloud-Init verwenden möchten, um Cloud-Images zu konfigurieren, scrollen Sie einfach nach unten auf die Punktnummer 3.

1. Was es macht?

Immer gefragt, wie VPS-Anbieter Ihre VMs konfigurieren, Ihre SSH-Keys hinzufügen, Benutzer erstellen und Pakete jedes Mal installieren, wenn Sie eine neue VM in der "Cloud" aufspalten? Nun, die Antwort für die meisten Anbieter ist Cloud-Init. Die meisten Betriebssysteme und Verteilungen versenden virtuelle Festplattenbilder mit ihren jeweiligen Osen im Bild installiert. Die Installation ist sehr minimal und kann als Vorlage für das Stammdateisystem des Betriebssystems dienen. Die Betriebssystemwartungen sind auch freundlich genug, um das virtuelle Festplattenbild für alle verschiedenen Formate von Rohdisk -Bildern zu QCOW2 und sogar VMDK, VDI und VHD bereitzustellen.

Das Bild hat auch ein zusätzliches Paket vorinstalliert und das ist Cloud-Init. Es ist die Aufgabe von Cloud-Init zu initialisieren Das VM (in der Regel innerhalb eines Cloud -Hosting -Dienstes wie Digitalocean, AWS oder Azure) spricht mit dem Hosting -Anbieter Datenquelle und holen Sie sich die Konfigurationsinformationen, die sie dann verwendet, um die VM zu konfigurieren.

Die Konfigurationsinformationen können enthalten Benutzerdaten Wie SSH -Tasten, Hostname der Instanz, Benutzer und Passwörter zusammen mit jedem anderen willkürlichen Befehl, den der Benutzer ausführen möchte.

Das Problem mit Cloud-Init

Cloud-Init ist ein großartiges Tool, wenn Sie ein Cloud-Benutzer sind. Wenn Sie VMs oder Container aufrunden und Ihr Cloud-Anbieter Sie nach einer Cloud-Konfiguration fragen, ist es großartig! Mit einer Cloud-Config-Datei, auch bekannt als Ihre Benutzerdaten, können Sie Benutzer hinzufügen, beliebige Befehle ausführen, Pakete richtig installieren, wenn die VM erstellt wird. Der Vorgang kann immer wieder wiederholt werden, ohne dass immer wieder mühsame Befehle getippt werden. Bald haben Sie eine Flotte von VMs, alle mit identischer Konfiguration.

Wenn Sie jedoch etwas tiefer graben und sehen, wie die Wurst gemacht wird, werden Sie einige Aspekte von Cloud-Inits in Frage stellen. Beispielsweise ist die Datenquelle standardmäßig wie ein REST-Endpunkt, und diese sind im Wesentlichen in das Cloud-Init-Paket selbst festcodiert. Sicher, Sie können alleine eine DataSource einrichten, aber der Prozess ist klopft und zeitintensiv. Die Dokumentation dazu ist so gut wie nicht existent.

Die offizielle Dokumentation ist nichts anderes als ein Benutzerhandbuch für Endbenutzer, die sich auf bereits bestehende Cloud -Dienste verlassen. Es wird nicht angezeigt, wie Sie Ihre eigene Cloud-Init-DataSource einrichten können, falls Sie ein bevorstehender Anbieter sind. Sogar die Endbenutzerdokumentation ist schlecht, und ich würde Leute empfehlen, die Digitaloceans hervorragende Tutorial verwenden.

Um die Sache noch schlimmer zu machen, fällt es Benutzern mit Home-Virtualisierungslabors und Small VPS-Startup schwer, von diesen leichten Cloud-Images zu profitieren. Ohne eine Cloud-Init-DataSource oder einen Hackery, der schwer zu automatisieren und zu skalieren ist. Mit anderen Worten, Sie können sich nicht einmal dafür entscheiden, Cloud-Init zu ignorieren, es sei denn, Sie möchten Ihre eigenen Vorlagen herstellen.

Auf klassische Systemd ist es frei von seinen vordefinierten Rollen und beginnt sich mit Networking und anderen Teilen des Betriebssystems zu spielen, die Benutzer auswirken. Es wird in Ubuntu 18 gebündelt.04 Server ISO, was absolut keinen Sinn macht (zumindest nicht für mich).

Problemumgehung für Heimlabors

Abgesehen von all dem Schimpfen muss ich mich in meiner täglichen Verwendung immer noch mit Cloud-Init befassen. Ich habe eine sehr minimale Debian 9 -Installation auf x86_64 Hardware, die ich als KVM -Hypervisor verwende. Ich wollte unbedingt die QCOW2 -Datenträgerbilder verwenden, die von Ubuntu und CentOS geliefert werden. Diese Festplattenbilder haben das Betriebssystem vorinstalliert, und um sie zu verwenden, müssen Sie einfach:

  1. Kopieren Sie sie als virtuelles Festplattenbild Ihres VM.
  2. Größen Sie die Größe der virtuellen Größe des Root -Dateisystems auf Ihre gewünschte Größe (mindestens 10 GB wird empfohlen). Dies erhöht die physische Größe Ihres VM nicht, aber das Festplattenbild kann im Laufe der Zeit wachsen, da die VM mehr Daten hinzugefügt hat.
  3. Konfigurieren Sie die VMs mit Cloud-Init. Die bloße Mindestanforderung besteht darin, das Kennwort oder die SSH-Tasten des Root-Benutzers festzulegen, aber Sie können alles tun, was Cloud-Init ist, fähig ist.

Die folgenden Schritte werden befolgt:

  1. Laden Sie das Cloud -Bild Ihres Lieblingsbetriebs herunter und speichern Sie es im Verzeichnis/var/lib/libvirt/boot:
$ cd/var/lib/libvirt/boot
$ curl -o https: // cloud -Images.Ubuntu.com/xenial/current/xenial-server-cloudimg-
AMD64-Disk1.img
$ cd/var/lib/libvirt/Bilder
  1. Erstellen Sie eine leere virtuelle Festplatte Ihrer gewünschten Größe und erweitern Sie das heruntergeladene QCOW2 -Bild darin. Ich speichere die VM -Festplatten bei/var/lib/libvirt/images/verzeichneten. Sie können ein anderes Verzeichnis auswählen. Geben Sie die folgenden Befehle in demselben Verzeichnis aus:
$ qemu -img erstellen -f qcow2 myvm.QCOW2 8G ## Erstellen Sie einen Harddisk mit
Virtuelle Festplattengröße von 8 GB
$ virt-resize --expand/dev/sda1/var/lib/libvirt/boot/xenial-server-
Cloudimg-AMD64-Disk1.img
./myvm.QCOW2
  1. Erstellen Sie Cloud-Init-Dateien. Dies sind Benutzerdaten- und Meta-Daten-Dateien:
$ vim meta-Data
Instanz-ID: myvm
Lokale Hostname: myvm

$ vim user-Data
#Cloud-Config
Benutzer:
- Name: root
Chpasswd:
Liste: |
Wurzel: MyPassword
Ablauf: Falsch

Der einzige Benutzer, den ich hier habe, ist der Root -Benutzer. Wenn Sie keinen Benutzer erwähnen, dann der Standardbenutzer mit Namen Ubuntu wird erstellt. Der Standard -Benutzername unterscheidet sich von einem Betriebssystem zum anderen. Deshalb empfehle ich, einen Benutzer anzugeben, auch wenn dies gerecht ist Wurzel. Im nächsten Teil der Benutzerdata-Datei wird Cloud-Init angewiesen, das Kennwort für alle Benutzer zu konfigurieren, die Sie ein Kennwort zuweisen möchten. Auch hier stelle ich nur das Passwort für nur Root -Benutzer ein, und es ist mein Passwort. Stellen Sie sicher, dass zwischen dem Dickdarm und der Passwortzeichenfolge keinen Platz gibt.

Besser noch, Sie können SSH-Keys verwenden, anstatt hartcodierte Passwörter herumzulegen.

$ vim user-Data
#Cloud-Config
Benutzer:
- Name: root
SSH_PWAUTH: TRUE
ssh_authorized_keys:
- SSH-RSA
  1. Steigen Sie die Dateien der Benutzerdaten und der Meta-Daten in eine ISO ein.
$ genisoimage -output cidata -myvm.ISO -Volid Cidata -Joliet -Rock User -Data Meta -Data

Stellen Sie sicher, dass die Datei cidata-myvm.ISO befindet sich in/var/lib/libvirt/bilder/

  1. Gehen Sie zum Verzeichnis/var/lib/libvirt/images und initialisieren Sie den VM mit dem Befehl virtin-install:
    $ virtin-install --import-name myvm-memory 2048-vcpus 2-cpu host
    --Datenträger myvm.qcow2, format = qcow2, bus = virtio-disk myvm-cidata.ISO, Device = Cdrom
    --Netzwerkbrücke = virbr0, modell = virtio --os-type = Linux
    --os-variant = ubuntu16.04 -Noautoconsole

    Sie können jetzt versuchen, sich in der VM anzumelden, indem Sie den Befehl virsh console myvm und den Root -Benutzernamen und sein entsprechendes Passwort verwenden, um sich anzumelden. Um die Konsole zu verlassen, geben Sie einfach Strg+ein]

Abschluss

Die Cloud -Bilder, die die meisten Anbieter in Bezug auf die Ressourcennutzung versandt, fühlen sich auch sehr schnell und reaktionsschnell. Die Tatsache, dass wir uns mit der unangenehmen Cloud-Init-Konfiguration als Ausgangspunkt befassen müssen.

Die Community kann viel von der Art und Weise lernen, wie Docker ihre Bilder baut und versendet. Sie sind sehr einfach sowohl als laufende Behälter als auch als Vorlagen zu verwalten, die einfach zu verteilen und zu verwenden sind.z