Relación entre Vagrant, Docker, Chef y OpenStack (o productos similares)?

Soy desarrollador web, pero también me interesan algunas tareas administrativas. Por lo tanto, el nuevo paso de la administración pura a las operaciones de desarrollo es útil para mí.

De todos modos, tengo algunos problemas para poner algunas cosas en una relación. Tal vez no hay ninguno, así que quería pedir ayuda para aclarar.

Básicamente, lo que quiero relacionar son cuatro tipos de software (según tengo entendido). Los productos exactos no importan, puede colocar cualquier software similar como alternativa:

  • Vagabundo: Según tengo entendido, es automatizar la creación y administración de máquinas virtuales: configurarlas, iniciarlas y detenerlas. Esto se puede hacer usando una máquina virtual local o remota, por ejemplo, en una plataforma en la nube.
  • Docker: Una "máquina virtual liviana", basada en algunos conceptos del kernel de Linux, que se puede usar para ejecutar procesos de forma aislada, por ejemplo, en un entorno de alojamiento web compartido.
  • Chef: Una herramienta para configurar y configurar un sistema operativo, por ejemplo, dentro de una máquina virtual.
  • OpenStack: Una herramienta que le permite construir su propia nube privada, por lo tanto, comparable a algo como AWS.

Pregunta # 1: ¿Son correctas mis explicaciones, o estoy equivocado con algunos (o todos) de estos consumos?

Pregunta # 2: ¿Cómo podría mezclar todas esas herramientas? ¿Tendría algún sentido?

En mi imaginación y desde mi punto de vista, podrías ir y

  • utilice OpenStack para crear su propia nube,
  • use Vagrant para administrar las máquinas virtuales que se ejecutan en la nube,
  • use Chef para configurar estas máquinas virtuales
  • y finalmente, use Docker para ejecutar procesos dentro de las máquinas virtuales.

¿Es correcto? Y si es así, ¿me puedes dar un consejo sobre cómo empezar a usar todo esto (es bastante al mismo tiempo, y aún no se por dónde empezar)?

Usemos sus respectivas páginas web para averiguar de qué se tratan todos estos proyectos. Sin embargo, cambiaré el orden en que enumeraste:

  • Chef Chef es una plataforma de automatización que transforma la infraestructura en código.

    Esta es una software de gestión de configuración. La mayoría de ellos utilizan el mismo paradigma: permiten definir el estado desea que una máquina sea, con respecto a los archivos de configuración, el software instalado, los usuarios, los grupos y muchos otros tipos de recursos. La mayoría de ellos también proporcionan funcionalidad para enviar cambios a máquinas específicas, un proceso generalmente llamado orquestación.

  • Vagabundo: Cree y configure entornos de desarrollo ligeros, reproducibles y portátiles.

    Proporciona un reproducible forma de generar máquinas totalmente virtualizadas utilizando la tecnología VirtualBox o VMware de Oracle como proveedor. Vagrant puede coordinarse con un software de administración de configuración para continuar el proceso de instalación donde finaliza el instalador del sistema operativo. Esto se conoce como aprovisionamiento.

  • Ventana acoplable: Un proyecto de código abierto para empaquetar, enviar y ejecutar cualquier aplicación como un contenedor ligero

    La funcionalidad de este software se superpone un poco con la de Vagrant, en la que proporciona los medios para definir las instalaciones de los sistemas operativos, pero difiere mucho en la tecnología utilizada para este propósito. Usos de Docker Contenedores Linux, que no son máquinas virtuales per se, sino procesos aislados que se ejecutan en sistemas de archivos aislados. Docker también puede usar un sistema de gestión de la configuración para aprovisionar los contenedores.

  • OpenStack: Software de código abierto para la creación de nubes privadas y públicas.

    Si bien es cierto que OpenStack se puede implementar en una sola máquina, tal despliegue es puramente para prueba de concepto, probablemente no muy funcional debido a limitaciones de recursos.

    El objetivo principal de las instalaciones de OpenStack son los entornos multinodo de metal desnudo, donde diferentes componentes se puede utilizar en hardware dedicado para lograr mejores resultados.

    Una funcionalidad clave de OpenStack es su soporte para muchas tecnologías de virtualización, desde totalmente virtualizadas (VirtualBox, VMware), hasta paravirtualizadas (KVM/Qemu) y también contenedores (LXC) e incluso Modo de usuario Linux (UML).

