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/fstabhinzu . -
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/sdczu . 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
lxdundzfsutils-linux:sudo apt install lxd zfsutils-linux -
Fügen Sie Ihren Unix-Benutzer zum
lxdhinzu Gruppe:sudo usermod -a -G lxd username -
Starten Sie eine neue SSH-Sitzung, damit diese Änderung wirksam wird:
-
Führen Sie
lxd initaus um LXD zu initialisieren:sudo lxd initSie 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 listGenerating 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 mycontainerCreating 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
mycontaineraus :lxc exec mycontainer -- apt update lxc exec mycontainer -- apt upgradeHinweis Die Zeichen
--denlxcanweisen Befehl, keine weiteren Befehlszeilenparameter zu analysieren. -
Öffnen Sie eine Shell-Sitzung in
mycontainer:lxc exec mycontainer -- sudo --login --user ubuntuTo 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 kannsudoverwenden und erfordert kein Passwort, um administrative Aufgaben auszuführen.Das
sudoDer Befehl stellt eine Anmeldung für das vorhandene Kontoubuntubereit . -
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
iptableshinzu 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_ipersetzen undyour_container_ipmit 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
iptablesRegel bleibt beim Neustart bestehen, indemiptables-persistentinstalliert 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