Was ist LXD?
LXD (ausgesprochen „Lex-Dee“) ist ein System-Container-Manager, der auf LXC (Linux Containers) aufbaut und derzeit von Canonical unterstützt wird. Das Ziel von LXD ist es, ein Erlebnis zu bieten, das einer virtuellen Maschine ähnelt, jedoch eher durch Containerisierung als durch Virtualisierung. Im Vergleich zu Docker zum Bereitstellen von Anwendungen bietet LXD nahezu die vollständige Betriebssystemfunktionalität mit zusätzlichen Funktionen wie Snapshots, Live-Migrationen, Speicherverwaltung und mehr.
Die Hauptvorteile von LXD sind die hohe Containerdichte, die es unterstützen kann, und die Leistung, die es im Vergleich zu virtuellen Maschinen liefert. Ein Computer mit 2 GB RAM kann ein halbes Dutzend Container angemessen unterstützen. Darüber hinaus unterstützt LXD offiziell die Container-Images der wichtigsten Linux-Distributionen. Wir können die Linux-Distribution und -Version auswählen, die im Container ausgeführt werden soll.
Diese Anleitung beschreibt, wie man einen Linode für die Arbeit mit LXD einrichtet, wie LXD in der Praxis funktioniert und wie man allgemeine Probleme behebt.
Hinweis Der Einfachheit halber der Begriff Container wird in diesem Handbuch verwendet, um die LXD-Container zu beschreiben.
Bevor Sie beginnen
-
Wenn Sie dies noch nicht getan haben, erstellen Sie ein Linode-Konto und eine Compute-Instanz. Sehen Sie sich unsere Leitfäden Erste Schritte mit Linode und Erstellen einer Compute-Instanz an.
-
Folgen Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz, um Ihr System zu aktualisieren. Möglicherweise möchten Sie auch die Zeitzone festlegen, Ihren Hostnamen konfigurieren, ein eingeschränktes Benutzerkonto erstellen und den SSH-Zugriff sichern.
Speichervolume bereitstellen
Beim Einrichten von LXD können Sie Containerdaten entweder in einem externen Volume (z. B. einem Block Storage Volume) oder auf einer Festplatte speichern, die an Ihrem Linode angebracht ist.
Speichervolumen blockieren
-
Befolgen Sie die Anleitung So verwenden Sie Blockspeicher mit Ihrem Linode und erstellen Sie ein Blockspeichervolumen mit einer Größe von mindestens 20 GB und befestigen Sie es an Ihrem Linode. Notieren Sie sich den Gerätenamen und den Pfad zum Volume.
Achtung Nicht Formatieren Sie das Volume und fügen Sie es nicht zu
/etc/fstab
hinzu . -
Bearbeiten Sie Ihr Konfigurationsprofil und unter Starteinstellungen Wählen Sie GRUB 2 als dein Kernel. Weitere Informationen finden Sie unter Einen von der Distribution bereitgestellten Kernel auf einem KVM-Linode ausführen.
-
Starten Sie Ihren Linode über den Linode Manager neu.
Datenträger
-
Suchen Sie im Linode Manager die Disks Abschnitt und klicken Sie auf Neuen Datenträger erstellen .
Hinweis Wenn der Distributionsfestplatte Ihres Linode bereits 100 % des verfügbaren Speicherplatzes zugewiesen sind, müssen Sie die Größe der Festplatte ändern, bevor Sie eine Speicherfestplatte erstellen können. Weitere Informationen finden Sie unter Größenänderung einer Festplatte.
-
Bearbeiten Sie das Konfigurationsprofil Ihres Linode. Unter Gerätezuweisung blockieren , weisen Sie Ihre neue Festplatte
/dev/sdc
zu . Notieren Sie sich diesen Pfad, den Sie beim Konfigurieren von LXD im nächsten Abschnitt benötigen. -
Unter Starteinstellungen Wählen Sie GRUB 2 als Ihr Kernel.
-
Starten Sie Ihren Linode über den Linode Manager neu.
LXD initialisieren
-
Installieren Sie die Pakete
lxd
undzfsutils-linux
:sudo apt install lxd zfsutils-linux
-
Fügen Sie Ihren Unix-Benutzer zum
lxd
hinzu Gruppe:sudo usermod -a -G lxd username
-
Starten Sie eine neue SSH-Sitzung, damit diese Änderung wirksam wird:
-
Führen Sie
lxd init
aus um LXD zu initialisieren:sudo lxd init
Sie werden während des Initialisierungsprozesses mehrmals dazu aufgefordert. Wählen Sie die Standardeinstellungen für alle Optionen außer
Use existing block device?
Wählen Sie für diese Option Ja und geben Sie dann den Pfad zu dem im vorherigen Abschnitt hinzugefügten Speichervolume ein.
LXD-Befehle
-
Alle Container auflisten:
lxc list
Generating a client certificate. This may take a minute... If this is your first time using LXD, you should also run: sudo lxd init To start your first container, try: lxc launch ubuntu:16.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+
-
Alle verfügbaren Container-Images auflisten:
lxc image list images:
+---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4 (3 more) | 39a3bf44c9d8 | yes | Alpine 3.4 amd64 (20180126_17:50) | x86_64 | 2.04MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4/armhf (1 more) | 9fe7c201924c | yes | Alpine 3.4 armhf (20170111_20:27) | armv7l | 1.58MB | Jan 11, 2017 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.4/i386 (1 more) | d39f2f2ba547 | yes | Alpine 3.4 i386 (20180126_17:50) | i686 | 1.88MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.5 (3 more) | 5533a5247551 | yes | Alpine 3.5 amd64 (20180126_17:50) | x86_64 | 1.70MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.5/i386 (1 more) | 5e93d5f4cae1 | yes | Alpine 3.5 i386 (20180126_17:50) | i686 | 1.73MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ | alpine/3.6 (3 more) | 5010616d9a24 | yes | Alpine 3.6 amd64 (20180126_17:50) | x86_64 | 1.73MB | Jan 26, 2018 at 12:00am (UTC) | +---------------------------------+--------------+--------+------------------------------------------+---------+----------+-------------------------------+ .....................................................................
Hinweis Die ersten beiden Spalten für den Alias und den Fingerabdruck stellen eine Kennung bereit, die verwendet werden kann, um das Container-Image beim Starten anzugeben.
-
Starten Sie einen neuen Container mit dem Namen
mycontainer
:lxc launch ubuntu:16.04 mycontainer
Creating mycontainer Starting mycontainer
-
Überprüfen Sie die Liste der Container, um sicherzustellen, dass der neue Container ausgeführt wird:
lxc list
+-------------+---------+-----------------------+---------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------------+---------+-----------------------+---------------------------+------------+-----------+ | mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0 | +-------------+---------+-----------------------+---------------------------+------------+-----------+
-
Führen Sie grundlegende Befehle in
mycontainer
aus :lxc exec mycontainer -- apt update lxc exec mycontainer -- apt upgrade
Hinweis Die Zeichen
--
denlxc
anweisen Befehl, keine weiteren Befehlszeilenparameter zu analysieren. -
Öffnen Sie eine Shell-Sitzung in
mycontainer
:lxc exec mycontainer -- sudo --login --user ubuntu
To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. [email protected]:~$
Hinweis
Die Ubuntu-Container-Images haben standardmäßig ein Nicht-Root-Konto mit dem Benutzernamen
ubuntu
. Dieses Konto kannsudo
verwenden und erfordert kein Passwort, um administrative Aufgaben auszuführen.Das
sudo
Der Befehl stellt eine Anmeldung für das vorhandene Kontoubuntu
bereit . -
Zeigen Sie die Containerprotokolle an:
lxc info mycontainer --show-log
-
Beenden Sie den Container:
lxc stop mycontainer
-
Container entfernen:
lxc delete mycontainer
Apache-Webserver mit LXD
Dieser Abschnitt erstellt einen Container, installiert den Apache-Webserver und fügt die entsprechenden iptables
hinzu Regeln, um Post 80 aufzudecken.
-
Starten Sie einen neuen Container:
lxc launch ubuntu:16.04 web
-
Aktualisieren Sie die Paketliste im Container.
lxc exec web -- apt update
-
Installieren Sie den Apache im LXD-Container.
lxc exec web -- apt install apache2
-
Fügen Sie die
iptables
hinzu Regel, um den Port 80 verfügbar zu machen. Wenn sich jemand über die öffentliche IP-Adresse mit Port 80 verbindet, leitet diese Regel ihn an Port 80 des Containers um.Sie müssen
your_public_ip
ersetzen undyour_container_ip
mit Ihrer öffentlichen IP bzw. Container-IP in diesem Befehl.PORT=80 PUBLIC_IP=your_public_ip CONTAINER_IP=your_container_ip sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "forward to the Apache2 container"'
-
Erstellen Sie die
iptables
Regel bleibt beim Neustart bestehen, indemiptables-persistent
installiert wird . Wenn Sie aufgefordert werden, die IPv4- und IPv6-Regeln zu speichern, klicken Sie auf Ja um sie zu retten.sudo apt install iptables-persistent
-
Navigieren Sie von Ihrem lokalen Computer in einem Webbrowser zur öffentlichen IP-Adresse Ihres Linode. Sie sollten die Standard-Apache-Seite sehen:
Nächste Schritte
Wenn Sie vorhaben, eine einzelne Website zu verwenden, dann eine einzelne iptables
Regel zum Website-Container reicht aus. Wenn Sie mehrere Websites verwenden möchten, müssen Sie einen Webserver wie NGINX installieren und einen Reverse-Proxy in einem Container einrichten. Die iptables
Regel würde dann zu diesem Container umleiten.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- LXD-Einführung
- Blog-Post-Reihe zu LXD 2.0
- LXD-Support-Community
- Testen Sie LXD Online