He intentado presentar estos productos como componentes de una arquitectura específica. Desde mi punto de vista, tiene sentido poder definir primero sus necesidades con respecto al entorno que necesita (Chef, Puppet, Ansible, ...), luego poder implementarlo de manera controlada (Vagrant, Docker,...) y, finalmente, escalarlo a un tamaño global si es necesario.

La cantidad de toda esta funcionalidad que necesita debe definirse en el alcance de su proyecto.

También tenga en cuenta que he simplificado en exceso la mayoría de las explicaciones técnicas. Utilice los enlaces de referencia para obtener información detallada.

Creo que venir de un fondo de desarrollador hará que convertirse en un 'devops' en realidad sea más complicado, su pregunta tiene casi 3 años, por lo que sería interesante escuchar cómo está encontrando el viaje, daré una respuesta desde el punto de vista del administrador del sistema sobre las aplicaciones que mencionó anteriormente y, con suerte, arrojará algo de luz, o dará una perspectiva no técnica que explicará por qué una persona (administrador o desarrollador) comenzaría a considerar exactamente lo que ha preguntado, por ejemplo, desde la perspectiva de devops, cuál es la relación entre x, y, z, son estas herramientas mayores que la suma de ¿sus partes?

De hecho, creo que los administradores de sistemas tienen la ventaja aquí, la mayoría de las aplicaciones que menciona en su pregunta resuelven 'problemas' de administración y, al hacerlo, proporcionan un entorno de centro de datos más abstracto, y esto a su vez es más programable para los desarrolladores y la nueva estrategia 'devops' (léase estrategia/equipo, devops no es una persona). Entonces, ¿cuál es la relación con las aplicaciones que mencionas? ¿cómo proporciona esto un enfoque holístico para el servicio de TI?

OpenStack: Una herramienta que le permite construir su propia nube privada, por lo tanto, comparable a algo como AWS

Eso es lo que es, pero ¿qué hace? - el sistema operativo, en su mayoría con un nombre apropiado, era D. O. S : operaba su disco abstrayendo el BIOS, OpenStack opera su centro de datos y abstrae su infraestructura (IaaS, es la jerga para el sistema operativo del centro de datos). Ahora que su centro de datos tiene una API, una sintaxis de comandos y una GUI, OpenStack puede manejar hipervisores, conmutadores, enrutadores, firewalls, redes de área de almacenamiento, equilibradores de carga, hosts de docker, etc.. Openstack usa el'complemento' de su fabricante de hardware o la función particular puede existir únicamente en el software como se define en el software algo o virtualización de funciones de red. Además de esto, OpenStack, y todas las demás nubes, pueden orquestar su propia infraestructura leyendo los scripts que lanza en el motor de orquestación o que se activan en función de reglas (ampliación, reducción de escala, etc.). Así que Openstack es una capa gigante de abstracción, por ejemplo, no me importa qué conmutador tenga, dame una red con este comando, o, constrúyame una carga complicada equilibrada, HA, disponible públicamente, escalado automático, nombre de dominio registrado, almacenamiento adjunto cosita - con este script que encontré en Internet.

Docker: Una "máquina virtual liviana", basada en algunos conceptos del kernel de Linux, que se puede usar para ejecutar procesos de forma aislada, por ejemplo, en un entorno de alojamiento web compartido.

