Społeczność Linux Containers opublikowała wydanie narzędzi do organizacji pracy izolowanych kontenerów LXC 6.0, które zapewniają runtime odpowiedni zarówno do uruchamiania kontenerów z pełnym środowiskiem systemowym, zbliżonym do maszyn wirtualnych, jak i do uruchamiania nieuprzywilejowanych kontenerów pojedynczych aplikacji (OCI). LXC należy do narzędzi niskopoziomowych, działających na poziomie pojedynczych kontenerów. Do centralnego zarządzania kontenerami wdrożonymi w klastrze złożonym z kilku serwerów rozwijane są systemy Incus i LXD na bazie LXC. Wersja LXC 6.0 została zakwalifikowana jako wydanie z długoterminowym wsparciem, a aktualizacje będą dostarczane przez 5 lat (do 2029 roku). Kod LXC jest napisany w języku C i rozpowszechniany na licencji GPLv2.
W skład LXC wchodzą biblioteka liblxc, zestaw narzędzi (lxc-create, lxc-start, lxc-stop, lxc-ls itp.), szablony do tworzenia kontenerów oraz zestaw bindów dla różnych języków programowania. Izolacja realizowana jest przy użyciu wbudowanych mechanizmów jądra Linux. Do izolacji procesów, stosu sieciowego ipc, uts, identyfikatorów użytkowników i punktów montowania wykorzystywany jest mechanizm przestrzeni nazw (namespaces). Ograniczanie zasobów odbywa się za pomocą cgroups. Aby zmniejszyć uprawnienia i ograniczyć dostęp, wykorzystywane są możliwości jądra, takie jak profile Apparmor i SELinux, polityki Seccomp, Chroots (pivot_root) oraz capabilities.
Główne zmiany:
- Zapewniona została możliwość kompilacji uniwersalnego pliku wykonywalnego lxc, który łączy w jednej aplikacji wszystkie polecenia wcześniej wydawane w formie oddzielnych narzędzi „lxc-*”. Do kompilacji zbiorczego pliku wykonywalnego zaproponowano opcję „tools-multicall=true”, przy której wszystkie stare oddzielne narzędzia są tworzonych jako dowiązania symboliczne do narzędzia lxc. Kompilacja w formie jednego pliku wykonywalnego znacznie zmniejsza zużycie przestrzeni dyskowej przez narzędzie, co jest istotne dla systemów wbudowanych.
- Do biblioteki liblxc dodano funkcję set_timeout, która umożliwia ustawienie limitu czasu dla wszelkich operacji interakcji z monitorem LXC.
- W interfejsie mostów sieciowych lxcbr0 domyślnie aktywowane jest wsparcie IPv6 przypisanie adresów z podsieci IPv6 ULA (Unikalny Adres Lokalny).
- W narzędziu lxc-usernsexec dodano opcje „-u” i „-g” do zmiany identyfikatorów użytkownika i grupy (UID i GID).
- W narzędziu lxc-checkconfig zapewniono wyświetlanie wersji tylko po obecności komendy lxc-start oraz dodano informację o maksymalnie dozwolonej liczbie każdego typu przestrzeni nazw.
- Dodano wsparcie dla obrazów kontenerów w formacie OCI, w których do kompresji informacji wykorzystywana jest FS Squashfs.
- Do interakcji z systemd przez D-Bus wykorzystano oddzielną bibliotekę libdbus-1 zamiast libsystemd.
- Zaprzestano wsparcia systemu inicjalizacji Upstart.
Jednocześnie opublikowano wydanie projektu Incus, w ramach którego społeczność Linux Containers rozwija forka systemu zarządzania kontenerami LXD, stworzonego przez dawny zespół deweloperów, który kiedyś stworzył LXD. Kod Incus napisany jest w języku Go i rozpowszechniany jest na licencji Apache 2.0. Incus 6.0 jest pozycjonowany jako pierwsza stabilna gałąź, dla której zapewniony będzie długi cykl aktualizacji (LTS). Wśród zmian w Incus 6.0 wyróżnia się możliwość tworzenia interfejsów sieciowych za pośrednictwem API bridge.external_interfaces, poprawa obsługi uwierzytelniania przez JWT (JSON Web Token), wsparcie dla USB oraz wyświetlanie szczegółowych informacji systemowych w poleceniu „incus info —resources”, wsparcie wydania LXD 5.21 w narzędziu lxd-to-incus.
Incus i LXD dostarczają narzędzia do centralnego zarządzania kontenerami i maszynami wirtualnymi, wdrożonymi zarówno na jednym hoście, jak i w klastrze z kilku. serwerów. Projekt realizowany jest jako proces działający w tle, który przyjmuje żądania przez sieć za pomocą REST API i obsługuje różne backendy magazynów (drzewo katalogów, ZFS, Btrfs, LVM), migawki ze stanem, migrację na żywo działających kontenerów z jednej maszyny na drugą oraz narzędzia do przechowywania obrazów kontenerów. Jako runtime do uruchamiania kontenerów używane jest narzędzie LXC. Izolacja odbywa się za pomocą standardowych mechanizmów jądra Linux (przestrzenie nazw, cgroups, Apparmor, SELinux, Seccomp).
Społeczność Linux Containers nadzorowała rozwój LXD, zanim firma Canonical zdecydowała się przekształcić LXD w projekt komercyjny. Celem forka jest dostarczenie zarządzanej przez niezależną społeczność alternatywy dla projektu LXD, kontrolowanego przez firmę Canonical. Stworzenie Incus dało również możliwość przeprowadzenia prac nad usunięciem niektórych błędów koncepcyjnych, które zostały popełnione podczas rozwoju LXD, a które wcześniej nie mogły być poprawione bez naruszania kompatybilności wstecznej.
Firma Canonical opublikowała nową wersję systemu zarządzania kontenerami LXD 5.21.1. Gałąź LXD 5.21 jest oznaczona jako LTS i będzie wspierana do czerwca 2029 roku. Kod dodany do LXD przez pracowników Canonical jest dostarczany na licencji AGPLv3, ale kod uczestników zewnętrznych, do którego Canonical nie ma praw własnościowych, pozostaje na licencji Apache 2.0. Wśród funkcjonalnych zmian w LXD 5.21.1 można wymienić przeniesienie pakietu snap z LXD na gałęzie LXC 6.0 i LXCFS 6.0. Do API dodano rozszerzenie storage_volumes_all oraz powiązany z nim handler /1.0/storage_volumes do wyświetlania listy wszystkich wolumenów przechowywania. Dodano rozszerzenie instances_files_modify_permissions do zmiany przez API uprawnień dostępu do istniejących plików.
Dostępna jest wersja wirtualnego systemu plików LXCFS 6.0, używanego do symulacji w kontenerach pseudo-systemów plików /proc i /sys, a także do wirtualnej reprezentacji cgroupfs dla dystrybucji bez wsparcia dla przestrzeni nazw cgroup. W nowej wersji dodano opcję „—enable-cgroup”, która pozwala zarządzać włączeniem wbudowanej funkcjonalności do tworzenia wirtualnego drzewa cgroupfs dla kontenerów, korzystając z cgroupv1 (aktualnie większość dystrybucji wspiera oferowane przez jądro przestrzenie nazw dla cgroup, więc domyślne włączenie alternatywnej realizacji straciło sens i stało się opcjonalne). Ponadto, w LXCFS 6.0 zakończono filtrowanie CPU podczas formowania pliku /sys/devices/system/cpu, w zależności od stanu online/offline.
Źródło: opennet.ru
