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)?
Respuestas:
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.
fuente
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?
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 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.
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.
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.
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.
fuente
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.
fuente
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 join
tokens. 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 deploy
desde 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
yum
oapt-get
sobre 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
provider
sección. Eso sí, no he pasado por configurar OpenStack en una sola computadora para administrar VirtualBox.fuente