CONTENERIZACIÓN Y ORQUESTACIÓN

En la actualidad, el tema de Envases y Orquestación está generalizado debido a su crecimiento en el mundo de las tecnologías de la información, sus ventajas y las grandes promesas que plantea. Diferentes proveedores y marcas (Oracle, IBM, Microsoft, RedHat, AWS) están introduciendo nuevos conceptos relacionados con estos temas y, por lo tanto, están surgiendo nuevos productos. Pero, ¿cuál es la utilidad de la tecnología de contenedores? ¿Qué ganamos con la contención? ¿Por qué es una solución a algunos de los problemas actuales en las áreas tecnológicas?

La mayoría de la gente ha oído hablar de Docker, y lo ven como la única tecnología de Containerización, pero no es la única solución del mercado, aunque es cierto que hasta la fecha es la más exitosa y es la que ha permitido generalizar. del concepto. La tecnología de contenedorización ya existía antes de Docker, es un concepto técnico relacionado con la construcción de kernels de Linux, y cómo permiten ciertos niveles de aislamiento.

En el mundo de la tecnología de contenedores tenemos:

  • Docker: es el producto estrella de Docker Company
  • Cri-o: Es la tecnología que eligió RedHat para poder soportar sus contenedores en OpenShift, que es su plataforma de Orquestación.
  • LXC: implementación de contenedores nativa basada en Linux

Plataformas de orquestación para estos contenedores tenemos:

  • Enjambre de Docker,
  • El producto de Google es Kubernetes
  • RedHat Open Shift

CONTENERIZACIÓN

Todos conocemos la tecnología de virtualización, donde las Máquinas Virtuales requieren hardware, un hipervisor, un sistema operativo base para las aplicaciones y un nivel de recursos para su operación. Es una tecnología muy útil que aún se utiliza y que se seguirá utilizando durante mucho tiempo y más en el mundo de la nube.

A diferencia de la virtualización, los contenedores son una nueva forma de encapsular una instancia, colocando todo en un solo producto "Contenedor" donde dentro se coloca lo que la aplicación necesita para operar, el Sistema Operativo, la plataforma y la aplicación. Aunque realmente es una abstracción, no requiere, por ejemplo, todo el Sistema Operativo. El contenedor no es una máquina virtual, por lo que no necesito el 100% de todos los elementos, solo lo que la aplicación realmente necesita, esto lo convierte en una forma muy liviana de encapsular.

Figura 1. Disi, R 2020. Comparación VIrtualización vs Contenerización, Diseño 3HTP

A diferencia del enfoque tradicional, donde el desarrollador comparte todo lo necesario para la aplicación, paquetes, parches, bibliotecas, y que se instala en el entorno de QA y producción y luego se inicia el entorno, configuración, problemas de versión, etc. Con los contenedores se evitan estos problemas, ya que la imagen viene con todo lo que la aplicación necesita, y de esta manera, no hay diferencia entre los entornos ya que el desarrollador entrega el contenedor y es exactamente igual a lo que se envía a QA. y producción.

El siguiente gráfico muestra una plataforma Docker que se tomará como ejemplo para explicar cómo funciona el concepto de contenedor, aunque todos los productos son similares e incluso tienen nombres similares.

Fig. 2 Cuervo. V (2019). Arquitectura Docker. [Figura 2]. Recuperado de http://www.arquitectoit.com/docker/arquitectura-docker/

Doker es fácil de entender, tiene una arquitectura cliente-servidor que es el host Docker donde se instala el software "Docker" y donde se ejecuta desde una imagen, una aplicación o un sistema operativo, una instancia llamada contenedor. Esto permite instalar varios contenedores de la misma imagen, podría tener una imagen que tuviera una aplicación Java y podría tener otras instancias con diferentes nombres que estarían en el mismo host de Docker en el mismo entorno.

Por otro lado, tienes el "Registry" que es una especie de repositorio que publico mis imágenes de forma centralizada, la idea es que se utilice el mismo Registro y que haya un Docker Host para Desarrollo, uno para QA, uno para Producción, etc. De esta manera, siempre se obtiene la imagen del mismo repositorio, por lo que se asegura que se instala la copia exacta, sistema operativo, plataforma y el entorno.

