Czy można uruchomić kontener LXC w kontenerze LXC?


21

Czy można uruchomić pojemnik LXC w innym pojemniku LXC?


1
Czy naprawdę masz prawdziwy powód, aby to zrobić? Pamiętaj, że tutaj pytania powinny dotyczyć rzeczywistych problemów, z którymi się stykasz .
Zoredache,

6
Myślę, że lxc powinien być w stanie uprościć migrację maszyn wirtualnych (a także tworzenie kopii zapasowych + odzyskiwanie). Ale nie jestem pewien co do przypadków, w których nie ma dostępu do systemu operacyjnego hosta (na przykład tanie vps).
Michaił

Odpowiedzi:


45

Rozwiążę tutaj kilka mitów.

To tylko zły pomysł. Przepraszam. - Jacob 5 marca o 20:30

Nie rozumiem, jak to jest zły pomysł. To naprawdę tylko chroot w chroot. Z jednej strony może potencjalnie zmniejszyć wydajność w nieznaczny sposób (nic w porównaniu z uruchomieniem maszyny wirtualnej wewnątrz maszyny wirtualnej). Z drugiej strony, prawdopodobnie będzie bardziej bezpieczny (np. Bardziej odizolowany od głównego systemu hosta i jego składników).

Czy naprawdę masz prawdziwy powód, aby to zrobić? Pamiętaj, że tutaj pytania powinny dotyczyć rzeczywistych problemów, z którymi się borykasz. - Zoredache 5 marca o 21:52

Zgadzam się w 100% z następującym komentarzem plakatu. Ponadto uważam, że można bezpiecznie założyć, że każdy, kto zamieszcza tutaj pytanie, prawdopodobnie uważa, że ​​ma prawdziwy powód, aby to zrobić.

Myślę, że lxc powinien być w stanie uprościć migrację maszyn wirtualnych (a także tworzenie kopii zapasowych + odzyskiwanie). Ale nie jestem pewien co do przypadków, w których nie ma dostępu do systemu operacyjnego hosta (na przykład tanie vps). - Michaił 6 marca o 11:17

Właściwie natknąłem się na to pytanie w czerwcu, kiedy po raz pierwszy nurkowałem w LXC dla projektów PaaS / IaaS, i byłem szczególnie zainteresowany możliwością umożliwienia użytkownikom emulacji środowisk chmurowych w celach programistycznych.

LXCepcja. Jesteśmy za głęboko. - Tom O'Connor 6 marca o 22:46

Zaśmiałem się trochę, kiedy to przeczytałem, ale wcale tak nie jest :)

W każdym razie, po przeczytaniu tego wszystkiego, ostatecznie skonfigurowałem środowisko VirtualBox ze standardową instalacją Ubuntu 12.04 LTS Server Edition, myśląc, że było to w 100% możliwe. Po zainstalowaniu LXC utworzyłem nowy kontener i zainstalowałem LXC wewnątrz kontenera za pomocą apt-get. Większość instalacji przebiegła pomyślnie, ale ostatecznie spowodowała błąd z powodu problemu z pakietem cgroup-lite, którego zadanie upstart nie uruchomiło się po zainstalowaniu pakietu.

Po krótkich poszukiwaniach natknąłem się na ten świetny artykuł na stgraber.org (gadżety chowają się w sekcji „Zagnieżdżanie kontenerów”):

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

Zainstalowanie tej zasady AppArmor i ponowne uruchomienie demona załatwiło sprawę (nie zapomnij jednak zmienić zakresów sieci!). W rzeczywistości uważałem, że ten fragment kodu był tak ważny, że dublowałem go na stronie http://pastebin.com/JDFp6cTB na wypadek, gdyby artykuł kiedykolwiek został wyłączony.

Potem sudo /etc/init.d/cgroup-lite startudało się i było płynnie.

Tak, możliwe jest uruchomienie kontenera LXC w innym kontenerze LXC :)


1
Ta konfiguracja prawie wyłącza ochronę AppArmor (uruchamiając kontener nieskończony). AppArmor „ma na celu ochronę hosta przed przypadkowym niewłaściwym wykorzystaniem uprawnień w kontenerze”. Ta konfiguracja prawie otwiera hosta LXC do wykorzystania przez zagnieżdżony kontener LXC. Zagnieżdżony host LXC może również nie zapewniać ochrony kontenerom. Zasadniczo wyłączenie tej ochrony nie jest zalecane.
Reece45

czy istnieje realne bezpieczne podejście do uruchomienia lxc w lxc?
Mascarpone

