Tecnología para máquinas virtuales privadas de corta duración


8

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:

  1. Arranca una máquina (virtual o de otro tipo) y tenla lista para trabajar.
  2. El trabajo debe ser realizado por un script instalado por chef / puppet / babushka / etc.
  3. Cuando entra el trabajo, se debe iniciar una máquina virtual para hacer el trabajo.
  4. 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

  1. 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 .)
  2. 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 )
  3. 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):

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


Verdaderamente devops ... Esto definitivamente se puede automatizar. Construir el sistema es fácil. Supongo que puede realizar un script del trabajo o utilizar la herramienta de administración de configuración que elija. Sería útil obtener más información sobre el destino o el resultado final de este esfuerzo. Estás justo en el límite entre una solución de nube privada o usando algo como LXC ...
ewwhite

Absolutamente, el punto es poder construir el host de una manera que mi equipo y yo (usuarios de Mac) podamos construir repetidamente un host , dentro del cual podamos desarrollar con invitados LCX, pero construirlo de una manera que también podamos implementar a la producción. Todas las herramientas para nuestra aplicación están escritas en Ruby, y REALMENTE me gustaría usar LXC para los invitados. La máquina host es, naturalmente, de larga duración, pero como la vida útil típica de un huésped será de 2 a 10 minutos, toda la infraestructura es realmente efímera. Se trata de desarrollo versus producción, y tener un proceso repetible.
Lee Hambley

Respuestas:


2

Algunas ideas:

  1. Su punto "cientos de máquinas virtuales en hardware razonable" me hace pensar (sin experiencia personal) en máquinas virtuales que se inician en la red o comparten la mayor parte de su espacio de volumen (/ usr) a través de NFS. Depende de cuán similares sean sus máquinas virtuales.
  2. "Lo poco que pude conseguir fue frágil como el infierno" Difícil de creer. ¿Puede ser más preciso cuál es el problema?
  3. "sería difícil de instalar en una máquina real" ¿Quiere decir "difícil" en comparación con qué, a la solución deseada de 1 clic para la creación de VM? Yo preguntaría: ¿Qué tan difícil es esto y con qué frecuencia va a suceder esto? ¿Cuál es la diferencia, recrear el initrd para el hardware respectivo?
  4. "Sin embargo, no puedo instalarlo lo suficiente" ¿Qué quieres / necesitas y por qué no funciona? Puede hacer que la descarga de un script forme parte del proceso de arranque. La VM obtiene su IP mediante DHCP (configurada de forma rígida para la dirección MAC de las VM) y Samba entrega diferentes scripts posteriores a la instalación a las VM, dependiendo de la dirección IP del cliente.

+1 para arranque de red. No tengo suficiente experiencia para escribir una respuesta completa al respecto, pero puedo decirle que he estado en lugares que implementan cientos de máquinas, tanto físicas como virtuales, haciendo que se inicien desde un servidor PXE. Significa que no tendrá que preocuparse con imágenes de disco separadas para cada VM.
Moshe Katz

1

Mientras leía tu publicación, seguí pensando que vagabundo y jenkins con el complemento vagabundo se adaptarían bastante bien a tus necesidades. Cualquier cuadro que tenga que pueda manejar la cantidad de máquinas virtuales de las que está hablando ni siquiera debería notar la sobrecarga de las herramientas que mantienen el entorno.


0

Usando algo que funciona en Apple y Debian, lo único que he probado es virtual box. Lo bueno de usar virtualbox aquí es que podrías construir una VM en tu sistema Mac y copiarla en un sistema Debian usando la misma versión de virtual box y se iniciará.

Tener cientos de vms usando una caja virtual suena como si pasaras un poco de tiempo usando la interfaz vboxmange para escribir la información única necesaria para cada vm. Al igual que los uuids para discos duros, la dirección mac en las interfaces de red.

Si el sistema base va a usar el mismo software configurado de la misma manera, puede crear una instantánea del sistema en la caja virtual y congelarlo. Para que los cambios realizados no se escriban sobre su instantánea congelada, sino que se escriban en una nueva área de almacenamiento temporal. Luego, apague la máquina virtual, vuelva a la instantánea y estará trabajando en un sistema limpio sin ningún cambio que se haya realizado durante las pruebas. Todo esto puede ser programado usando vboxmange .

Usando su instantánea , también podría hacer cientos de copias de esa imagen de VM. Usando la interfaz de secuencias de comandos vboxmange para hacer las copias, únicas en las formas que importan, es decir, uuids y direcciones mac. Luego, solicite una secuencia de comandos de inicio que cambia, configuraciones que necesita aplicar a sus máquinas virtuales para realizar pruebas o ejecutar varias pruebas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.