Wirtualizacja na poziomie systemu operacyjnego

Wirtualizacja na poziomie systemu operacyjnego to paradygmat systemu operacyjnego (OS), w którym jądro umożliwia istnienie wielu izolowanych instancji przestrzeni użytkownika , zwanych kontenerami ( LXC , kontenery Solaris , Docker , Podman ), strefami ( kontenery Solaris ), wirtualnymi serwerami prywatnymi ( OpenVZ ), partycje , środowiska wirtualne (VE), jądra wirtualne ( DragonFly BSD ) lub więzienia ( więzienie FreeBSD lub więzienie chroot ). Takie instancje mogą wyglądać jak prawdziwe komputery z punktu widzenia działających w nich programów. Program komputerowy działający w zwykłym systemie operacyjnym widzi wszystkie zasoby (podłączone urządzenia, pliki i foldery, udziały sieciowe , moc procesora, wymierne możliwości sprzętowe) tego komputera. Jednak programy działające wewnątrz kontenera widzą tylko zawartość kontenera i urządzenia przypisane do kontenera.

W systemach operacyjnych typu Unix funkcja ta może być postrzegana jako zaawansowana implementacja standardowego mechanizmu chroot , który zmienia pozorny folder główny dla aktualnie uruchomionego procesu i jego elementów potomnych. Oprócz mechanizmów izolacji, jądro często zapewnia zarządzania zasobami w celu ograniczenia wpływu działań jednego kontenera na inne kontenery. Wszystkie kontenery Linuksa są oparte na mechanizmach wirtualizacji, izolacji i zarządzania zasobami zapewnianymi przez jądro Linuksa , w szczególności przestrzenie nazw Linuksa i grupy cgroup .

Termin kontener , choć najczęściej odnosi się do systemów wirtualizacji na poziomie systemu operacyjnego, jest czasami niejednoznacznie używany w odniesieniu do pełniejszych środowisk maszyn wirtualnych działających w różnym stopniu z systemem operacyjnym hosta, np. Hyper-V kontenery Microsoft . Bardziej historyczny przegląd wirtualizacji od 1960 roku można znaleźć na osi czasu rozwoju wirtualizacji .

Operacja

W zwykłych systemach operacyjnych dla komputerów osobistych program komputerowy widzi (nawet jeśli może nie mieć dostępu) do wszystkich zasobów systemu. Zawierają:

  1. Możliwości sprzętowe, które można wykorzystać, takie jak procesor i połączenie sieciowe
  2. Dane, które można odczytywać lub zapisywać, takie jak pliki, foldery i udziały sieciowe
  3. Podłączone urządzenia peryferyjne, z którymi może współpracować, takie jak kamera internetowa , drukarka, skaner lub faks

System operacyjny może zezwolić lub odmówić dostępu do takich zasobów w zależności od tego, który program ich zażąda oraz konta użytkownika, w kontekście którego działa. System operacyjny może również ukrywać te zasoby, tak że gdy program komputerowy je wylicza, nie pojawiają się one w wynikach wyliczania. Niemniej jednak, z programistycznego punktu widzenia, program komputerowy wchodzi w interakcję z tymi zasobami, a system operacyjny zarządza aktem interakcji.

Dzięki wirtualizacji systemu operacyjnego lub konteneryzacji możliwe jest uruchamianie programów w kontenerach, do których przydzielona jest tylko część tych zasobów. Program, który spodziewa się zobaczyć cały komputer, po uruchomieniu w kontenerze widzi tylko przydzielone zasoby i uważa je za wszystko, co jest dostępne. W każdym systemie operacyjnym można utworzyć kilka kontenerów, do których przydzielany jest podzbiór zasobów komputera. Każdy kontener może zawierać dowolną liczbę programów komputerowych. Programy te mogą działać jednocześnie lub oddzielnie, a nawet mogą wchodzić ze sobą w interakcje.

Konteneryzacja ma podobieństwa do wirtualizacji aplikacji : w tej ostatniej tylko jeden program komputerowy jest umieszczony w izolowanym kontenerze, a izolacja dotyczy tylko systemu plików.