10
Przypadek użycia w świecie rzeczywistym: mam kontener LXC z uruchomionymi jenkinami i chcę, aby jenkins mógł uruchamiać kontenery LXC przed wykonaniem testów integracyjnych. Alternatywy: uruchom jenkins poza LXC lub utwórz kontenery LXC na hoście przez ssh (brzydkie).
Giovanni Toraldo

13

W Ubuntu 14.04 (zaufany) możesz po prostu dodać następujące elementy w konfiguracji kontenera nadrzędnego:

lxc.mount.auto = cgroup
lxc.aa_profile = lxc-container-default-with-nesting

odniesienie: https://help.ubuntu.com/lts/serverguide/lxc.html#lxc-basic-usage (wyszukaj „zagnieżdżanie)

Upewnij się, że masz skonfigurowaną sieć przed uruchomieniem, aby uniknąć długiej przerwy przed wyświetleniem ekranu logowania!

HTH


1
Działa idealnie - dziękuję! Dla użytkowników takich jak ja, którzy mogliby nie mieć jeszcze konfiguracji nadrzędnego kontenera, w której można umieścić powyższe wiersze, dodanie pliku ~/.config/lxc/default.confpod kontem użytkownika, który tworzy kontener i dodanie do niego tych dwóch wierszy działa dobrze.
Brandon Rhodes

Powrót w 2017 roku! Ostatnio muszę skonfigurować dokera w lxc dla aplikacji „Enterprise-y” - działa dobrze, ale nie pytaj ...
Lester Cheung

1

Ponadto ... czy wiesz, że możesz teraz zainstalować WSZYSTKIE Openstack w jednym kontenerze LXC. Każda z „usług” Openstack (nowa, szybka itp.) Jest następnie instalowana w „zagnieżdżonych” kontenerach lxc w kontenerze „master / parent”.

Instalacja zajmuje dużo czasu, ale kiedy skończysz, masz fajne środowisko testowe OpenStack na laptopie lub komputerze stacjonarnym, z którym możesz eksperymentować.

Jeśli chcesz zatrzymać OpenStack, po prostu lxc-stop sam kontener nadrzędny / nadrzędny, aby zrestartować Openstack.

patrz: instrukcje Openstack dla pojedynczego instalatora


1

Tak, możesz zrobić zagnieżdżone kontenery LXC i pomimo pierwszego komentarza istnieją czasy i przypadki użycia, w których zagnieżdżone kontenery są z pewnością przydatne. Zobacz 10-częściowy blog LXC Stephane Grabera, ale w szczególności rozdział Zagnieżdżanie kontenerów -

10 części serii Stephane Graber na LXC

przypadki użycia: Załóżmy, że potrzebujesz środowiska LXC dla wielu dzierżawców. Utwórz 1 kontener główny dla każdej osoby lub organizacji, pamiętając o włączeniu zagnieżdżania, dodając 2 cmd do pliku konfiguracyjnego kontenera LXC. Następnie w każdym kontenerze głównym utwórz zagnieżdżone subkontenery, w których instalujesz aplikacje, komputery stacjonarne itp., Których wymaga każda grupa. UWAGA: podczas gdy domyślną siecią dla kontenerów głównych będzie 10.0.3.x, kontenery zagnieżdżone będą domyślnie 10.0.4.x (możesz zmienić, jeśli to konieczne).

Jaka jest największa zaleta, jaką miałem przy użyciu Nested LXC? Jeśli zatrzymasz lxc-stop kontener Master i lxc-go sklonujesz ... klonujesz nie tylko Master, ale wszystkie sub-kontenery ... jest to przydatne do szybkich kopii zapasowych. Takie podejście jest również przydatne, jeśli kiedykolwiek chcesz przeprowadzić migrację na żywo LXC w / CRIU. Gdy migrujesz jeden z kontenerów głównych na inną maszynę ... faktycznie migrujesz go i wszystkie zagnieżdżone kontenery.

Wreszcie, na fajny przykład zagnieżdżania LXC, użyj Stephane Graber i inni zbudowali symulator dla „Internetu” używając LXC, BPG i OSPF w jednym kontenerze LXC. Wewnątrz tego 1 „nadrzędnego lub nadrzędnego” kontenera LXC LXC znajduje się 512 zagnieżdżonych kontenerów LXC, z których każdy uruchamia Quagga do routingu BGP / OSPF. Te 512 internetowych „węzłów” symuluje Internet. Ta implementacja została wykorzystana podczas konferencji bezpieczeństwa NSEC w 2014 r., Aby wszyscy uczestnicy mogli eksperymentować z bezpieczeństwem w Internecie.

Źródło tego znajduje się w Githug na: 2014 NSEC LXC Simulator for The Internet github code

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.