Właściwy sposób obsługi kontenerów LXC na btrfs

11

Powiedzmy, że mamy jeden serwer z zainstalowanym LXC i kontener LXC używany jako podstawowy obraz /var/lib/lxc/ubuntu_base. Dla uproszczenia zapomnijmy o zmianach konfiguracji po skopiowaniu podstawowego img.

niektórzy sugerują używanie podwoluminów i migawek do tworzenia nowych kontenerów, ale można łatwo zrobić cp - reflink z podobnymi wynikami.

Jaki jest zatem odpowiedni sposób (lub który jest lepszy) do zarządzania wieloma kontenerami?

  • migawki

Ten sposób wydaje się najlepszy, ale polecenia takie jak lxc-destroy nie będą działać, ponieważ nie będzie w stanie usunąć katalogu.

btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • CP z reflink

Nie jestem pewien, czy istnieje jakakolwiek różnica w wydajności między tym a migawkami

cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
  • lub Czy jest jakiś inny lepszy sposób na zrobienie tego, o czym nie wiem.

edytować:

Jedną rzeczą, którą widziałem z opcją reflink, jest to, że nie możesz usunąć kontenera podstawowego, jeśli inne są uruchomione, ponieważ /proci /devsą zamontowane i nigdy się nie zmieniają, ponieważ odwołanie jest zawsze takie samo. Ale zamknięcie wszystkich skopiowanych pojemników wydaje się pomocne.

zidarsk8
źródło
Użyłem funkcji migawki btrfs do tworzenia nowych kontenerów - i działa dobrze (dość szybkie przydzielanie itp.). Jednak btrfs ma pamięć podręczną stron dla objętości podrzędnych - więc chociaż korzystanie z migawek jest szybkie / zajmuje mało miejsca na dysku, prawdopodobnie będziesz mieć wiele kopii tego samego pliku binarnego w pamięci.
David Goodwin,

Odpowiedzi:

2

Jestem na Ubuntu LTS 14 i właśnie uruchomiłem następujące (nawet po raz pierwszy) i działało to jak urok:

lxc-stop -n ubuntu_base
lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s
lxc-start -n ubuntu_base_c1 -d # make changes if needed
lxc-stop -n ubuntu_base_c1
lxc-snapshot -n ubuntu_base_c1

Użycie -s z lxc-clone wykona migawkę, jeśli sklep z zapleczem to btrfs (w twoim przypadku).

Sprawdź nowe klonowanie / migawki za pomocą

lxc-ls -f
btrfs subvolume list /var/lib/lxc

Mam nadzieję, że to pomaga!

dapithor
źródło
1
Zauważ, że w dzisiejszych czasach musisz określić btrfs jako magazyn kopii zapasowych po uruchomieniu lxc-create lub lxc-clone zamiast tego da ci nakładkę .
Lester Cheung
Aby po prostu utworzyć nowy „lekki” pojemnik, wydaje się, że dwie pierwsze linie są wystarczające (lxc-stop i lxc-klon), dzięki tej -sopcji, i że trzy ostatnie (lxc_start, lxc_stop, lxc_snapshot) są tylko proces pomocniczy do zarządzania przyszłymi ewolucjami kontenerów. Czy to jest poprawne ?
lalebarde
3

jeśli będziesz używać podwoluminów btrfs dla lxc, musisz dodać opcję user_subvol_rm_allowedw swoim /etc/fstab. Przykład wyodrębniony z jednego pliku fstab:

UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0

opcja pozwoli ci usunąć subvol bez rootowania, tylko zwykły użytkownik. Z tej możliwości korzysta lxc, gdy migawki przechodzą w podwoluminach btrfs

Yonsy Solis
źródło
3

Zgadnij, zależy to od tego, jak duży jest twój podstawowy obraz. Prawdopodobnie stworzyłbym nowy kontener i użyłbym Soli / Kukiełki itp., Aby dostarczyć moje pojemniki i klon LXC tylko dla stosunkowo większych pojemników (np. Pojemniki deweloperskie z dużą ilością zainstalowanych i skonfigurowanych narzędzi).

Zauważ, że klon lxc użyje tego samego magazynu kopii zapasowych co źródło. Aby użyć podobjętości, musisz utworzyć swoje kontenery za pomocą „-B btrfs”. Na przykład:

lxc-create -B btrfs -n mycontainer -t ubuntu

Następnie sklonuj go za pomocą:

lxc-clone -s mycontainer mynewcontainer

Jeśli używasz zfs do przechowywania twoich pojemników, istnieje dodatkowa --zfsrootopcja do lxc-create, dzięki czemu możesz wybrać zpool inny niż domyślny „tank”. Na przykład:

lxc-create -B zfs --zfsroot=data/lxc

Udostępnij i ciesz się!

Lester Cheung
źródło
Jestem na debian wheezy z BTRFS. Wygląda na to, że opcja -B btrfsjest używana domyślnie - zakładam, ponieważ mój debian jest skonfigurowany z BTRFS. Właściwie stworzyłem swój pierwszy kontener (32-bitowy serwatkowy debian) bez tej opcji i stworzono dla niego podobjętość.
lalebarde
@lalebarde, który prawdopodobnie -B bestdziała, ale warto wiedzieć!
Lester Cheung,