Además, cuenta con una capa cliente que permite la ejecución de comandos que se pueden hacer de forma local y permite ejecutar de forma rápida y sencilla diferentes tipos de aplicaciones y diferentes tecnologías, tanto si puedo prepararlo como si puedo obtenerlo de repositorios públicos como Docker Hub(https://hub.docker.com/),que es uno de los más conocidos. Actualmente, las diferentes marcas ya han publicado imágenes Docker certificadas, lo que permite a los desarrolladores obtenerlas y acelerar el proceso de desarrollo.

Luego cambia el enfoque, la tecnología Container nos permite movernos o movernos con la imagen de la aplicación por cada entorno, creando instancias de la imagen porque corresponden físicamente al mismo objeto, revolucionando el ciclo de trabajo y el mundo de DevOps y automatización, bueno ahora la única preocupación es obtener la imagen con la versión correcta en el Registro, haciendo mucho más rápido el ciclo de trabajo, ya que ya no hay pasos de instalación o parametrización tan largos, ya que la aplicación ya está lista en su entorno.

Fig. 3. Pedraza, I. 2020, Containerization Pipeline, Article Innovation in Technology, https://www.3htp.com/devops-y-contenedores-actores-importdamientos-de-la-agILIDAD/

Sin embargo, aún quedan aquellas tareas asociadas a la conexión a bases de datos, integraciones con aplicaciones o servicios externos, es decir, lo externo no se resuelve con esta tecnología. Sin embargo, sigue siendo un gran avance en el mundo del desarrollo y la automatización para el despliegue de aplicaciones, reduciendo los riesgos asociados a diferentes entornos.

Esta tecnología hace que la imagen sea agnóstica, se olvida completamente del entorno pues todo lo que requiere el aplicativo está en el contenedor, por eso no se recomiendan prácticas como la configuración de artefactos condicionados a cada ambiente, pues no tiene sentido en este nuevo escenario.

ORQUESTACIÓN

Ya hemos descrito brevemente en qué consiste el concepto de contenedor, los beneficios que aporta y en cierta medida su limitación con respecto a las conexiones y servicios externos. Sin embargo, si quiero usar contenedores en entornos complejos, donde, por ejemplo, tengo aplicaciones en contenedores, el servidor de aplicaciones está separado de la capa de datos y la capa web, ambas en contenedores diferentes en lugar de tener tres VM.

En este escenario aparecen nuevos problemas, qué pasa si quiero escalar, si necesito equilibrar y tener alta disponibilidad, cómo comunicar aquellos contenedores que necesitan estar conectados, cómo puedo monitorear los contenedores y ver cuál requiere mayor o menor número de recursos en algún momento.

Fig. 4 Paunin, D. 2018, The best architecture with Docker and Kubernetes – myth or reality? https://medium.com/@dpaunin/the-best-architecture-with-docker-and-kubernetes-myth-or-reality-77b4f8f3804d

Entonces, ¿cómo resolvemos estas preguntas? Necesito una herramienta que me permita resolver estos problemas. Para dar respuesta a estas necesidades surgen las plataformas de Orquestación Kubernetes, Openshift y Docker Swarm, que son soluciones similares que me permiten trabajar de forma más elaborada con contenedores.

Fig 5. Arquitectura de Kubernetes

La imagen que se muestra toma la estructura de Kubernetes como ejemplo y muestra los diferentes elementos y conceptos que son similares en todos los sistemas de orquestación. Cuentan con soporte empresarial, un sistema base de infraestructura que ahorra tiempo en la instalación y configuración de la infraestructura para ejecutar un clúster y otros elementos como el Master, los Workers, este último es el que ejecuta las aplicaciones. Tiene clusters que se forman con más de una instancia (pods) de contenedores y un repositorio Etcd, una base de datos donde se almacena toda la configuración entre otros componentes.

También tiene un componente, en este caso, el kubetctl, que permite interactuar con el maestro a través de líneas de comando y envía instrucciones a cada uno de los trabajadores, de tal manera que el maestro me permite escalar horizontal o verticalmente, redistribuyendo la carga. si se le agrega un trabajador, esto realmente nos permite tener lo que se define en la literatura como un clúster dinámico.

"Los conceptos son muy similares a las arquitecturas de un servidor de aplicaciones Java y J2E con los conceptos de dominio, agentes de nodo, clúster, etc. A diferencia de J2E, donde solo las aplicaciones empresariales pueden ejecutarse bajo el estándar, en el caso de las plataformas de orquestación de contenedores, se puede implementar cualquier tipo de aplicaciones independientes de la tecnología.

Hoy en día los diferentes proveedores de nube cuentan con soluciones de monitorización que permiten automatizar la escalabilidad de los recursos en las plataformas de Orquestación que permite, a la vez, gestionar la cantidad de recursos hacia arriba o hacia abajo en función de la demanda.

En este sentido tenemos dos grandes fortalezas: con los contenedores, se gana todo el poder para encapsular aplicaciones independientemente de la tecnología en la que se desarrolle, y con la capa de Orquestación se obtiene el poder de lograr tener alta disponibilidad, escalabilidad, elasticidad y compartición. entornos, lo que permite el uso de recursos cuando lo requieren aquellas aplicaciones que en determinados momentos generan aumentos de demanda. Todo lo anterior es conceptual y técnicamente posible. Sin embargo, estos conceptos requieren un proceso de comprensión y maduración. Tanto la tecnología de contenedores como las capas de orquestación requieren una gran cantidad de recursos, por ejemplo, si queremos una solución de alta disponibilidad para un maestro, se requieren soluciones de clúster de 3 – 5 – 9, lo que significa tener recursos, máquinas de cierta capacidad.

¿EN QUÉ ESCENARIO PODEMOS UTILIZAR LA TECNOLOGÍA DE CONTENCIÓN?

Hoy tenemos dos escenarios o enfoques en los que nos volcamos hacia la tecnología de Orquestación y Containerización: el primer enfoque es la modernización de las aplicaciones existentes. En concreto, aplicaciones empresariales que se ejecutan en un entorno Unix o en un entorno que se preste a ser portable, Java, J2E, etc. Hay empresas que están saliendo del mundo Unix propietario y optando por otras variantes. Esta modernización se da por algunas razones:

  • Acelera el ciclo de vida.
  • Mejore la disponibilidad y la escalabilidad de las aplicaciones
  • Prepárese para la migración a una plataforma en la nube

Muchas marcas ya están apoyando sus plataformas en contenedores, muchos servidores de fábrica que ya tienen portabilidad de contenedores, no el mundo de las bases de datos que todavía tiene un largo camino por recorrer. Una de las técnicas de modernización utilizadas en este enfoque es Reshapes, una técnica de adopción de la nube que permite crear un contenedor con pocas modificaciones.

La modernización enfrenta algunos desafíos, uno es la homologación, la configuración y la dependencia de las aplicaciones que tiene varias técnicas para resolver estas tareas. Otro desafío es que algunas de las marcas no admiten versiones antiguas de los mismos productos. Otro aspecto es la estructura de las aplicaciones que quieres migrar y que no están diseñadas o desarrolladas para permitir elasticidad y no están preparadas para trabajar con más de una instancia. Además, en este nuevo entorno, los desarrolladores deben conocer no solo sobre Containerización, sino también sobre el desarrollo de aplicaciones tradicionales.

El otro enfoque es el diseño y desarrollo desde cero para contenedores y orquestación. Esta tecnología me brinda elementos de diseño muy innovadores para trabajar de manera modular, donde se pueden tener componentes en diferentes contenedores y que su suma se conforma a una aplicación más compleja, más elástica, más trazabilidad y tolerancia a diferentes escenarios.

El desarrollo nativo en envases también ofrece posibilidades de avanzar, hay marcas que claramente apoyan sus productos en esta tecnología, existe una gran variedad de componentes para los diferentes problemas que presentan. Por otro lado, quedan algunos retos, como el conocimiento que aún se debe adquirir sobre esta tecnología y romper las inercias y paradigmas en el diseño y desarrollo de aplicaciones, olvidándonos de las arquitecturas tradicionales.

La Containerización y Orquestación forman una de las verticales y tipos de tecnologías dentro de los niveles de Cloud Landscape que permite el desarrollo de aplicaciones de una manera más portable permite corregir o reducir deficiencias que existen en los procesos de desarrollo e implementación de Las soluciones aún tienen grandes líneas de desarrollo y retos a superar, pero es una de las variantes a tener en cuenta a la hora de tomar una decisión en el mundo de las tecnologías de la información.

Fig.6 Paisaje nativo de la nube, 2019.

La contenerización es una de las tecnologías que están presentes en el mundo Cloud, permite reducir en gran medida muchos de los problemas que existen hoy en día en los procesos de desarrollo, automatización y despliegue de una aplicación.

Podemos decir que los contenedores son una forma portátil de definir software, y la orquestación es una definición portátil de cómo se debe ejecutar, implementar y monitorear ese software.

Renzo Disi | Director 3HTP | Santiago de Chile | Charla sobre Containerización y Orquestación | 2020

Fiesta de pijamas | Containerización y Orquestación | Expositor. Renzo Disi. Director 3HTP | 05-12-2020.