Ist es möglich, LXC-Container in einem anderen LXC-Container zu starten?
Ist es möglich, LXC-Container in einem anderen LXC-Container zu starten?
Antworten:
Ich werde hier ein paar Mythen zerstreuen.
Das ist nur eine schlechte Idee. Es tut mir Leid. - Jacob 5. März um 20:30 Uhr
Ich verstehe nicht, dass das eine schlechte Idee ist. Es ist wirklich nur eine Chroot in einer Chroot. Einerseits könnte dies möglicherweise die Leistung in vernachlässigbarer Weise verringern (nichts im Vergleich zum Ausführen einer VM innerhalb einer VM). Auf der anderen Seite ist es wahrscheinlich sicherer (z. B. stärker vom Root-Host-System und seinen Bestandteilen isoliert).
Haben Sie tatsächlich einen wirklichen Grund dafür? Bitte denken Sie daran, dass sich die hier gestellten Fragen auf aktuelle Probleme beziehen sollten. - Zoredache 5. März um 21:52 Uhr
Ich stimme dem folgenden Kommentar des Posters zu 100% zu. Außerdem kann ich davon ausgehen, dass jeder, der hier eine Frage stellt, der Meinung ist, dass er einen echten Grund hat, dies zu tun.
Ich denke, dass lxc in der Lage sein sollte, die VM-Migration (und auch Backup + Recovery) zu vereinfachen. Aber ich bin mir nicht sicher, ob es Fälle gibt, in denen kein Zugriff auf das Host-Betriebssystem besteht (z. B. günstiges VPS). - Mikhail 6. März um 11:17 Uhr
Diese Frage traf mich im Juni, als ich zum ersten Mal in LXC für PaaS / IaaS-Projekte eintauchte, und ich war besonders an der Möglichkeit interessiert, Benutzern die Emulation von Cloud-Umgebungen für Entwicklungszwecke zu ermöglichen.
LXCeption. Wir sind zu tief. - Tom O'Connor 6. März um 22:46
Ich habe ein bisschen gelacht, als ich dieses gelesen habe, aber das ist überhaupt nicht der Fall :)
Wie auch immer, ich habe schließlich eine VirtualBox-Umgebung mit einer Standardinstallation von Ubuntu 12.04 LTS Server Edition eingerichtet, nachdem ich dies alles gelesen hatte und dachte, dass dies zu 100% möglich sei. Nach der Installation von LXC habe ich einen neuen Container erstellt und LXC mit apt-get im Container installiert. Der Großteil der Installation verlief gut, führte jedoch zu einem Fehler, der möglicherweise auf ein Problem mit dem cgroup-lite-Paket zurückzuführen war, dessen Startjob nach der Installation des Pakets nicht gestartet werden konnte.
Nach einigem Suchen bin ich auf diesen schönen Artikel auf stgraber.org gestoßen (die Goodies verstecken sich unter der Rubrik "Container Nesting"):
sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container
Die Installation dieser AppArmor-Richtlinie und der Neustart des Daemons haben den Trick ausgeführt (vergessen Sie jedoch nicht, die Netzwerkbereiche zu ändern!). Tatsächlich dachte ich, dass ein bestimmtes Snippet so wichtig ist, dass ich es unter http://pastebin.com/JDFp6cTB gespiegelt habe, für den Fall, dass der Artikel jemals offline geschaltet wird.
Danach sudo /etc/init.d/cgroup-lite start
gelang es und es wurde reibungslos gesegelt.
Es ist also möglich, einen LXC-Container in einem anderen LXC-Container zu starten :)
Mit Ubuntu 14.04 (vertrauenswürdig) können Sie einfach Folgendes in die übergeordnete Containerkonfiguration einfügen:
lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting
Referenz: https://help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (Suche nach "nesting")
Stellen Sie sicher, dass Sie das Netzwerk vor dem Booten vorkonfiguriert haben, um eine lange Pause zu vermeiden, bevor der Anmeldebildschirm angezeigt wird!
HTH
~/.config/lxc/default.conf
werden sollen, funktioniert das Hinzufügen einer Datei unter dem Konto des Benutzers, der den Container erstellt, und das Hinzufügen dieser beiden Zeilen problemlos.
Wussten Sie, dass Sie jetzt ALLES von Openstack in einem einzigen LXC-Container installieren können? Jeder der Openstack- "Dienste" (nova, swift usw.) wird dann alle in "verschachtelten" lxc-Containern innerhalb des "master / parent" -Containers installiert.
Es dauert eine Weile, bis alles installiert ist, aber wenn Sie fertig sind, können Sie mit einer OpenStack-Testumgebung auf Ihrem Laptop oder Desktop experimentieren.
Wenn Sie OpenStack stoppen möchten, müssen Sie nur den Master / Parent-Container stoppen, um Openstack neu zu starten.
Ja, Sie können geschachtelte LXC-Container erstellen, und trotz des ersten Kommentars gibt es Zeiten und Anwendungsfälle, in denen geschachtelte Container sicherlich nützlich sind. Siehe Stephane Grabers 10-teiligen LXC-Blog, aber insbesondere den Abschnitt Container Nesting -
Stephane Grabers 10-teilige Serie auf LXC
Anwendungsfälle: Angenommen, Sie möchten eine mandantenfähige LXC-Umgebung. Erstellen Sie einen Master-Container für jede Person oder Organisation, und stellen Sie sicher, dass die Schachtelung aktiviert ist, indem Sie die 2 cmds zur Konfigurationsdatei des LXC-Containers hinzufügen. Als nächstes erstellen Sie in jedem Master-Container Ihre verschachtelten Unter-Container, in denen Sie die Apps, Desktops usw. installieren, die jede Gruppe benötigt. HINWEIS: Während das Standardnetzwerk für die Master-Container 10.0.3.x ist, sind die verschachtelten Container standardmäßig 10.0.4.x (Sie können dies bei Bedarf auch ändern).
Was ist der größte Vorteil, den ich bei der Verwendung von Nested LXC hatte? Wenn Sie den Master-Container lxc-stoppen und ihn lxc-klonen, klonen Sie nicht nur den Master, sondern alle Sub-Container. Dies ist praktisch für schnelle Backups. Dieser Ansatz ist auch nützlich, wenn Sie jemals eine LXC-Livemigration mit CRIU durchführen möchten. Wenn Sie einen der Master-Container auf einen anderen Computer migrieren, migrieren Sie ihn und alle verschachtelten Container.
Als letztes Beispiel für ein cooles LXC-Nesting haben Stephane Graber und andere einen Simulator für "The Internet" mit LXC, BPG und OSPF in einem LXC-Container erstellt. In diesem 1 LXC-Master- oder übergeordneten LXC-Container befinden sich 512 verschachtelte LXC-Container, in denen jeweils Quagga für das BGP / OSPF-Routing ausgeführt wird. Zusammen simulieren diese 512 Internet- "Knoten" das Internet. Diese Implementierung wurde auf der NSEC-Sicherheitskonferenz 2014 für alle Teilnehmer verwendet, um mit der Sicherheit im Internet zu experimentieren.
Die Quelle dafür ist auf Githug unter: 2014 NSEC LXC Simulator für The Internet Github Code