19/07/2018 | Desarrollo de software,Tecnologías

OpenShift Container Platform: aplicaciones orientadas a microservicios

Las aplicaciones de software están generalmente implementadas como un solo conjunto de librerías y archivos de configuración en un entorno de tiempo de ejecución. En general, se implementan en un sistema operativo con un conjunto de servicios en ejecución, como un servidor de bases de datos o un servidor HTTP, pero también pueden implementarse en cualquier entorno que pueda proporcionar los mismos servicios, como una máquina virtual o un host físico.

La principal desventaja de usar una aplicación de software es que está enredada con el entorno de tiempo de ejecución y las actualizaciones o los parches aplicados al SO base pueden interrumpir la aplicación. Por ejemplo, una actualización del SO puede incluir varias actualizaciones de dependencias, incluidas librerías (es decir, librerías del sistema operativo compartidas por varios lenguajes de programación) que pueden afectar a la aplicación en ejecución con actualizaciones incompatibles.

Si otra aplicación comparte el mismo SO host y el mismo conjunto de librerías, existe un riesgo de interrupción si una actualización que repara las librerías de la primera aplicación afecta a la segunda aplicación. Además, una actualización en general requiere la parada completa de la aplicación. Normalmente, esto implica un entorno con características de alta disponibilidad, habilitadas para minimizar el impacto de un tiempo de inactividad, y aumenta la complejidad del proceso de implementación.

¿Qué alternativa podemos encontrar hoy en día? Los contenedores.

Los contenedores son un tipo de partición aislada dentro de un solo sistema operativo. Los contenedores ofrecen muchos de los mismos beneficios que las máquinas virtuales, como seguridad, almacenamiento y aislamiento de redes, pero requieren muchos menos recursos de hardware y son más rápidos de iniciar y finalizar. También aíslan las librerías y el entorno de tiempo de ejecución (como CPU y almacenamiento) utilizados por una aplicación para minimizar el impacto de una actualización de SO en el SO del host.

El uso de contenedores ayuda no solo con la eficacia, la elasticidad y la reutilización de las aplicaciones alojadas, sino también con la portabilidad de la plataforma y las aplicaciones. Existen muchos proveedores de contenedores disponibles, como Rocket, Drawbridge y LXC, pero uno de los principales proveedores es Docker.

Las principales ventajas del uso de contenedores son:

  • Aislamiento del entorno.
  • Menor tamaño del hardware.
  • Implementación rápida.
  • Reutilización de componentes.
  • Minimización del impacto frente a errores/cambios.

Los contenedores fomentan el enfoque de desarrollo de microservicios, ya que proporcionan un entorno confiable y ligero para crear y ejecutar servicios que pueden implementarse en un entorno de desarrollo o producción sin la complejidad de un entorno con varias máquinas.

En los últimos años, los contenedores se han vuelto una tecnología clave para la configuración e implementación de aplicaciones y microservicios. Red Hat OpenShift Container Platform es una implementación de plataforma de contenedores que hace uso de Kubernetes.

Y, ¿qué es Kubernetes? Kubernetes es un sistema open source (código disponible en GitHub) creado por Google para la gestión de aplicaciones en contenedores, un sistema de orquestación para contenedores, como por ejemplo contenedores Docker, entre muchos otros proveedores. Así, Kubernetes permite acciones como programar el despliegue, el escalado y la monitorización de nuestros contenedores, entre muchas otras más.

Tipos de recursos

Kubernetes y por ende, Openshift,  tienen cinco tipos de recursos principales que pueden crearse y configurarse con un archivo YAML o JSON, o con herramientas de administración de OpenShift:

  • Pods: Representan una colección de contenedores que comparten recursos, como direcciones IP y volúmenes de almacenamiento persistente. Es la unidad básica de trabajo para Kubernetes. Un pod puede contener uno o varios contenedores, dichos contenedores comparten los mismos recursos y la misma dirección IP.
  • Servicios: Definen una combinación simple de IP/puerto que proporciona acceso a un conjunto de pods. De forma predeterminada, los servicios conectan clientes con pods de manera Round-Robin.
  • Controladores de replicación: Un framework (marco) para definir pods que están diseñados para escalarse horizontalmente. Un controlador de replicación incluye una definición de pods que se debe replicar, y los pods creados a partir de esta pueden programarse a diferentes nodos.
  • Volúmenes persistentes (PV): Proveen almacenamiento en red persistente a pods que pueden montarse dentro de un contenedor para almacenar datos.
  • Reclamaciones de volumen persistente (PVC): Representan una solicitud de almacenamiento por parte de un pod a Kubernetes.

