Frage Ist es möglich, LXC-Container im LXC-Container zu starten?


Ist es möglich, LXC-Container in einem anderen LXC-Container zu starten?


21
2018-03-05 20:08


Ursprung


Hast du eigentlich einen echten Grund dafür? Bitte denken Sie daran, dass die Fragen hier stehen sollten tatsächliche Probleme, denen Sie gegenüberstehen. - Zoredache
Ich denke, dass lxc in der Lage sein sollte, die VM-Migration zu vereinfachen (und auch Backup + Recovery). Aber ich bin mir nicht sicher Fälle, wenn es keinen Zugriff auf Host-OS (billige vps zum Beispiel) gibt. - Mikhail


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 sehe nicht, wie das eine schlechte Idee ist. Es ist wirklich nur eine Chroot in einer Chroot. Auf der einen Seite könnte es möglicherweise die Leistung auf eine vernachlässigbare Weise verringern (nichts im Vergleich zum Ausführen einer VM in einer VM). Auf der anderen Seite ist es wahrscheinlich sicherer (z. B. mehr isoliert von dem Root-Host-System und seinen Bestandteilen).

Hast du eigentlich einen echten Grund dafür? Bitte denken Sie daran, dass sich die Fragen hier auf tatsächliche Probleme beziehen sollten, denen Sie gegenüberstehen. - Zoredache 5. März um 21:52 Uhr

Ich stimme zu 100% mit dem folgenden Kommentar des Posters überein. Außerdem denke ich, dass jeder, der hier eine Frage stellt, wahrscheinlich denkt, dass er einen wirklichen Grund hat, [es] zu tun.

Ich denke, dass lxc in der Lage sein sollte, die VM-Migration zu vereinfachen (und auch Backup + Recovery). Aber ich bin mir nicht sicher Fälle, wenn es keinen Zugriff auf Host-OS (billige vps zum Beispiel) gibt. - Mikhail 6. März um 11:17 Uhr

Ich bin im Juni auf diese Frage gestoßen, als ich zum ersten Mal in LXC für PaaS / IaaS-Projekte eintauchte, und ich war besonders daran interessiert, Benutzern zu ermöglichen, Cloud-Umgebungen für Entwicklungszwecke zu emulieren.

LXCeption. Wir sind zu tief. - Tom O'Connor 6. März um 22:46 Uhr

Ich habe ein wenig gelacht, als ich das hier gelesen habe, aber das ist überhaupt nicht der Fall :)

Wie auch immer, ich habe nach dem Lesen der ganzen Sache eine VirtualBox-Umgebung mit einer Bestandsinstallation von Ubuntu 12.04 LTS Server Edition eingerichtet und dachte, dass dies zu 100% möglich ist. Nach der Installation von LXC habe ich einen neuen Container erstellt und LXC mit apt-get im Container installiert. Der Großteil der Installation schritt gut voran, führte jedoch aufgrund eines Problems mit dem Paket cgroup-lite, dessen Upstart-Auftrag nach der Installation des Pakets nicht gestartet werden konnte, zu einem Fehler.

Nach einigem Suchen stieß ich auf dieses schöner Artikel bei stgraber.org (Die Goodies verstecken sich unter dem Abschnitt "Container-Schachtelung"):

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 Zweck erfüllt (vergiss aber nicht, die Netzwerkbereiche zu ändern!). In der Tat dachte ich, dass ein bestimmter Ausschnitt so wichtig war, dass ich es gespiegelt habe. http://pastebin.com/JDFp6cTB nur für den Fall, dass der Artikel jemals offline geht.

Nachdem, sudo /etc/init.d/cgroup-lite start gelungen und es war glatt Segeln.

Also, ja, es ist möglich einen LXC Container innerhalb eines anderen LXC Containers zu starten :)


44
2017-08-25 18:31



