2012-11-21 9 views
9

Czy istnieje sposób użycia LXC do zarządzania zasobami przy użyciu grup procesów bez tworzenia kontenerów? Pracuję nad usługą, która uruchamia dowolny kod w piaskownicy, dla której interesuje mnie tylko zarządzanie zasobami sprzętu. Nie chcę żadnych chroot; Chcę tylko, aby te grupy procesów miały dostęp do głównego systemu plików.LXC bez chroota

Powiedziano mi, że lxc jest lekki, ale wszystkie przykłady, które widzę, tworzą nowy kontener (tj. Katalog z pełnym systemem operacyjnym) dla każdego procesu LXC. Naprawdę nie widzę, jak to jest znacznie lżejsze niż jakiekolwiek inne rozwiązanie VM.

Czy istnieje sposób, w jaki LXC może być używany do kontrolowania i zarządzania wieloma grupami procesów, bez tworzenia osobnych kontenerów dla każdego z nich?

Odpowiedz

20

LXC nie jest systemem monolitycznym. Jest to zbiór funkcji jądra, które można wykorzystać do izolowania procesów na różne sposoby, oraz narzędzie przestrzeni użytkownika do korzystania ze wszystkich tych funkcji w celu utworzenia pełnoprawnych kontenerów. Jednak poszczególne funkcje są nadal dostępne samodzielnie, bez LXC. Co więcej, LXC nie wymaga chroota, a nawet kiedy dajesz mu chroot, możesz katalogi bind-mount z hosta do kontenera, dzieląc te konkretne drzewa katalogów między hostem a kontenerem.

Na przykład crupa są używane przez LXC do ustawiania limitów zasobów dla kontenerów. Można je jednak wykorzystać do ustawienia limitów zasobów dla grup procesów bez korzystania z narzędzi LXC. Możesz bezpośrednio manipulować /sys/fd/cgroup/memory lub , aby umieścić proces w cgroups, które ograniczają ilość pamięci lub procesora, z którego mogą korzystać. Lub jeśli korzystasz z systemu używającego systemd, możesz kontrolować limity pamięci dla grupy procesów przy użyciu MemoryLimit=200M lub tym podobnych w pliku .service dla danej usługi.

Jeśli chcesz używać LXC do łatwego zarządzania zasobami, możesz to zrobić z chroot lub bez niego. Podczas uruchamiania kontenera LXC możesz wybrać, które zasoby chcesz wyizolować; więc możesz utworzyć kontener z tylko wirtualną siecią i nic więcej; lub kontener z ograniczeniami pamięci, ale dzielący wszystko z hostem. Jedyne rzeczy, które zostaną wyizolowane, są określone w pliku konfiguracyjnym dla twojego kontenera. Na przykład lxc zawiera kilka przykładowych definicji kontenerów, które izolują tylko sieć; dzielą partycję główną i prawie wszystko inne z hostem. Oto jak uruchomić pojemnik identyczny do systemu hosta oprócz tego, że ma interfejs sieciowy:

sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash 

jeśli chcesz niektóre pliki mają być dzielone z gospodarzem, ale nie inne, masz dwie możliwości; można użyć współużytkowanego katalogu głównego i zamontować pliki, które mają się różnić w kontenerze; lub możesz użyć chroot, ale zamontuj pliki, które chcesz udostępnić w kontenerze.

Oto przykład konfiguracji kontenera, który dzieli wszystko z hostem za wyjątkiem /home; to zamiast wiązać-Wierzchowiec /home/me/fake-home nad /home w pojemniku:

lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0 

Lub jeśli chcesz mieć zupełnie inny pierwiastek, ale nadal mają pewne katalogi jak /usr można wiązać zamontować kilka katalogów w katalogu i użyj tego jako katalogu głównego systemu plików.

Masz wiele opcji i możesz wybrać izolowanie tylko jednego komponentu, więcej niż jednego lub tak wielu, jak obsługuje LXC, w zależności od Twoich potrzeb.

Powiązane problemy