CONTENERIZACIÓN Y ORQUESTACIÓN

CONTENERIZACIÓN Y ORQUESTACIÓN

En la actualidad es generalizado el tema de Contenedores y Orquestación por su crecimiento en el mundo de las tecnologías de la información, sus ventajas y las grandes promesas que plantea. Los diferentes vendors y marcas (Oracle, IBM, Microsoft, RedHat, AWS) están introduciendo nuevos conceptos relacionados a estos temas y por ende están surgiendo nuevos productos. ¿Pero cuál es la utilidad de la tecnología de contenedores? ¿qué ganamos con la conteneriación? ¿Por qué constituye una solución para algunos de los problemas actuales de las áreas de tecnología?

La mayoría de las personas ha escuchado hablar de Docker, y la ven como la única tecnología de Contenerización, pero no es la única solución en el mercado, aunque es cierto que hasta la actualidad es la más exitosa y es la que ha permitido la generalización del concepto. La tecnología de Contenerización ya existía antes de Docker, es un concepto técnico relacionado a la construcción de los kernel de Linux, y de como permiten ciertos niveles de asilamiento.

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

  • Docker: Es el producto insigne de la Empresa Docker
  • Cri-o: Es la tecnología que RedHat eligio para poder sustentar sus contenedores en OpenShift que es su plataforma de Orquestación
  • LXC: Implementación nativa de contenedores basadas en Linux

Y como plataformas de Orquestación para estos contenedores tenemos:

  • Docker Swarm,
  • Kubernetes un producto de Google y
  • Open Shift de RedHat.

CONTENERIZACIÓN

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

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

Fig. 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 que sea necesario para la aplicación, paquetes, parches, librerías y eso se instala en el ambiente de QA y producción y entonces inician los problemas de ambiente, de configuración, de versiones etc. Con los contenedores se evitan esos problemas, pues la imagen viene con todo lo que necesita la aplicación y de esta forma no existe diferencia entre los ambientes, ya que el desarrollador entrega el contendor y es exactamente igual lo que se envía a QA y Producción.

El siguiente gráfico muestra una plataforma de Docker se tomará como ejemplo para explicar el funcionamiento del concepto de contenedores, 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 sencillo de entender, se tiene una arquitectura cliente – servidor que es el Docker host donde se instala el software “Docker” y donde se ejecuta a partir de una imagen, de una aplicación o de un sistema operativo, una instancia que se denomina contenedor. Esto permite que se puedan instalar varios contendores de la misma imagen, podría tener una imagen que tuviese una aplicación en Java, y podría tener otras instancias con nombres distintos que estarían en el mismo Docker host en el mismo ambiente.

Por otra parte, se tiene el “Registry” es una especie de repositorio que de manera centralizada publico mis imágenes, la idea es que se use el mismo Registry y que exista una Docker Host para Desarrollo, uno para QA, uno para Producción, etc. De esta forma siempre se obtiene la imagen del mismo repositorio por lo que se asegura que se instala la copia exacta, Sistema Operativo, Plataforma y el ambiente.