Docker es otra capa de abstracción y, al igual que la nube es una tecnología disruptiva, está cambiando la industria porque resuelve muchos "problemas" operativos, como dependencias de software, actualizaciones, aislamiento de datos y pura portabilidad. Java se hizo popular debido a su portabilidad de código fuente en la que los desarrolladores no tenían que pensar, una JVM en ejecución significaba que su código debería ejecutarse en la máquina de café siempre que sea compatible con Java. Docker resuelve un problema similar, para ejecutar mi aplicación necesita un host docker, ni, necesita esta versión de Python, este kernel, esta distribución de Linux, etc., la aplicación todavía tiene esas dependencias, por supuesto, pero al host subyacente no le importa y al administrador no le importa lo que haga dentro de un contenedor aislado (hasta cierto punto). Docker está cambiando el paradigma de desarrollo y operaciones, tratando un sistema operativo completo y sus servicios como un binario. podemos obtenerlos de un repositorio, versionarlos, modificarlos, ejecutarlos con parámetros, etc.

Chef: Una herramienta para configurar y configurar un sistema operativo, por ejemplo, dentro de una máquina virtual.

Sí, y no tan disruptivo como los dos primeros, Chef, puppet, ansible, salt, system center operations manager y una gran cantidad de otras aplicaciones en este espacio proporcionan una forma para que los desarrolladores y administradores modelen implementaciones, actualizaciones y otras acciones (cambios de configuración), no parece haber ningún organismo de estándares que analice estos esfuerzos como hay para la nube. Pero no estamos tratando con algo tan definitivo como la Infraestructura, por lo que es más doloroso aprenderlos y no mucho es transferible de uno a otro.

Vagabundo: Según tengo entendido, es automatizar la creación y administración de máquinas virtuales: configurarlas, iniciarlas y detenerlas. Esto se puede hacer usando una máquina virtual local o remota, por ejemplo, en una plataforma en la nube.

Esta es la extraña en la lista de aplicaciones que mencionas, Vagrant es una herramienta para desarrolladores y un juguete para administradores, puedes crear rápidamente un entorno de desarrollo con vagrant, por ejemplo, quiero desarrollar una aplicación de Android, tome un IDE de vagrant, creo que Docker lo superará pronto.

¿me puedes dar un consejo sobre cómo empezar a usar todo esto (es bastante al mismo tiempo, y aún no se por dónde empezar)?

Es por eso que creo que los administradores tienen la ventaja, hemos tenido que hacer la mayor parte de esto manualmente y saber qué puede salir mal, los manifiestos de marionetas, la computación en la nube y la orquestación de docker nos resultarán más fáciles, los desarrolladores se encontrarán tomando muchas tangentes, por lo que mi consejo para cualquier devops potencial es ser un administrador primero.

Por mi parte, estoy usando una combinación de Vagrant y Docker solamente.

Uso vagrant para aprovisionar las máquinas (hay proveedores de nube adicionales pero estoy usando el VirtualBox incorporado. Debido a que estoy usando este enfoque, la red y el almacenamiento externos son prácticamente manuales, pero si usa algo como vagabundo-aws complemento puede indicarle a AWS que aprovisione las piezas necesarias por usted.

El script de aprovisionamiento que utilizo apunta a una ubicación segura que contiene el certificado de CA y las claves utilizadas para firmar CSR junto con el docker swarm join token. Además, instalo docker-engine y lo configuro para unirme al enjambre (inicializo si no hay ninguno).

Una vez que se resuelve, simplemente hago un docker stack deploy desde mi máquina local o caja de compilación para implementar la pila con todo lo que necesito.

En mi caso, me caí chef a favor de simplemente usar scripts simples posteriores a la instalación que lo hagan yum o apt-get como mis scripts de aprovisionamiento.

También uso el vagabundo-desencadenantes complemento para agregar secuencias de comandos adicionales antes de destruir (en mi caso para dejar el enjambre).

Lo bueno de centralizar con Vagrant es que puede replicar el entorno en otro sistema o en una sola computadora para el desarrollo, solo tiene que agregar o cambiar el provider apartado. Eso sí, no he pasado por la configuración de OpenStack en una sola computadora para administrar VirtualBox.

No es lo suficientemente hábil como para responder esto por completo, pero su evaluación de Vagrant y Chef parece ser correcta. En mi caja de desarrollo, enciendo máquinas virtuales usando Vagrant y luego las aprovisiono con Chef y funciona muy bien.