Wirtualizacja na poziomie systemu operacyjnego (kontenery) dla OS X

31

Zastanawiam się, dlaczego poza dobrym starym chrootem nie istnieje implementacja wirtualizacji na poziomie systemu operacyjnego (lub kontenerów, jeśli wolisz) dla Mac OS X.

Czy może to być spowodowane ograniczeniami jądra lub licencjami? Czy po prostu nikt jeszcze nie rozpoczął podobnego projektu?

Emyl
źródło

Odpowiedzi:

16

Kluczowym elementem wymaganym do konteneryzacji jest izolacja sieci i innych usług, ale nie tylko izolacja, ale także wirtualizacja . Więzienia FreeBSD, „kontenery” Linuksa (lub bardziej poprawnie „przestrzenie nazw”) oraz strefy Solaris / illumos oferują pewien stopień „wirtualizacji” tych usług systemu operacyjnego.

Przez wirtualizację oznacza to, że serwery te są dostępne (lub potencjalnie dostępne ) dla rzeczy w „kontenerze”, ale w sposób, który chroni inne rzeczy na tym samym hoście poza kontenerem. (Na przykład kontener może mieć własny stos TCP / IP, z własnym adresem IP, pamięcią podręczną ARP itp.)

Wirtualizacja systemu operacyjnego (systemu operacyjnego) to sposób, w jaki ogólnie mówimy o tego rodzaju „lekkiej” wirtualizacji, gdzie procesy uważają, że widzą wirtualne jądro, ale wszystkie dzielą to samo prawdziwe jądro pod maską; że jądro działa jak rodzaj hiperwizora, zapewniając, że granice kontenera / wirtualizacji nie zostaną przekroczone. (Innymi słowy, usługi systemu operacyjnego są zwirtualizowane). Porównaj to do wirtualizacji sprzętowej, gdzie zwirtualizowany jest sprzęt - np. Urządzenia są emulowane w oprogramowaniu i prezentowane systemowi operacyjnemu działającemu w kontenerze. Jest to bardzo wydajne, ale wymaga dużych zasobów - każda maszyna wirtualna musi mieć własną kopię systemu operacyjnego.

Najnowsze macOS ma natywną obsługę hypervisora ​​za pośrednictwem Hypervisor.framework, która pozwala na oprogramowanie takie jak „XHyve” [port BHyve FreeBSD] (używa go doker na MacOS), ale brakuje mu niezbędnych usług pod maską, aby w pełni zwirtualizować usługi systemu operacyjnego.

W rzeczywistości wiele z potrzebnych rzeczy jest już prawdopodobnie obecnych, ponieważ praca nad udostępnieniem piaskownic oznacza, że ​​istnieją już logiczne punkty, w których wywołania systemowe są przechwytywane i obsługiwane w różny sposób dla różnych aplikacji. To jednak dalekie od pełnej historii - wdrożenie prawdziwej oddzielnej sieci, IPC i innych przestrzeni nazw to sporo pracy.

Najlepszym powodem, dla którego Apple tego nie zrobił, jest prawdopodobnie ten sam powód, dla którego Apple nie wypuścił platformy odpowiedniej do obsługi macOS w centrum danych od wielu lat - brak popytu na rynku lub postrzegany brak popytu na rynku ze strony lidera Apple. Komputery i urządzenia mobilne, na których skupili swoją uwagę, po prostu nie potrzebują tak bardzo wirtualnych instancji macOS. (To smutne, ponieważ chciałbym mieć obsługę wirtualnego macOS - na przykład uruchamianie macOS na maszynach wirtualnych w Travis CI jest naprawdę czasochłonne w porównaniu do kontenerów Linux).

Garrett D'Amore
źródło
1
dobra odpowiedź ... domyślam się, że Apple unika obsługi OSX na serwerze, ponieważ załamałby się ich rynek MBP, gdyby deweloperzy iOS mogli uruchomić taniego laptopa Linuksa i skompilować swoją aplikację na dostawcy hostingu VPS
Scott Stensland
6

Zdziwiłbyś się - Kontenery obsługiwane - piaskownica OS X (i iOS) ewoluowała, aby z nich korzystać. Zostały wprowadzone w wersji 10.7, a obecnie są de facto standardem w wersji 10.10 i iOS 8. W tych ostatnich są one bardziej rygorystycznie egzekwowane (głównie ze względu na bezpieczeństwo aplikacji), do tego stopnia, że ​​aplikacja widzi tylko siebie, i poprzednie metody wyliczania procesów lub zasobów zwracają teraz wyniki oparte na kontenerach - podobnie jak w przestrzeni nazw Linux ipc - ale są bardziej wydajne.

Technologie
źródło
2
Są to jednak piaskownice, a nie wirtualizacja systemu operacyjnego (np. Kontenery, strefy, więzienia), prawda?
smdvlpr
1
Docker nie jest także wirtualizacją. Kontenery! = Maszyny wirtualne. Docker w zasadzie łączy wiele różnych funkcji jądra, grup cgro, chroot, warstwowych systemów plików, routingu iptables i tak dalej, aby wyodrębnić grupę procesów tak, że aplikacja widzi siebie jako posiadającą system dla siebie, jednocześnie izolując te środowiska w celu poprawy bezpieczeństwa i zminimalizować zdolność pojemników do wtrącania się między sobą i systemem. Kontenery OSX osiągają niektóre z tych funkcji, ale nie wszystkie. Prawdopodobnie jest to coś, co może być zaimplementowane przez wystarczająco sprytnego programistę.
Shayne,
3
@Technologeeks, czy możesz wskazać dowolny materiał referencyjny na pojemnikach / piaskownicach w OS X?
Ken Williams,
3

Wyobraziłbym sobie odpowiedź, że nikt tak naprawdę tego nie chce. Wydaje się to wykonalne. Te rzeczy są wykonywane głównie w jednym celu, oszczędzając wydajność dla dostawców VPS. I naprawdę nikt nie chce, aby instancja VPS była oparta na systemie OS X.

Shane Hsu
źródło
5
Dzięki za twój punkt. IMHO ma co najmniej inny przypadek użycia kontenerów, czyli tworzenie środowisk programistycznych. BTW, znalazłem też ten stary płomień: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl
Zwiększona gęstość to niezły efekt uboczny izolowania procesów we własnych przestrzeniach nazw. Kontenery umożliwiają bezpieczniejsze uruchamianie wielu aplikacji i większą kontrolę nad tym, co mogą zrobić na komputerze. Korzyści te są wykorzystywane przez iOS w celu zwiększenia bezpieczeństwa i powstrzymania aplikacji przed narzucaniem się, na przykład, co ma niewiele wspólnego z gęstością VPS. Nawet maszyny z jedną usługą mogą korzystać z bezpieczeństwa. Nie ma tam poprawy gęstości, ale pojemniki mogą być nadal przydatne.
GargantuChet,
2

Chociaż używa „dobrego starego chroota (8)”, rozpocząłem projekt, który ma tendencję do naśladowania zachowania dokera w OS X i NetBSD. Jest bezpłatny w mowie i jest dostępny na GitHub . Jak mówi README, ten projekt nie dotyczy bezpieczeństwa ani produkcji, ale pomoże przetestować pełne stosy natywnie na stacji roboczej.

iMil
źródło
0

docker (jak rozumiem) jedynie „wirtualizuje” (warstwowanie) system plików i sieć (procesory / pamięci są ograniczone), więc wszystkie te same funkcje powinny tam być, ale po prostu nie sprzedawane w ten sam sposób.

moe
źródło