Además, tiene una capa cliente que permite la ejecución de comandos que se puede hacer de manera local, y permite de manera rápida y simple ejecutar diferentes tipos de aplicaciones y diferentes tecnologías ya sea que la puedo preparar o la puedo obtener de repositorios públicos como Docker Hub (https://hub.docker.com/), que es uno de los más conocidos.. Actualmente las diferentes marcas ya tienen publicados imágenes Docker certificadas, lo cual permite a los desarrolladores obtenerlas y agilizar el proceso de desarrollo.

Entonces el enfoque cambia, la tecnología de Contenedores permite transitar o movernos con la imagen de la aplicación por cada ambiente, creando instancias de la imagen porque físicamente corresponden al mismo objeto revolucionando el ciclo de trabajo y el mundo DevOps y de la automatización, pues ahora la única preocupación es obtener la imagen con la versión correcta  en el Registry, haciendo el ciclo de trabajo mucho más rápido ya no existen esos tiempos tan grandes de pasos de instalación ni realizar parametrización pues ya la aplicación viene lista en su ambiente.

Fig. 3. Pedraza, I. 2020, Pipeline Contenerización, Artículo Innovación en la Tecnología, http://www.3htp.com/devops-y-contenedores-actores-importantes-de-la-agilidad/

No obstante, aún siguen aquellas tareas asociadas a la conexión con las bases de datos, las integraciones con aplicaciones o servicios externos, es decir lo externo no se soluciona con esta tecnología. Sin embargo, sigue siendo un gran avance en el mundo de desarrollo y automatización para el despliegue de las aplicaciones, disminuyendo riesgos asociados a la diferencia de ambientes.

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 describimos de manera somera en que consiste el concepto de contenedores, los beneficios que aporta y en alguna medida su limitación respecto a las conexiones y servicios externos. Sin embargo, si yo quiero utilizar los contenedores en ambientes complejos, donde por ejemplo tenga las aplicaciones en contenedores, el servidor de aplicaciones está separado de la capa de datos y la capa web, ambas cosas en contenedores diferentes en ves de tener tres VM.

En este escenario aparecen nuevas problemáticas, que sucede si quiero escalar, si necesito balancear y tener alta disponibilidad, cómo comunicar aquellos contenedores que requieran estar conectados, cómo puedo monitorear los contenedores y ver cuál requiere un 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 como damos solución a estas interrogantes, necesito una herramienta que me permita solucionar estas problemáticas. 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 manera más elaborada con los contenedores.

Fig 5. Arquitectura Kubernetes

En la imagen que se muestra se toma como ejemplo la estructura de Kubernetes y que muestra los distintos elementos y conceptos que son parecidos en todos los sistemas de Orquestación. Cuentan con un soporte empresarial, un sistema base de infraestructura que ahorra tiempo en la instalación y configuración de la infraestructura para correr un cluster y otros elementos como el Master, los Workers, este último es el que ejecuta las aplicaciones. Cuenta con clusters que se forman con más de una instancia (pods) de contenedores y un repositorio Etcd, base de datos donde se guarda toda la configuración entre otros componentes.

Tiene además un componente, en este caso el kubetctl, que permite interactuar a través de líneas de comando con el master y este le envía instrucciones a cada uno de los workers, de tal forma que el master me permite escalar horizontal o verticalmente redistribuyendo la carga si se le agrega un worker, esto nos permite realmente tener lo que en la literatura se define como un cluster dinámico.

 “Los conceptos son muy similares a las arquitecturas de un servidor de aplicaciones de Java y J2E con los conceptos de dominio, agentes de nodo, cluster, etc. A diferencia de J2E donde solo se permite ejecutar aplicaciones empresariales bajo el estándar, en el caso de las plataformas de Orquestación de contenedores se pueden implementar cualquier tipo de aplicaciones independiente de la tecnología”

Hoy en día los diferentes proveedores de cloud tienen soluciones de monitoreo que permiten automatizar la escalabilidad de los recursos en las plataformas de Orquestación que permite en un tiempo manejar la cantidad de recursos up o down en dependencia de la demanda.

En este sentido tenemos dos grandes fortalezas: con contenedores se gana todo el poder de encapsular las aplicaciones independientes de la tecnología en la que se desarrolle y con la capa de Orquestación se obtiene el poder de administrar de tener alta disponibilidad, escalabilidad, elasticidad y compartir los ambientes lo que permite utilizar los recursos cuando lo requieran aquellas aplicaciones que en determinados momentos generan alzas de demanda. Todo lo anterior conceptual y técnicamente es posible. Sin embargo, estos conceptos requieren un proceso de entendimiento y maduración. Tanto la tecnología de contenedores como las capas de Orquestación requieren de una gran cantidad de recursos, por ejemplo, si queremos una solución de alta disponibilidad para un master se requiere soluciones de cluster de 3 – 5 – 9, lo que significa tener recursos, máquinas de determinada capacidad.

EN QUE ESCENARIO PODEMOS UTILIZAR LA TECNOLOGÍA DE CONTENERIZACIÓN.

Hoy en día tenemos dos escenarios u enfóquese en los cuales acudimos a la tecnología de Contenerización y Orquestación: el primer foco es la modernización de aplicaciones existentes. Específicamente las aplicaciones empresariales que se ejecuta en un entorno Unix o en un entorno que se presta para ser portable, Java, J2E, etc. Hay empresas que están saliendo del mundo Unix propietario y están optando por otras variantes. Esta modernización está dada por algunas razones:

  • Acelerar el ciclo de vida.
  • Mejorar la disponibilidad y escalabilidad de las aplicaciones
  • Prepararse para la migración a una plataforma Cloud

Muchas marcas ya están soportando sus plataformas en contenedores, muchos servidores de fábrica que ya tienen portabilidad para contenedores, no así el mundo de base de datos que aún queda un gran camino por recorrer. Una de las técnicas de modernización que se utiliza en este enfoque es Reshapes, una técnica de Cloud Adoption, que permite con pocas modificaciones crear un contenedor.

La modernización se enfrenta a algunos desafíos, uno es la homologación, la configuración y la dependencia de las aplicaciones los cual tiene varias técnicas para dar solución a estas tareas. Otro desafío es que alguna de las marcas no soporta versiones antiguas de sus mismos productos. Otro aspecto es la estructura de las aplicaciones que se desean migrar y que no están diseñadas ni desarrolladas para permitir la 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 de Contenerización, también deben conocer del desarrollo de las aplicaciones tradicionales

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

El desarrollo nativo en contenedores también ofrece posibilidades para avanzar, existen marcas que soportan sus productos nítidamente en esta tecnología, existe gran variedad de componentes para diferentes problemáticas que van presentando. Por otra parte, quedan algunos desafíos como el conocimiento que aún se debe adquirir sobre esta tecnología y romper la inercia y paradigmas en el diseño y desarrollo de aplicaciones olvidando las arquitecturas tradicionales.

La Contenerización y la Orquestación forman una de las verticales y tipos de tecnologías dentro de los niveles del Cloud Landscape que permite el desarrollo de aplicaciones de una manera más portable, permite corregir o disminuir deficiencias que se tienen en los procesos de desarrollo y de despliegue de las soluciones, tiene aún grandes líneas de desarrollo y desafíos que sortear 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 Cloud Native Landscape, 2019.

La Contenerización es una de las tecnologías que están presentes en el mundo Cloud, permite disminuir en gran medida muchos de los problemas que se tienen hoy en los procesos de desarrollo, automatización y despliegue de una aplicación.

Podemos decir que los contenedores son una forma portable de definir el software, y la Orquestación es una definición portable de como ese software debe ejecutarse, desplegarse y monitorearse.

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

Charla Nocturna | Contenerización y Orquestación | Expositor. Renzo Disi. Director 3HTP | 12-05-2020.
Renzo Disi

Comentarios cerrados.