Fundamentos de Project Atomic: Paraíso para DevOps
Presentación para el primer Pre DevConf. Explicación sobre qué es Project Atomic, sus componentes y arquitectura, mayores beneficios y formas de implementación.
DE DEVOPS Herramientas más utilizadas: DevOps está creciendo rápido, especialmente en corporaciones La adopción de contenedores está madurando, especialmente en corporaciones Hay un alto interés en ejecutar contenedores en servidores físicos Todavía existe una brecha de conocimiento en el manejo de estas tecnologías
101 Project Atomic es un paraguas para muchos proyectos relacionados con re-definir el concepto de sistema operativo alrededor del principio de infraestructura inmutable, utilizando una capa LDK (Linux, Docker, Kubernetes). Provee un servidor optimizado para ejecutar y gestionar contenedores Todas las aplicaciones son ejecutadas como contenedores, no como programas de servidor Listo para ambientes en la nube, virtualizados y servidores físicos El servidor debe desplegar y manejar actualizaciones de manera sencilla
HOST • Bloque de construcción principal de Project Atomic. • Sistema operativo ligero para contenedores. • Son inmutables, es decir, viene de un único repositorio. • Las aplicaciones se ejecutan en contenedores. • Implementado en Fedora, CentOS y Red Hat.
HOST Modelo de Sistema de Archivos • /usr es sólo-lectura • Sólo /etc y /var se pueden escribir. • /etc se reconfigura en actualizaciones (diff) • /var no se toca • /home -> /var/home
HOST Modelo de Almacenamiento • Partición por defecto crea 3GB para el volúmen lógico root. • El servicio docker-storage-setup configura un pool llamado docker-pool con el espacio restante. • Este espacio es utilizado para almacenar todas las imágenes de los contenedores. • Dimensionamiento por defecto de la partición root puede ser cambiando durante o después de la instalación.
HOST Modelo de Red (1 servidor) • Los contenedores tendrán una IP privada. Esto permite comunicación entre contenedores. • Los contenedores se pueden comunicar con aplicaciones externas a través de métodos de pase de puertos. • La comunicación entre contenedores se da utilizando nombres en lugar de valores de red.
• Plataforma de contenerización más popular. • Permite componer aplicaciones de microservicios, sin preocuparse en las inconsistencias entre los ambientes de producción y desarrollo. • Permite arquitectar el ciclo completo de desarrollo, pruebas y distribución de la aplicación. • Ofrece la habilidad de desplegar servicios escalables, seguros y confiables, en una amplia variedad de plataformas.
• Automatización de despliegue, escalabilidad y administración de aplicaciones en contenedores. • Agrupa contenedores para convertir aplicaciones en unidades lógicas para su fácil gestión y descubrimiento. • Automáticamente mueve contenedores basados en sus requerimientos de recursos y limitaciones. • Reinicia contenedores que fallan o que no responden a validaciones de salud de usuario. • Usa almacenamiento tipo NFS, iSCSI, Gluster y AWS.
• Es un sistema de paquetes/imágenes híbrido. • Utiliza OSTree como formato base. • Soporta RPM utilizando la librería core libhif (implementada en dnf, PackageKit). • Las actualizaciones de sistema son atómicas. • Tiene una herramienta de servidor para consumir RPMs y entregarlos a un repositorio OSTree y de un demonio para consumir como actualizaciones. • Es conocido como el 'Git de los sistemas operativos'.
atomic run • Atomic permite a un proveedor de imagen proveer cómo una imagen de contenedor se pueda ejecutar. Ejemplo: Construcción de un contenedor con ntpd con capacidad de SYS_TIME LABEL RUN /usr/bin/docker run –d --cap-add=SYS_TIME ntpd La ejecución de atomic run ntpd, leerá el JSON definido en el LABEL RUN.
atomic install / atomic uninstall • Esta herramienta permite a los desarrolladores embeber los scripts de instalación y desinstalación dentro de la aplicación. • Los métodos LABEL INSTALL y LABEL UNINSTALL permiten actualizar la metadata para ejecutar los procedimientos.
• Herramienta de administración que provee una interfaz de usuario para monitorizar y administrar servidores a través de un navegador web. • Permite gestionar valores actuales y ajustar límites en recursos del sistema, controlar el ciclo de vida de las instancias de los contenedores y manipular las imágenes de contenedores.
No incluye una capa de funcionalidades no presentes en los sistemas. No toma control de los servidores. Lo que se configura desde Cockpit, se maneja ahí. No quiere configuración o infraestructura, y una vez instalado, está listo para uso. Tiene cero footprint de memoria y procesos en el servidor cuando no está en uso. No almacena data o políticas. Incluso no tienen usuarios propios. Dinámicamente se actualiza para reflejar el estado del servidor, en segundos. No está intencionado para gestión de configuración, pero se puede integrar con otras herramientas.
• Es un instalador para aplicaciones basadas en contenedores. • Permite cambiar parámetros de ejecución para distintos entornos. • Tiene proveedores de orquestación para empaquetar la aplicación para diferentes plataformas (OpenShift, Kubernetes, Helios, entre otros). • Define un patrón y modelo para empaquetar aplicaciones y servicios multi- contenedores complejas, referenciando todas sus dependencias, incluyendo metadata de orquestación.
• Es una implementación de referencia sobre la especificación Nulecule. • Los contenedores en Project Atomic se trabajan en este marco. • Un instalador empaquetado para todos las aplicaciones y entornos basados en contenedores (eliminación de scripts). • Trabaja con múltiples proveedores (Kubernetes, OpenShift, Mesos+Marathon). • Hereda contenedores que ya fueron empaquetados (apache, etherpad, flask, redis, gitlab, gocounter, mariadb, mongodb, postgresql, skydns, wordpress) • Recupera y ejecuta entornos completos.
REGISTRY • Está basado en tecnología de OpenShift que maneja un registro embedido usando la librería Docker distribution (de donde nace Docker Registry). • Utiliza lo siguiente: • Consola web orientada a usuario final • Proveedor de autenticación global • Colaboración basado en RBAC • Gestión de servicios basado en clústeres Kubernetes • Vista única virtual de imágenes con Image Streams.
• Es un API REST ligero para gestión de servidores Kubernetes. • Está compuesto por: • commissaire-service: Provee microservicios y código base para los servicios • commissaire-http: Provee front-end HTTP REST. Responsable de enrutar las peticiones, la lógica de negocio, pasar el trabajo a los servicios y responder los resultados de vuelta al cliente. • Funciona con Python 3.5+
DEVELOPER BUNDLE • Es un entorno de desarrollo pre- empaquetado (para Vagrant) llenado con herramientas que hacen el desarrollo de contendores más fácil. • Soporta el desarrollo de aplicaciones multi-contenedores contra diferentes tecnologías y orquestadores mientras provee una ruta para promover las mejores prácticas. Pre- configurado Soporte a múltiples entornos Listas para producción Auto- contenidas Código abierto
♥ PROJECT ATOMIC Ejecutamos contenedores Linux en CentOS, Fedora o Red Hat. Cumplimos el modelo empresarial centrado en aplicaciones. Reduce la complejidad de la capa de software, el cantidad de capas y la velocidad de cambio de forma consistente. DevOps tiene control sobre su entorno de ejecución debajo de sus aplicaciones, sin necesariamente conocer todo la capa completa. Olvidamos a las máquinas virtuales, que incrementa el uso de recurso y tiempo de administración.
NO DEBES ESPERAR Los Atomic Host son inmutables. No se debe esperar instalar paquetes en sistemas en ejecución. Las imágenes oficiales son mínimas. Posiblemente tus herramientas favoritas no estarán incluidas. Fuera de tareas de desarrollo y soporte, no se debe iniciar sesión en un Atomic Host.