Virtualisation au niveau du système d'exploitation (conteneurs) pour OS X

31

Je me demande pourquoi, mis à part le bon vieux chroot, aucune implémentation de virtualisation au niveau du système d'exploitation (ou conteneurs si vous préférez) n'existe pour Mac OS X.

Cela pourrait-il être dû à des limitations du noyau ou à des restrictions de licence? Ou tout simplement, personne n'a encore lancé un projet similaire?

Emyl
la source

Réponses:

16

Un élément clé requis pour la conteneurisation est l'isolement du réseau et d'autres services, mais pas seulement l' isolement mais aussi la virtualisation . Les prisons FreeBSD, les «conteneurs» Linux (ou plus exactement les «espaces de noms») et les zones Solaris / illumos offrent tous un certain degré de «virtualisation» de ces services du système d'exploitation.

Par virtualisation, cela signifie que ces serveurs sont disponibles (ou potentiellement disponibles ) pour les choses à l'intérieur du "conteneur", mais d'une manière qui protège les autres choses sur le même hôte à l'extérieur du conteneur. (Par exemple, un conteneur peut avoir sa propre pile TCP / IP, avec sa propre adresse IP, son cache ARP, etc.)

La virtualisation de système d'exploitation (OS) est la façon dont nous nous référons généralement à ce type de virtualisation "légère", où les processus pensent qu'ils voient un noyau virtuel, mais partagent tous le même noyau réel sous le capot; ce noyau agit comme une sorte d'hyperviseur en garantissant que les frontières conteneur / virtualisation ne sont pas franchies. (Autrement dit, les services du système d'exploitation sont virtualisés.) Comparez cela à la virtualisation matérielle, où ce qui est virtualisé est le matériel - par exemple, les périphériques sont émulés dans le logiciel et présentés à un système d'exploitation fonctionnant dans le conteneur. C'est très puissant, mais assez gourmand en ressources - chaque machine virtuelle doit avoir sa propre copie du système d'exploitation.

MacOS récent prend en charge l'hyperviseur natif via Hypervisor.framework qui permet à des logiciels comme "XHyve" [Un port de FreeBSD BHyve] (Docker sur macOS l'utilise), mais il manque les services nécessaires sous le capot pour virtualiser entièrement les services du système d'exploitation.

En vérité, une grande partie de ce qui est nécessaire est probablement déjà présente, car le travail pour fournir des bacs à sable signifie qu'il existe déjà des points logiques où les appels système sont interceptés et traités différemment pour différentes applications. Cependant, c'est loin de l'histoire complète - la mise en œuvre d'un véritable réseau séparé, IPC et d'autres espaces de noms représente beaucoup de travail.

La meilleure raison pour laquelle Apple n'a pas fait cela est probablement la même raison pour laquelle Apple n'a pas publié de plate-forme adaptée à l'exécution de macOS dans le centre de données depuis de nombreuses années - manque de demande du marché ou manque perçu de demande du marché par la direction d'Apple. Les ordinateurs de bureau et les appareils mobiles sur lesquels ils ont concentré leur attention n'ont tout simplement pas autant besoin d'instances macOS virtuelles. (C'est triste, car j'aimerais avoir une prise en charge virtuelle de macOS - par exemple, exécuter macOS sur des machines virtuelles à Travis CI prend beaucoup de temps par rapport aux conteneurs Linux).

Garrett D'Amore
la source
1
bonne réponse ... je suppose qu'Apple évite de prendre en charge OSX sur le serveur, car cela effondrerait son marché MBP si les développeurs iOS pouvaient exécuter un ordinateur portable Linux puissant et bon marché et compiler leur apk sur un fournisseur d'hébergement VPS
Scott Stensland
6

Vous seriez surpris - les conteneurs sont réellement pris en charge - le bac à sable OS X (et iOS) a évolué pour les utiliser. Ils ont été introduits dans 10.7 et sont désormais de facto standard dans 10.10 et iOS 8. Dans ce dernier, ils sont appliqués de manière plus stricte (principalement en raison de la sécurité de l'application), au point où une application ne peut se voir que, et les versions précédentes les méthodes d'énumération des processus ou des ressources renvoient désormais des résultats basés sur des conteneurs - similaires à l'espace de noms ipc Linux - mais plus puissants.

Technologeeks
la source
2
Ce sont des bacs à sable, pas de la virtualisation du système d'exploitation (par exemple, des conteneurs, des zones, des prisons), non?
smdvlpr
1
Docker n'est pas non plus la virtualisation. Conteneurs! = VMs. Docker coraux essentiellement un tas de fonctionnalités différentes du noyau, cgroups, chroot, systèmes de fichiers en couches, routage iptables et ainsi de suite, pour isoler un groupe de processus de telle sorte que l'application se considère comme ayant le système pour lui-même, tout en isolant ces environnements pour améliorer la sécurité et minimiser la capacité des conteneurs à se mêler entre eux et avec le système. Les conteneurs OSX atteignent certaines de ces fonctionnalités, mais pas toutes. C'est probablement quelque chose qui pourrait être implémenté par un codeur assez rusé cependant.
Shayne
3
@Technologeeks, pouvez-vous indiquer du matériel de référence sur les conteneurs / bacs à sable sous OS X?
Ken Williams
3

J'imagine que la réponse est que personne n'en veut vraiment. Cela semble faisable. Ces opérations sont effectuées principalement dans un seul but, en conservant les performances des fournisseurs de VPS. Et personne ne veut vraiment qu'une instance VPS soit basée sur OS X.

Shane Hsu
la source
5
Merci pour votre point. À mon humble avis, il existe au moins un autre cas d'utilisation pour les conteneurs, à savoir la création d'environnements de développement. BTW, j'ai aussi trouvé cette vieille flamme: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl
L'augmentation de la densité est un effet secondaire agréable de l'isolement des processus dans leurs propres espaces de noms. Les conteneurs vous permettent d'exécuter plusieurs applications de manière plus sécurisée et de mieux contrôler ce qu'ils peuvent faire sur la machine. Ces avantages sont utilisés par iOS pour améliorer la sécurité et empêcher les applications de marcher les unes sur les autres, par exemple, ce qui n'a pas grand-chose à voir avec la densité VPS. Même les machines à service unique peuvent bénéficier de la sécurité. Il n'y a pas d'amélioration de la densité mais les conteneurs peuvent toujours être utiles.
GargantuChet
2

Alors qu'il utilise "bon vieux chroot (8)", j'ai commencé un projet qui a tendance à imiter le comportement de docker sur OS X et NetBSD. Il est libre comme discours et est disponible sur GitHub . Comme le dit le README, ce projet ne concerne ni la sécurité ni la production, mais aidera à tester les piles complètes en natif sur votre poste de travail.

iMil
la source
0

Docker (si je comprends bien) ne fait que "virtualiser" (superposer) le système de fichiers et le réseau (les processeurs / mem sont seulement limités), donc toutes les mêmes fonctionnalités devraient être là mais tout simplement pas commercialisées de la même manière.

moe
la source