Firma Canonical opublikowała wersję menedżera kontenerów LXD 5.0 oraz wirtualnego systemu plików LXCFS 5.0. Kod LXD jest napisany w języku Go i udostępniany na licencji Apache 2.0. Wersja 5.0 została oznaczona jako wydanie z długoterminowym wsparciem — aktualizacje będą wytwarzane do czerwca 2027 roku.
Jako runtime do uruchamiania kontenerów wykorzystywane jest narzędzie LXC, które obejmuje bibliotekę liblxc, zestaw narzędzi (lxc-create, lxc-start, lxc-stop, lxc-ls itp.), szablony do budowania kontenerów oraz zestaw bindingów do różnych języków programowania. Izolacja odbywa się z użyciem mechanizmów jądra Linux. Dla izolacji procesów, staku sieciowego ipc, uts, identyfikatorów użytkowników i punktów montowania wykorzystuje się mechanizm przestrzeni nazw (namespaces). Ograniczenia zasobów są realizowane za pomocą cgroups. W celu obniżenia uprawnień i ograniczenia dostępu wykorzystuje się takie możliwości jądra, jak profile Apparmor i SELinux, polityki Seccomp, Chroots (pivot_root) oraz capabilities.
Oprócz LXC w LXD wykorzystywane są również komponenty z projektów CRIU i QEMU. Jeśli LXC jest niskopoziomowym narzędziem do manipulacji na poziomie pojedynczych kontenerów, to LXD zapewnia środki do centralnego zarządzania kontenerami rozmieszczonymi w klastrze składającym się z wielu serwerów. LXD jest realizowany jako proces działający w tle, akceptujący zapytania sieciowe przez REST API i obsługujący różne backendy magazynowe (drzewo katalogów, ZFS, Btrfs, LVM), migawki stanu, migrację na żywo działających kontenerów z jednej maszyny na drugą oraz środki do przechowywania obrazów kontenerów. LXCFS jest stosowany do symulacji w kontenerach pseudo-FS /proc i /sys, a wirtualizowanego przedstawienia cgroupfs, aby nadać kontenerom wygląd zwykłego niezależnego systemu.
Kluczowe ulepszenia:
- Możliwość hot plug i odłączenia dysków oraz urządzeń USB. W wirtualnej maszynie nowy dysk jest identyfikowany przez pojawienie się nowego urządzenia na szynie SCSI, a urządzenie USB — poprzez generację zdarzenia USB hotplug.
- Wprowadzono możliwość uruchamiania LXD nawet w warunkach braku możliwości nawiązania połączenia sieciowego, na przykład z powodu braku odpowiedniego urządzenia sieciowego. Zamiast wyświetlania błędu przy uruchamianiu LXD, teraz uruchamia maksymalną możliwą liczbę środowisk w obecnych warunkach, a pozostałe środowiska są uruchamiane po nawiązaniu połączenia sieciowego.
- Dodano nową rolę członków klastra — ovn-chassis, przeznaczoną dla klastrów wykorzystujących OVN (Open Virtual Network) do interakcji sieciowej (przez przypisanie roli ovn-chassis można выделить serwery do wykonywania funkcji routerów OVN).
- Proponowany jest zoptymalizowany tryb aktualizacji zawartości sekcji pamięci. W poprzednich wersjach aktualizacja polegała na tym, że najpierw kopiowano egzemplarz kontenera lub sekcję, na przykład za pomocą funkcji send/receive w zfs lub btrfs, po czym utworzona kopia była synchronizowana przez uruchomienie programu rsync. W celu zwiększenia efektywności aktualizacji, maszyn wirtualnych w nowej wersji wykorzystano zaawansowaną logikę migracji, w ramach której, jeśli serwery źródłowy i docelowy korzystają z jednego puli pamięci, zamiast rsync automatycznie stosowane są migawek i operacje send/receive.
- Przeprojektowano logikę identyfikacji środowisk w cloud-init: zamiast nazw środowisk jako instance-id teraz używa się UUID.
- Dodano obsługę przechwytywania wywołania systemowego sched_setscheduler, co pozwala nieuprzywilejowanym kontenerom zmieniać priorytety procesów.
- Wprowadzono opcję lvm.thinpool_metadata_size, która kontroluje rozmiar metadanych w thinpool.
- Przeprojektowano format pliku z informacjami sieciowymi dla lxc. Dodano wsparcie dla danych dotyczących łączenia interfejsów, mostków sieciowych, VLAN oraz sieci OVN.
- Podniesiono wymagania dotyczące minimalnych wersji komponentów: jądro Linux 5.4, Go 1.18, LXC 4.0.x i QEMU 6.0.
- W LXCFS 5 dodano wsparcie dla ujednoliconej hierarchii cgroup (cgroup2), zrealizowane /proc/slabinfo oraz /sys/devices/system/cpu, do budowy wykorzystano narzędzia meson.
Źródło: opennet.ru
