Cloud-Init

Cloud-Init und VMs

Cloud-Init und VMs
Der folgende Artikel spricht ein wenig über cloud-init und die damit verbundenen Probleme 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 zu Punkt Nummer 3.

1. Was es macht?

Haben Sie sich jemals gefragt, wie VPS-Anbieter Ihre VMs konfigurieren, Ihre SSH-Schlüssel hinzufügen, Benutzer erstellen und Pakete installieren, wenn Sie eine neue VM in der "Cloud" starten? Nun, die Antwort für die meisten Anbieter lautet Cloud-Init. Die meisten Betriebssysteme und Distributionen liefern virtuelle Festplatten-Images mit ihren jeweiligen Betriebssystemen, die im Image installiert sind. Die Installation ist sehr minimal und kann als Vorlage für das Root-Dateisystem des Betriebssystems dienen. Die OS-Maintainer sind auch so freundlich, das virtuelle Disk-Image für alle verschiedenen Formate bereitzustellen, von Raw-Disk-Images über qcow2 bis hin zu vmdk, vdi und vhd.

Das Image hat auch ein zusätzliches Paket vorinstalliert und das ist cloud-init. Es ist die Aufgabe von cloud-init, initialisieren die VM (normalerweise innerhalb eines Cloud-Hosting-Dienstes wie DigitalOcean, AWS oder Azure) mit dem Hosting-Provider sprechen Datenquelle und rufen Sie die Konfigurationsinformationen ab, die es dann verwendet, um die VM zu konfigurieren.

Die Konfigurationsinformationen können Folgendes umfassen: Benutzerdaten wie SSH-Schlüssel, Hostname der Instanz, Benutzer und Passwörter zusammen mit jedem anderen beliebigen Befehl, den der Benutzer ausführen möchte.

2. Das Problem mit Cloud-Init

Cloud-init ist ein großartiges Tool, wenn Sie ein Cloud-Benutzer sind, wenn Sie VMs oder Container hochfahren und Ihr Cloud-Anbieter so freundlich ist, Sie nach einer Cloud-Konfiguration zu fragen, es ist großartig! Mit einer Cloud-Konfigurationsdatei, auch bekannt als Ihre Benutzerdaten, können Sie Benutzer hinzufügen, beliebige Befehle ausführen und Pakete installieren, während die VM erstellt wird. Der Vorgang kann immer wieder wiederholt werden, ohne dass mühsame Befehle immer wieder eingegeben werden müssen. Bald haben Sie eine Flotte von VMs, alle mit identischer Konfiguration.

Wenn Sie jedoch etwas tiefer graben und sehen, wie die Wurst hergestellt wird, werden Sie einige Aspekte von cloud-init in Frage stellen. Standardmäßig ist die Datenquelle beispielsweise wie ein REST-Endpunkt, und diese sind im Wesentlichen im cloud-init-Paket selbst fest codiert. Sicher, Sie können selbst eine Datenquelle einrichten, aber der Prozess ist umständlich und zeitintensiv. Die Dokumentation dazu ist so gut wie nicht vorhanden.

Die offizielle Dokumentation ist nichts anderes als ein Benutzerhandbuch für Endbenutzer, die auf bereits vorhandene Cloud-Dienste angewiesen sind. Es sagt Ihnen nicht, wie Sie Ihre eigene Cloud-Init-Datenquelle einrichten können, falls Sie ein aufstrebender Anbieter sind. Sogar die Endbenutzerdokumentation ist schlecht, und ich würde den Leuten empfehlen, stattdessen das hervorragende Tutorial von DigitalOcean zu verwenden.

Erschwerend kommt hinzu, dass es für Benutzer mit Heimvirtualisierungslabors und kleinen VPS-Startups schwierig ist, von diesen leichten Cloud-Images zu profitieren. Ohne eine Cloud-Init-Datenquelle oder Hacker, die schwer zu automatisieren und zu skalieren sind, können Sie eine VM nicht wirklich mit diesen Vorlagen starten. Mit anderen Worten, Sie können Cloud-Init nicht einmal ignorieren, es sei denn, Sie möchten Ihre eigenen Vorlagen erstellen.

In klassischer Systemd-Manier befreit es sich von seinen vordefinierten Rollen und fängt an, mit Netzwerken und anderen Teilen des Betriebssystems durcheinander zu kommen, was die Benutzer abschreckt. Es wird in Ubuntu 18 gebündelt.04 Server ISO was absolut keinen Sinn macht (zumindest nicht für mich).

3. Problemumgehung für Heimlabore