Używa

Wirtualizacja na poziomie systemu operacyjnego jest powszechnie stosowana w wirtualnych środowiskach hostingowych, gdzie jest przydatna do bezpiecznego przydzielania ograniczonych zasobów sprzętowych dużej liczbie wzajemnie nieufnych użytkowników. Administratorzy systemu mogą go również wykorzystać do konsolidacji sprzętu serwerowego poprzez przeniesienie usług na oddzielnych hostach do kontenerów na jednym serwerze.

Inne typowe scenariusze obejmują rozdzielenie kilku programów do osobnych kontenerów w celu zwiększenia bezpieczeństwa, niezależności sprzętowej i dodania funkcji zarządzania zasobami. Ulepszone bezpieczeństwo zapewniane przez użycie mechanizmu chroot nie jest jednak doskonałe. Implementacje wirtualizacji na poziomie systemu operacyjnego, które umożliwiają migrację na żywo, mogą być również wykorzystywane do dynamicznego równoważenia obciążenia kontenerów między węzłami w klastrze.

Nad głową

Wirtualizacja na poziomie systemu operacyjnego zwykle wiąże się z mniejszym obciążeniem niż pełna wirtualizacja, ponieważ programy w partycjach wirtualnych na poziomie systemu operacyjnego używają normalnego interfejsu wywołań systemowych systemu operacyjnego i nie muszą być poddawane emulacji ani uruchamiane na pośredniej maszynie wirtualnej , tak jak z pełną wirtualizacją (jak VMware ESXi , QEMU czy Hyper-V ) i parawirtualizacją (jak Xen czy User-mode Linux ). Ta forma wirtualizacji nie wymaga również wsparcia sprzętowego dla wydajnej wydajności.

Elastyczność

Wirtualizacja na poziomie systemu operacyjnego nie jest tak elastyczna jak inne podejścia do wirtualizacji, ponieważ nie może obsługiwać systemu operacyjnego gościa innego niż host ani innego jądra gościa. Na przykład w systemie Linux różne dystrybucje są w porządku, ale inne systemy operacyjne, takie jak Windows, nie mogą być hostowane. Systemy operacyjne wykorzystujące systematykę zmiennych danych wejściowych podlegają ograniczeniom w architekturze zwirtualizowanej. Metody adaptacji, w tym analiza przekazywania serwera w chmurze, utrzymują wirtualne środowisko na poziomie systemu operacyjnego w tych aplikacjach.

Solaris częściowo przezwycięża opisane powyżej ograniczenia dzięki funkcji stref markowych , która zapewnia możliwość uruchamiania środowiska w kontenerze, który emuluje starszą wersję Solaris 8 lub 9 na hoście Solaris 10. Strefy marki Linux (nazywane strefami marki „lx”) są również dostępne w x86 , zapewniając pełną przestrzeń użytkownika systemu Linux i obsługę uruchamiania aplikacji systemu Linux; dodatkowo Solaris udostępnia narzędzia potrzebne do instalacji Red Hat Enterprise Linux 3.x lub CentOS 3.x Dystrybucje Linuksa w strefach „lx”. Jednak w 2010 roku strefy oznaczone marką Linux zostały usunięte z Solaris; w 2014 roku zostały ponownie wprowadzone w Illumos , który jest open source'owym widelcem Solarisa, obsługującym 32-bitowe jądra Linuksa .

Składowanie

kopiowania przy zapisie (CoW) na poziomie pliku . (Najczęściej partycje współdzielą standardowy system plików, a te partycje, które zmieniają pliki, automatycznie tworzą własne kopie). Łatwiej jest tworzyć kopie zapasowe, oszczędzać miejsce i łatwiej przechowywać w pamięci podręcznej niż kopiowanie na poziomie bloków -pisz schematy wspólne dla wirtualizatorów całego systemu. Jednak wirtualizatory całego systemu mogą pracować z nienatywnymi systemami plików oraz tworzyć i wycofywać migawki całego stanu systemu.

Implementacje

