Virtualización a nivel del sistema operativo (contenedores) para OS X

31

Me pregunto por qué, aparte del buen chroot antiguo, no existe una implementación de virtualización a nivel del sistema operativo (o contenedores, si lo prefiere) para Mac OS X.

¿Podría deberse a limitaciones del kernel o restricciones de licencia? ¿O simplemente nadie ha lanzado aún un proyecto similar?

Emyl
fuente

Respuestas:

16

Un elemento clave requerido para la contenedorización es el aislamiento de la red y otros servicios, pero no solo el aislamiento sino también la virtualización . FreeBSD Jails, los "contenedores" de Linux (o más correctamente "espacios de nombres") y las zonas Solaris / illumos ofrecen cierto grado de "virtualización" de estos servicios del sistema operativo.

Por virtualización, esto significa que estos servidores están disponibles (o potencialmente disponibles ) para cosas dentro del "contenedor", pero de una manera que protege las otras cosas en el mismo host fuera del contenedor. (Por ejemplo, un contenedor puede tener su propia pila TCP / IP, con su propia dirección IP, caché ARP, etc.)

La virtualización del sistema operativo (SO) es cómo generalmente nos referimos a este tipo de virtualización "ligera", donde los procesos piensan que ven un núcleo virtual, pero todos comparten el mismo núcleo real bajo el capó; ese kernel actúa como una especie de hipervisor para garantizar que los límites del contenedor / virtualización no se crucen. (Dicho de otra manera, los servicios del sistema operativo están virtualizados). Compare esto con la virtualización de hardware, donde lo que está virtualizado es el hardware; por ejemplo, los dispositivos se emulan en software y se presentan a un sistema operativo que se ejecuta en el contenedor. Esto es muy poderoso, pero requiere muchos recursos: cada máquina virtual debe tener su propia copia del sistema operativo.

MacOS reciente tiene soporte nativo de hipervisor a través de Hypervisor.framework que permite software como "XHyve" [Un puerto de BHyve de FreeBSD] (docker en macOS usa esto), pero carece de los servicios necesarios para virtualizar completamente los servicios del sistema operativo.

En verdad, mucho de lo que se necesita probablemente ya esté presente, ya que el trabajo para proporcionar cajas de arena significa que ya hay puntos lógicos donde las llamadas al sistema se interceptan y manejan de manera diferente para diferentes aplicaciones. Sin embargo, eso está lejos de ser una historia completa: implementar una verdadera red separada, IPC y otros espacios de nombres es bastante trabajo.

La mejor razón por la cual Apple no ha hecho esto es probablemente la misma razón por la que Apple no ha lanzado una plataforma adecuada para ejecutar macOS en el centro de datos durante muchos años: la falta de demanda del mercado o la falta percibida de demanda por parte del liderazgo de Apple. El escritorio y el enfoque móvil donde han centrado su atención simplemente no necesitan tanto instancias de macOS virtuales. (Esto es triste, porque me encantaría tener soporte para macOS virtual; por ejemplo, ejecutar macOS en máquinas virtuales en Travis CI es realmente lento en comparación con los contenedores de Linux).

Garrett D'Amore
fuente
1
buena respuesta ... supongo que Apple evita admitir OSX en el servidor porque colapsaría su mercado de MBP si los desarrolladores de iOS pudieran ejecutar una computadora portátil Linux potente y barata y compilar su apk en un proveedor de alojamiento VPS
Scott Stensland
6

Te sorprenderías, los contenedores son realmente compatibles, el Sandbox de OS X (e iOS) ha evolucionado para usarlos. Se introdujeron en 10.7 y ahora son estándar de facto en 10.10 e iOS 8. En este último, se aplican de manera más estricta (principalmente por razones de seguridad de la aplicación), hasta el punto en que una aplicación solo puede verse a sí misma, y Los métodos de enumerar procesos o recursos ahora devuelven resultados basados ​​en contenedores, similares al espacio de nombres ipc de Linux, pero más potentes.

Technologeeks
fuente
2
Sin embargo, estos son entornos limitados, no virtualización del sistema operativo (por ejemplo, contenedores, zonas, cárceles), ¿verdad?
smdvlpr
1
Docker tampoco es virtualización. Contenedores! = VM. Docker básicamente ofrece un conjunto de características diferentes del kernel, cgroups, chroot, sistemas de archivos en capas, enrutamiento de iptables, etc., para aislar un grupo de procesos de modo que la aplicación se vea a sí misma teniendo el sistema en sí mismo, a la vez que aísla esos entornos para mejorar la seguridad y minimizar la capacidad de los contenedores de entrometerse entre sí y con el sistema. Los contenedores OSX logran parte de esta funcionalidad, pero no toda. Sin embargo, probablemente sea algo que podría implementar un codificador lo suficientemente astuto.
Shayne
3
@Technologeeks, ¿puede señalar algún material de referencia en contenedores / cajas de arena en OS X?
Ken Williams
3

Me imagino que la respuesta es que nadie realmente lo quiere. Parece ser factible. Estas cosas se hacen principalmente para un propósito, conservar el rendimiento para los proveedores de VPS. Y realmente nadie quiere que una instancia de VPS esté basada en OS X.

Shane Hsu
fuente
55
Gracias por tu punto. En mi humilde opinión, hay al menos otro caso de uso para contenedores, que está creando entornos de desarrollo. Por cierto, también he encontrado esta vieja llama: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl
El aumento de la densidad es un buen efecto secundario de aislar procesos en sus propios espacios de nombres. Los contenedores le permiten ejecutar múltiples aplicaciones de manera más segura y tener un mayor control sobre lo que pueden hacer en la máquina. IOS utiliza estos beneficios para mejorar la seguridad y evitar que las aplicaciones se pisen entre sí, por ejemplo, lo que tiene poco que ver con la densidad de VPS. Incluso las máquinas de un solo servicio pueden beneficiarse de la seguridad. No hay mejora de la densidad allí, pero los contenedores pueden ser útiles.
GargantuChet
2

Mientras usa "buen viejo chroot (8)", comencé un proyecto que tiende a imitar el comportamiento de Docker en OS X y NetBSD. Es gratuito como en voz y está disponible en GitHub . Como dice README, este proyecto no se trata de seguridad ni de producción, sino que ayudará a probar pilas completas de forma nativa en su estación de trabajo.

iMil
fuente
0

docker (según tengo entendido) solo está "virtualizando" (estratificando) el sistema de archivos y la red (cpu / mem solo son limitados), por lo que todas las mismas características deberían estar allí, pero no comercializarse de la misma manera.

moe
fuente