Diese Konfiguration deaktiviert den AppArmor-Schutz ziemlich (indem der Container unbeschränkt ausgeführt wird). AppArmor soll "den Host vor zufälligen Zugriffsfehlern im Container schützen". Diese Konfiguration öffnet den lxc-Host, der von Ihrem verschachtelten lxc-Container ausgenutzt werden soll. Der verschachtelte LXC-Host bietet möglicherweise auch keinen Schutz für seine Container. Im Allgemeinen wird das Deaktivieren dieses Schutzes nicht empfohlen. - Reece45
Gibt es einen realisierbaren sicheren Ansatz, um lxc in lxc zu betreiben? - Mascarpone
Wirklicher Anwendungsfall: Ich habe einen LXC-Container, der jenkins ausführt, und ich möchte, dass jenkins LXC-Container ausführen kann, bevor Integrationstests ausgeführt werden. Alternativen: jenkins außerhalb von LXC ausführen oder LXC-Container auf dem Host über ssh (hässlich) erstellen. - Giovanni Toraldo


Mit Ubuntu 14.04 (trusty) können Sie einfach Folgendes in der übergeordneten Containerkonfiguration hinzufü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 "Verschachtelung")

Stellen Sie sicher, dass Sie das Netzwerk vor dem Booten vorkonfiguriert haben, um eine lange Pause zu vermeiden, bevor der Login-Bildschirm erscheint!

HTH


13
2018-06-05 13:49



Funktioniert perfekt - danke! Für Benutzer wie mich, die möglicherweise nicht bereits eine Eltern-Container-Konfiguration hatten, in die die obigen Zeilen eingefügt werden, fügen Sie eine Datei hinzu ~/.config/lxc/default.conf unter dem Konto des Benutzers, der den Container erstellt und diese beiden Zeilen hinzufügt, funktioniert es gut. - Brandon Rhodes
Zurück im Jahr 2017! Kürzlich muss ich Docker innerhalb lxc für eine "Enterprise-y" -App einrichten - funktioniert gut, aber nicht fragen ... - Lester Cheung


Außerdem ... wussten Sie, dass Sie jetzt ALL OpenStack in einem einzigen LXC-Container installieren können. Jeder der Openstack- "Dienste" (Nova, Swift usw.) wird dann alle in "verschachtelte" lxc-Container innerhalb des "Master / Parent" -Containers installiert.

Es braucht eine Weile, um alles zu installieren, aber wenn Sie fertig sind, haben Sie eine schöne Test-OpenStack-Umgebung auf Ihrem Laptop oder Desktop zum Experimentieren.

Wenn Sie OpenStack stoppen möchten, stoppen Sie einfach den Master- / Parent-Container, um OpenStack neu zu starten.

sehen: Openstack Single Installer Anweisungen


1
2018-01-03 14:30





Ja, Sie können verschachtelte LXC-Container verwenden und trotz des ersten Kommentars gibt es Zeiten und Anwendungsfälle, in denen verschachtelte Container sicherlich nützlich sind. Sehen Sie Stephane Grabers 10-teiligen LXC Blog, aber insbesondere die Sektion Container Nesting -

Stephane Grabers 10-teilige Serie über 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 Sie die Verschachtelung aktivieren, indem Sie der Konfigurationsdatei des LXC-Containers die 2 cmds hinzufügen. Als nächstes erstellen Sie in jedem Master-Container Ihre verschachtelten Subcontainer, 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 ändern).

Was ist der größte Vorteil? Ich habe Nested LXC verwendet? Wenn du den Master-Container lxc-stoppst und ihn lxc-klonst, klonst du nicht nur den Master, sondern auch alle Sub-Container ... das ist praktisch für schnelle Backups. Dieser Ansatz ist auch praktisch, wenn Sie LXC-Live-Migration mit CRIU durchführen möchten. Wenn Sie einen der Master-Container auf einen anderen Computer migrieren, migrieren Sie ihn und alle verschachtelten Container.

Für ein cooles Beispiel der LXC-Verschachtelung verwenden Stephane Graber und andere einen Simulator für "The Internet" mit LXC, BPG und OSPF, alle in 1 LXC-Container. In diesem 1 LXC- "Master- oder Parent" -LXC-Container befinden sich 512 verschachtelte LXC-Container, die jeweils Quagga für BGP / OSPF-Routing ausführen. Zusammen simulieren diese 512 Internet- "Knoten" das Internet. Diese Implementierung wurde auf der NSEC-Sicherheitskonferenz 2014 für alle Teilnehmer verwendet, um mit Sicherheit im Internet zu experimentieren.

Die Quelle dafür ist auf Githug bei: 2014 NSEC LXC-Simulator für den Internet-Github-Code


1
2018-01-03 14:23