En el siguiente diagrama se muestra la arquitectura típica de una instalación de OpenShift:

Red Hat OpenShift Container Platform (OCP) es un clúster de Kubernetes, es decir, un conjunto de servidores de nodos que ejecutan contenedores y se administran de forma central mediante un conjunto de servidores maestros. Un servidor puede actuar como servidor y como nodo, pero estos roles están generalmente separados para brindar mayor estabilidad. Lo que Openshift aporta es un conjunto de herramientas de administración (CLI, Consola web, etc) que permite flujos de trabajo más productivos y facilita las tareas comunes.

Si nos fijamos en su stack de software, OCP es un conjunto de componentes y servicios modulares desarrollados sobre la base de Red Hat Enterprise Linux y Docker. Además, agrega capacidades de PaaS, como administración remota, multitenancy (multiinquilino), mayor seguridad, administración del ciclo de vida de la aplicación e interfaces de autoservicio para desarrolladores.

En la figura, se muestra la infraestructura de contenedores básica, integrada y mejorada por Red Hat:

  • El sistema operativo base es Red Hat Enterprise Linux (RHEL).
  • Docker proporciona la API de administración de contenedores básica y el formato de archivo de imágenes de contenedores.
  • Kubernetes administra un clúster de hosts (físicos o virtuales) que ejecutan contenedores. Si Docker es el «núcleo» de OCP, Kubernetes es el «corazón» que lo mantiene en funcionamiento.
  • Etcd es un almacén de claves-valores distribuido, utilizado por Kubernetes para almacenar información de estado y configuración acerca de los contenedores y otros recursos dentro del clúster de Kubernetes.

OpenShift, además, agrega las capacidades requeridas para proporcionar una plataforma de PaaS de producción a la infraestructura de contenedores de Docker + Kubernetes.

  • Las extensiones OCP-Kubernetes son tipos de recursos adicionales almacenados en Etcd y administrados por Kubernetes. Estos tipos de recursos adicionales forman la configuración y el estado interno de OCP.
  • Los servicios en contenedores cumplen muchas funciones de infraestructura de PaaS, es decir, la mayoría de los servicios internos de OCP se ejecutan como contenedores orquestados por Kubernetes.
  • Tiempos de ejecución y xPaaS: son imágenes de contenedores base listas para ser usadas por desarrolladores. La oferta de xPaaS es un conjunto de imágenes base para productos de middleware de JBoss, como JBoss EAP y ActiveMQ.
  • Herramientas de DevOps y experiencia del usuario: OCP proporciona herramientas de administración web y de CLI para administrar aplicaciones del usuario y servicios de OCP. Las herramientas web y de CLI de OpenShift están desarrolladas a partir de las API REST, que pueden aprovechar las herramientas externas, como IDE y plataformas de integración continua.

En definitiva, cada vez es más común descomponer aplicaciones en microservicios, que contienen la ejecución de una función mínima de dicha aplicación configurada en cada contenedor. Esto es contrario al desarrollo tradicional donde muchas funciones distintas se empaquetan como una sola unidad de implementación, o una aplicación monolítica. Tener contenedores más pequeños y descomponer una aplicación y sus servicios de soporte en varios contenedores proporcionan muchas ventajas: mejor utilización del hardware, scaling, actualizaciones más sencillas, etc. OpenShift nos proporciona una plataforma para el despliegue de aplicaciones en contenedores orquestados por Kubernetes, pero además, está provisto de infinidad de herramientas que facilitan la administración de dichos contenedores y hacen que la experiencia de usuario y el mantenimiento de las aplicaciones se minimice, manteniendo los servicios subyacentes de las aplicaciones y proporcionando escalabilidad de manera automática y casi transparente al administrador.

Esperamos que os haya gustado esta nueva entrada en nuestro blog.

Compartir en:

Relacionados