Mechanizm System operacyjny Licencja Aktywnie rozwijany od lub pomiędzy Cechy
Izolacja systemu plików Kopiuj przy zapisie Przydziały dysku Ograniczenie szybkości we/wy Limity pamięci Limity procesora Izolacja sieci Wirtualizacja zagnieżdżona Punkty kontrolne partycji i migracja na żywo Izolacja uprawnień roota
chroot Większość systemów operacyjnych typu UNIX Różni się w zależności od systemu operacyjnego 1982 Częściowy NIE NIE NIE NIE NIE NIE Tak NIE NIE
Doker Linux , FreeBSD , Windows x64 macOS Licencja Apache 2.0 2013 Tak Tak Nie bezpośrednio Tak (od 1.10) Tak Tak Tak Tak Tylko w trybie eksperymentalnym z CRIU [1] Tak (od 1.10)

Linux-VServer (kontekst bezpieczeństwa)
Linuks , Windows Serwer 2016 GNU GPLv2 2001 Tak Tak Tak Tak Tak Tak Częściowy ? NIE Częściowy
lmctfy Linuks Licencja Apache 2.0 2013–2015 Tak Tak Tak Tak Tak Tak Częściowy ? NIE Częściowy
LXC Linuks GNU GPLv2 2008 Tak Tak Częściowy Częściowy Tak Tak Tak Tak Tak Tak
Osobliwość Linuks Licencja BSD 2015 Tak Tak Tak NIE NIE NIE NIE NIE NIE Tak
OpenVZ Linuks GNU GPLv2 2005 Tak Tak Tak Tak Tak Tak Tak Częściowy Tak Tak
Wirtuoz Linuksa , Windowsa Wersja próbna 2000 Tak Tak Tak Tak Tak Tak Tak Częściowy Tak Tak
Kontenery Solaris (Strefy)
illumos ( OpenSolaris ), Solaris

CDDL , własność
2004 Tak Tak (ZFS) Tak Częściowy Tak Tak Tak Częściowy Częściowy Tak
Więzienie FreeBSD FreeBSD , DragonFly BSD Licencja BSD 2000 Tak Tak (ZFS) Tak Tak Tak Tak Tak Tak Częściowy Tak
vkernel DragonFly BSD Licencja BSD 2006 Tak Tak ? Tak Tak Tak ? ? Tak
sysjail OpenBSD , NetBSD Licencja BSD 2006-2009 Tak NIE NIE NIE NIE NIE Tak NIE NIE ?
partycje WPAR AIX Komercyjne oprogramowanie własnościowe 2007 Tak NIE Tak Tak Tak Tak Tak NIE Tak ?
Konta wirtualne iCore Windows XP Darmowe 2008 Tak NIE Tak NIE NIE NIE NIE ? NIE ?
Piaskownica Okna GNU GPLv3 2004 Tak Tak Częściowy NIE NIE NIE Częściowy NIE NIE Tak
systemd-nspawn Linuks GNU LGPLv2.1+ 2010 Tak Tak Tak Tak Tak Tak Tak ? ? Tak
Turbo Okna Freemium 2012 Tak NIE NIE NIE NIE NIE Tak NIE NIE Tak
rkt Linuks Licencja Apache 2.0 2014–2018 Tak Tak Tak Tak Tak Tak Tak ? ? Tak

Kontenery Linuksa niewymienione powyżej obejmują:

  • LXD , alternatywne opakowanie LXC opracowane przez firmę Canonical
  • Podman, bezpośredni zamiennik Dockera
  • Charliecloud, zestaw narzędzi kontenerowych używanych w systemach HPC
  • Platforma Kata Containers MicroVM
  • Bottlerocket to oparty na Linuksie system operacyjny typu open source, który został stworzony przez Amazon Web Services specjalnie do uruchamiania kontenerów na maszynach wirtualnych lub hostach fizycznych
  • CBL-Mariner to dystrybucja Linuksa o otwartym kodzie źródłowym, stworzona specjalnie przez Microsoft Azure i podobna do Fedory CoreOS

Zobacz też

Notatki

Linki zewnętrzne