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ą:
- Możliwości sprzętowe, które można wykorzystać, takie jak procesor i połączenie sieciowe
- Dane, które można odczytywać lub zapisywać, takie jak pliki, foldery i udziały sieciowe
- 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ż
- Orkiestracja kontenerów
- Przestrzenie nazw Linuksa
- Grupy dyskusyjne Linuksa
- Piaskownica (tworzenie oprogramowania)
- Kontenerowy Linuks
- Hypervisor
- Twórcy aplikacji przenośnych
- Inicjatywa Otwartego Kontenera
- Jądro separacji
- Przetwarzanie bezserwerowe
- Menedżer pakietów Snap
- Hiperwizor pamięci masowej
- Wirtualny serwer prywatny (VPS)
- Partycjonowanie zasobów wirtualnych
Notatki
Linki zewnętrzne
- Wprowadzenie do wirtualizacji
- Krótkie wprowadzenie do trzech różnych technik wirtualizacji
- Wirtualizacja i konteneryzacja infrastruktury aplikacji: porównanie , 22 czerwca 2015 r., autor: Mathijs Jeroen Scheepers
- Kontenery i trwałe dane , LWN.net , 28 maja 2015 r., autor: Josh Berkus