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

56

Soy desarrollador web, pero también estoy interesado en algunas tareas administrativas. Por lo tanto, el nuevo paso de la administración pura a las operaciones de desarrollo me resulta útil.

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

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

  • Vagabundo: desde mi punto de vista 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 "VM ligera", basada en algunos conceptos de 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 VM.
  • OpenStack: una herramienta que le permite construir su propia nube privada, por lo tanto comparable a algo como AWS.

Pregunta n. ° 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

  • usa OpenStack para construir tu 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 esto correcto? Y si es así, ¿puede darme un consejo sobre cómo comenzar a usar todo esto (es bastante al mismo tiempo, y aún no sé por dónde empezar)?

Golo Roden
fuente
1
No tiene la habilidad suficiente para responder esto por completo, pero su evaluación de Vagrant y Chef parece ser correcta. En mi caja de desarrollo, giro máquinas virtuales usando Vagrant y luego las aprovisiono con Chef y funciona muy bien.
GSP

Respuestas:

54

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

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

    Este es un software de gestión de configuración . La mayoría de ellos usan el mismo paradigma: le permiten definir el estado que desea que tenga una máquina, 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 impulsar cambios en máquinas específicas, un proceso generalmente llamado orquestación .

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

    Proporciona una forma reproducible de generar máquinas totalmente virtualizadas utilizando VirtualBox de Oracle o la tecnología VMWare como proveedores . 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 .

  • Docker : un proyecto de código abierto para empacar, enviar y ejecutar cualquier aplicación como un contenedor liviano

    La funcionalidad de este software se superpone en cierta medida 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. Docker utiliza contenedores de 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 configuración para aprovisionar los contenedores.

  • OpenStack : software de código abierto para construir nubes privadas y públicas.

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

    El objetivo principal para las instalaciones de OpenStack son los entornos de nodos múltiples de metal desnudo, donde los diferentes componentes se pueden usar en hardware dedicado para lograr mejores resultados.

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

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

Cuánto de toda esta funcionalidad que necesita debe definirse en el alcance de su proyecto.

También tenga en cuenta que he simplificado demasiado todas las explicaciones técnicas. Utilice los enlaces a los que se hace referencia para obtener información detallada.

Dawud
fuente
¿Son Chef y Puppet la misma herramienta? Quiero decir que son equivalentes? Si desea ejecutar esto en un host de Windows 10, ¿qué herramientas usaría?
ReynierPM
Puppet es una herramienta similar a Chef. No estoy seguro de si es mejor en Windows ...
Adeerlike
3

Creo que venir de un fondo de desarrollador hará que convertirse en 'devops' sea realmente más complicado, su pregunta tiene casi 3 años, por lo que sería interesante saber cómo está encontrando el viaje, le daré una respuesta desde el punto de vista de el 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 pedido, por ejemplo, a los desarrolladores ¿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 del sistema tienen la ventaja aquí, la mayoría de las aplicaciones que mencionas en tu pregunta resuelven los 'problemas' del administrador 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 el nuevo ' estrategia de devops (lea 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 al 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 más adecuado era DOS - 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 su centro de datos tiene una API, una sintaxis de comandos y una GUI, OpenStack puede controlar hipervisores, conmutadores, enrutadores, cortafuegos, redes de área de almacenamiento, equilibradores de carga, hosts acoplables, etc. Openstack utiliza el complemento de los fabricantes de hardware o la función particular puede existir únicamente en el software como el software define algoo virtualización de funciones de red. Además de este OpenStack, y todas las demás nubes, pueden orquestar su propia infraestructura al leer los scripts que lanzas al motor de orquestación o se activan según las reglas (escalar, escalar, etc.). Entonces, OpenStack es una capa gigante de abstracción, por ejemplo, no me importa qué interruptor tengo, me da una red con este comando o me construye una carga equilibrada complicada, HA, disponible públicamente, escalado automático, nombre de dominio registrado, almacenamiento adjunto cosita - con este script que encontré en internet.

Docker: una "VM ligera", basada en algunos conceptos de 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 portabilidad. Java se hizo popular debido a la portabilidad del código fuente en el que los desarrolladores no tuvieron que pensar, una JVM en ejecución significaba que su código debería ejecutarse en la máquina de café siempre que fuera compatible con Java. Docker resuelve un problema similar, para ejecutar mi aplicación necesitas un host docker, no, 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 ( a un 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 VM.

Sí, y no tan disruptivo como los dos primeros, Chef, puppet, ansible, salt, gerente de operaciones del centro del sistema 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 (config cambios), no parece haber ningún organismo de estándares que analice estos esfuerzos como lo hay para la nube . Pero no estamos lidiando 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: desde mi punto de vista 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.

Este es el extraño en la lista de aplicaciones que menciona, Vagrant es una herramienta para desarrolladores y un juguete para administradores, puede defender rápidamente un entorno de desarrollo con vagabundo, por ejemplo, quiero desarrollar una aplicación de Android, obtener un IDE de vagabundo, creo que Docker lo superará pronto.

¿Me puede dar un consejo sobre cómo comenzar a usar todo esto (es bastante al mismo tiempo, y aún no sé 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 títeres, 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 para que mi El consejo para cualquier desarrollador potencial es ser un administrador primero.

Sum1sAdmin
fuente
0

Acabo de terminar un proyecto de implementación de OpenStack que usa un servidor Chef dentro de una instancia de Vagrant: https://github.com/bluechiptek/bluechipstack/blob/master/README.md

El principal problema al hacerlo de esta manera es conseguir que la instancia de Vagrant tenga la misma IP cada vez que desee administrar los nodos. Si haces direccionamiento estático, funciona bien. Hacerlo a través de una VPN es menos que ideal.

sin cuerdas
fuente
0

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

Uso vagabundo 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 externa y el almacenamiento son prácticamente manuales, pero si usa algo como el complemento vagrant-aws puede dígale a AWS que le proporcione las piezas necesarias

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 los docker swarm jointokens. Además, instalo docker-engine y lo configuro para unirse al enjambre (inicializar si no hay ninguno).

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

En mi caso me acaba de caer el chef a favor de usar sólo las secuencias de comandos posteriores a la instalación simples que hacen yumo apt-getsobre como mis scripts de aprovisionamiento.

También uso el plugin vagrant-triggers para agregar secuencias de comandos adicionales antes de destruir (en mi caso, dejar el enjambre).

La parte buena de centralizar con Vagrant es que puede replicar el entorno en otro sistema o computadora individual para el desarrollo, solo tiene que agregar o cambiar la providersección. Eso sí, no he pasado por configurar OpenStack en una sola computadora para administrar VirtualBox.

Arquímedes Trajano
fuente