Das Gerede beiseite, ich habe immer noch mit cloud-init im Alltag zu tun. Ich habe eine sehr minimale Debian 9-Installation auf x86_64-Hardware, die ich als KVM-Hypervisor verwende. Ich wollte unbedingt die qcow2-Disk-Images verwenden, die von Ubuntu und CentOS geliefert werden. Auf diesen Disk-Images ist das Betriebssystem vorinstalliert, und um sie zu verwenden, müssen Sie nur:

  1. Kopieren Sie sie als virtuelles Festplatten-Image Ihrer VM.
  2. Ändern Sie die virtuelle Größe des Root-Dateisystems auf die gewünschte Größe (mindestens 10 GB werden empfohlen). Dadurch wird die physische Größe Ihrer VM nicht erhöht, aber das Festplatten-Image kann mit der Zeit wachsen, wenn die VM mehr Daten hinzufügt.
  3. Konfigurieren Sie die VMs mit cloud-init. Die absolute Mindestanforderung besteht darin, das Passwort oder die SSH-Schlüssel des Root-Benutzers festzulegen, aber Sie können so ziemlich alles tun, was Cloud-init in der Lage ist.

Folgende Schritte werden befolgt:

  1. Laden Sie das Cloud-Image Ihres bevorzugten Betriebssystems 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/images
  1. Erstellen Sie eine leere virtuelle Festplatte Ihrer gewünschten Größe und expandieren Sie das heruntergeladene qcow2-Image hinein. Ich möchte die VM-Festplatten im Verzeichnis /var/lib/libvirt/images/ speichern, Sie können ein anderes Verzeichnis auswählen. Was auch immer Sie wählen, führen Sie die folgenden Befehle im selben Verzeichnis aus:
$ qemu-img create -f qcow2 myVM.qcow2 8G ## Erstellen Sie eine Festplatte mit
Größe der virtuellen Festplatte von 8 GB
$ virt-resize --expand /dev/sda1 /var/lib/libvirt/boot/xenial-server-
cloudimg-amd64-disk1.img
./meineVM.qcow2
  1. Cloud-Init-Dateien erstellen. Dies sind Benutzerdaten- und Metadatendateien:
$ vim-Metadaten
Instanz-ID: myVM
lokaler Hostname: myVM

$ vim Benutzerdaten
#cloud-config
Benutzer:
- Name: Wurzel
chpasswd:
Liste: |
root:myPassword
ablaufen: 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 Standardbenutzername unterscheidet sich von einem Betriebssystem zum anderen, weshalb ich die Angabe eines Benutzers empfehle, auch wenn es nur so ist Wurzel. Der nächste Teil der Benutzerdatendatei weist cloud-init an, das Passwort für alle Benutzer zu konfigurieren, denen Sie ein Passwort zuweisen möchten. Auch hier setze ich nur das Passwort für den Root-Benutzer, und es ist mein Passwort. Stellen Sie sicher, dass zwischen dem Doppelpunkt und der Kennwortzeichenfolge kein Leerzeichen ist.

Besser noch, Sie können SSH-Schlüssel verwenden, anstatt hartcodierte Passwörter herumliegen zu haben.

$ vim Benutzerdaten
#cloud-config
Benutzer:
- Name: Wurzel
ssh_pwauth: Stimmt
ssh_authorized_keys:
- ssh-rsa
  1. Betten Sie die Benutzerdaten- und Metadatendateien in eine ISO ein.
$ genisoimage -Ausgabe 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/images/

  1. Gehen Sie in das Verzeichnis /var/lib/libvirt/images und initialisieren Sie die VM mit dem Befehl virt-install: $ virt-install --import --name myVM --memory 2048 --vcpus 2 --cpu host
    --Datenträger myVM.qcow2,format=qcow2,bus=virtio --disk myVM-cidata.iso,device=cdrom
    --network bridge=virbr0,model=virtio --os-type=linux
    --os-variante=ubuntu16.04 --noautoconsole

    Sie können jetzt versuchen, sich bei der VM anzumelden, indem Sie den Befehl virsh console myVM verwenden und sich mit dem Root-Benutzernamen und dem entsprechenden Passwort anmelden. Um die Konsole zu verlassen, geben Sie einfach Strg+] ein

Fazit

Die Cloud-Images, die die meisten Anbieter liefern, sind sehr effizient in Bezug auf die Ressourcenauslastung und fühlen sich auch sehr schnell und reaktionsschnell an. Die Tatsache, dass wir uns als Ausgangspunkt mit der umständlichen Cloud-Init-Konfiguration auseinandersetzen müssen, behindert nur die Akzeptanz von KVM und verwandten Technologien durch die Community.

Die Community kann viel von der Art und Weise lernen, wie Docker seine Images erstellt und ausliefert. Sie sind sehr einfach zu verwalten, sowohl als laufende Container als auch als Vorlagen, die einfach zu verteilen und zu verwenden sind.z

Vulkan für Linux-Benutzer
Mit jeder neuen Grafikkartengeneration stoßen Spieleentwickler an die Grenzen der grafischen Wiedergabetreue und kommen dem Fotorealismus einen Schrit...
OpenTTD vs. Simutrans
Das Erstellen einer eigenen Transportsimulation kann Spaß machen, entspannend und äußerst verlockend sein. Deshalb sollten Sie so viele Spiele wie mög...
OpenTTD-Tutorial
OpenTTD ist eines der beliebtesten Wirtschaftssimulationsspiele auf dem Markt. In diesem Spiel musst du ein wunderbares Transportunternehmen aufbauen....