46 votos

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

Me pregunto por qué, aparte de la buena vieja chroot, ninguna implementación de virtualización a nivel de sistema operativo (o contenedores, si lo prefiere) para Mac OS X.

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

21voto

flubsy Puntos 339

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

Por virtualización se entiende que estos servidores son disponible (o potencialmente disponible ) a las cosas dentro del "contenedor", pero de una manera que proteja a 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 SO (sistema operativo) es la forma en que generalmente nos referimos a este tipo de virtualización "ligera", en la que los procesos creen ver un núcleo virtual, pero todos comparten el mismo núcleo real bajo el capó; ese núcleo actúa como una especie de hipervisor para garantizar que no se crucen los límites del contenedor/virtualización. (Dicho de otro modo, los servicios del sistema operativo están virtualizados.) Compárese con la virtualización de hardware, en la que lo que se virtualiza 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 potente, pero consume muchos recursos: cada máquina virtual debe tener su propia copia del sistema operativo.

El MacOS reciente tiene soporte nativo de hipervisor a través de Hypervisor.framework que permite software como "XHyve" [un port de BHyve de FreeBSD] (docker en MacOS lo utiliza), pero carece de los servicios necesarios bajo el capó para virtualizar completamente los servicios del sistema operativo.

En realidad, gran parte de lo que se necesita probablemente ya está presente, ya que el trabajo para proporcionar sandboxes significa que ya hay puntos lógicos donde las llamadas al sistema son interceptadas y manejadas de manera diferente para diferentes aplicaciones. Sin embargo, esto dista mucho de ser la historia completa: la implementación de espacios de nombres de red, IPC y otros realmente separados requiere mucho trabajo.

La mejor razón por la que Apple no ha hecho esto es probablemente la misma 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 percepción de falta de demanda del mercado por parte de los líderes de Apple. El escritorio y el enfoque móvil donde han centrado su atención simplemente no necesitan instancias virtuales de MacOS tanto. (Esto es triste, porque me encantaría tener soporte para MacOS virtual -- por ejemplo ejecutar MacOS en VMs en Travis CI consume mucho tiempo comparado con contenedores Linux).

8voto

Technologeeks Puntos 21

Se sorprendería: los contenedores realmente son soportados - el Sandbox de OS X (e iOS) ha evolucionado para utilizarlos. Se introdujeron en 10.7, y ahora son estándar de facto en 10.10 e iOS 8. En este último se aplican de forma más estricta (principalmente por motivos de seguridad de la aplicación), hasta el punto de que una aplicación sólo puede verse a sí misma, y los métodos anteriores de enumeración de procesos o recursos ahora devuelven resultados basados en contenedores, similares al espacio de nombres ipc de Linux, pero más potentes.

3 votos

Sin embargo, se trata de sandboxes, no de virtualización del sistema operativo (por ejemplo, contenedores, zonas, jaulas), ¿verdad?

1 votos

Docker tampoco es virtualización. Contenedores = máquinas virtuales. Docker básicamente utiliza un montón de diferentes características del kernel, cgroups, chroot, sistemas de archivos en capas, enrutamiento iptables y así sucesivamente, para aislar un grupo de procesos de tal manera que la aplicación se ve a sí misma como si tuviera el sistema para sí misma, mientras que aísla esos entornos para mejorar la seguridad y minimizar la capacidad de los contenedores para entrometerse entre sí y con el sistema. Los contenedores de OSX consiguen algunas de estas funcionalidades, pero no todas. Sin embargo, es algo que probablemente podría ser implementado por un programador lo suficientemente astuto.

5 votos

@Technologeeks, ¿puedes indicar algún material de referencia sobre contenedores/bandejas en OS X?

8voto

iMil Puntos 101

Mientras está usando "el buen viejo chroot(8)", empecé un proyecto que tiende a imitar el comportamiento de docker en OS X y NetBSD. Es Free-as-in-speech y está disponible en GitHub . Como dice el README, este proyecto no es ni de seguridad ni de producción, pero ayudará a probar pilas completas de forma nativa en tu estación de trabajo.

2 votos

Acabo de comprobar su repo y parece prometedor. Sé que este post es bastante antiguo, pero ¿sigues utilizando tu proyecto o te has pasado a otra cosa?

1 votos

Como muestra el tiempo para responder a este comentario, no estoy trabajando en sailor desde hace bastante tiempo, sin embargo lo uso absolutamente a diario para ejecutar varios servicios en mis servidores NetBSD.

3voto

Michael Kropat Puntos 3993

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

6 votos

Gracias por tu comentario. IMHO hay al menos otro caso de uso para los contenedores, que es la creación de entornos de desarrollo. BTW, He encontrado también esta vieja llama: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4

0 votos

El aumento de la densidad es un buen efecto secundario de aislar los procesos en sus propios espacios de nombres. Los contenedores permiten ejecutar varias aplicaciones de forma más segura y controlar mejor lo que pueden hacer en la máquina. Estos beneficios son utilizados por iOS para mejorar la seguridad y evitar que las aplicaciones se pisen entre sí, por ejemplo, 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 ninguna mejora de la densidad, pero los contenedores pueden seguir siendo útiles.

1voto

moe Puntos 1

Docker (como yo lo entiendo) es sólo la "virtualización" (capas) el sistema de archivos y la red (cpu / mem sólo se limitan) por lo que todos de la misma característica debe estar allí, pero no comercializa de la misma manera.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X