Estoy tratando de construir un sistema que ejecute componentes de software de corta duración (CI y de prueba), es obligatorio de acuerdo con mis requisitos que cada uno viva en un host privado. Estoy tomando esa definición para incluir también las opciones de paravirtualsation , ya que parece que me ahorrará mucho dolor de cabeza.
Estoy trabajando en una Mac, así que casi todas las tecnologías están disponibles, libvirt y quemu , etc., simplemente no funcionan para mí. Sin embargo, estoy planeando desplegarme en Debian; así que todo lo que se ejecuta en Debian vuelve a la mesa, siempre que pueda hacer un script del aprovisionamiento de la máquina host, así como de sus dominios invitados.
Mi configuración prevista era que puedo usar para arrancar un instalador de Debian, que algo debería significar que al arrancar, la máquina se aprovisiona automáticamente (Chef, Puppet, Babushka, en realidad no importa), y parte de ese aprovisionamiento debería construir un rootfs de plantilla que se pueden usar para arrancar un contenedor. El contenedor en sí también necesita ser aprovisionado, de modo que cuando aparezca el contenedor, sepa qué trabajo tiene que hacer y pueda hacer el trabajo y luego salir.
En resumen, aquí está el flujo de trabajo que necesito:
- Arranca una máquina (virtual o de otro tipo) y tenla lista para trabajar.
- El trabajo debe ser realizado por un script instalado por chef / puppet / babushka / etc.
- Cuando entra el trabajo, se debe iniciar una máquina virtual para hacer el trabajo.
- La VM debe hacer el trabajo, salir y liberar sus recursos a la máquina principal / host. (es importante que esto se amplíe a al menos cientos de máquinas virtuales invitadas en hardware razonable)
Llegué a un punto en el que probé lo siguiente y los abandoné por los motivos que se detallan a continuación:
Para la máquina host
- Imágenes previas de Debian micro ISO con Instalinux (LinuxCOE respaldado) ( Malo: No funcionó en absoluto ("No se encontraron módulos del núcleo" (porque las imágenes de Instalinux no están sincronizadas con los repositorios FTP, aparentemente esta solución es notoriamente frágil) tampoco permite mucho espacio para la instalación posterior, y al soltar claves SSH conocidas, claves de host, etc. en la máquina, parece que se dispara y se olvida, al final tendría una máquina en funcionamiento, pero no acceso a ella .)
- Debian netinst ISO previo a la inicialización ( Malo : los mismos problemas, como se mencionó anteriormente, excepto que al menos la instalación generalmente se completa ya que no hay disparidad del núcleo entre el ISO y el repositorio FTP. Todavía hay un alcance limitado para la post-instalación. Bueno : Absolutamente confiable y repetible, fácil de lanzar en cualquier pila de tecnología VM en Mac, o en una máquina de metal desnudo, funcionaría en cualquier lugar, sin embargo, no puedo instalarlo lo suficiente )
- Varios métodos para construir un rootfs y compilarlo como una imagen de disco duro de arranque ( Malo : lo poco que pude conseguir que fuera frágil, sería difícil de instalar en una máquina real y es un proceso de construcción complejo. Bueno: si Podría hacerlo funcionar, esto parecería proporcionar el mayor alcance para preconfigurar la máquina a una especificación dada con claves ssh, claves de host, nombre de host, software instalado desde Git y cualquier otra cosa, pero entonces la pregunta sería cómo empaquetar para su distribución, o cómo escribir un guión es recreación ) .
Honestamente, no estoy seguro de qué tecnología se espera que la gente use para sacar una VM de la nada a un sistema en funcionamiento, funcional y útil. A mí me parecen tres pasos: a) sistema operativo, b) configuración del sistema (usuarios, etc.) y luego c) cambios en el sistema de archivos.
Para las máquinas invitadas (virtuales):
- Muchas cosas, sobre todo creo que la respuesta aquí es un rootfs de solo lectura creado con
debootstrap
, y una partición especial en el contenedor LXC que contiene el trabajo a realizar para esta instancia específica (un manifiesto de trabajo). Inserte todas las advertencias habituales sobre la construcción del sistema operativo, el arranque, la creación de usuarios, la extracción de software desde git y el trabajo.
Realmente no estoy seguro de qué herramientas buscar, parece que el problema debería estar bien resuelto. Pero simplemente no puedo averiguar por dónde empezar realmente.
La mayoría de las personas parecen sugerir para la máquina host que debería elegir una tecnología de virtualización, iniciar una máquina en un estado de funcionamiento y luego tomar una instantánea (libvirt parece ser el favorito lógico para esto). Usar la instantánea para mostrar las instalaciones posteriores para pruebas o en producción.
Para las máquinas invitadas, lxc parece proporcionar la opción más fácil, excepto que poner en segundo plano un contenedor y conectarse más tarde a través de la consola está roto en todos los núcleos actuales, y la versión más nueva de lxc disponible para Debian estable tiene más de 18 meses. , y carece de muchas características que son muy útiles.
Por lo general, soy un desarrollador de aplicaciones, y no suelo trabajar con tecnología de nivel de servidor (y estoy seguro de que SF marcará esta pregunta como "demasiado subjetiva"), pero no estoy realmente seguro de qué herramientas buscar.
La última palabra es que sé de un proyecto apilado de manera similar (travis-ci.org) que está utilizando cajas Vagrant para esto. Parece un instrumento bastante contundente, herramientas grandes, lentas y orientadas al rubí diseñadas para el aprovisionamiento de escritorio a pequeña escala de máquinas virtuales de prueba que se utilizan para infraestructura de servicio crítica, pero también conozco a algunos de esos tipos, y son más inteligentes que yo, entonces tal vez simplemente se dieron por vencidos.
Cualquier ayuda apreciada.