Wirtualizacja na poziomie systemu operacyjnego (kontenery) dla OS X


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).


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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.