Cloud IO Enabler Podcast
|
La tecnología de contenedores o contenerización de aplicaciones ha ganado popularidad en los últimos años, y aunque el concepto de contenedores es mucho más antiguo en el mundo Linux (LXC), desde el anuncio oficial del proyecto Docker (dotcloud) en la conferencia PyCon del 2013 la adopción en la industria ha sido masiva. Pero cuáles son las opciones de contenerización en AWS?, en esta introducción a los contenedores en AWS revisaremos las mismas así como sus implicaciones.
Contenedores e implicaciones
- Cuál es mi escenario exacto de implementación? carga de trabajo (aplicación) y sus características de negocio, ambientes, seguridad, integraciones, alta disponibilidad, RTO, RPO, etc.
- Qué tecnología de contenerización debo usar? soporte, licencias, portabilidad, monitorización, administración, etc.
- Tengo los recursos? servidores, ancho de banda, almacenamiento, resiliencia, gobierno, presupuesto, etc.
- El equipo de TI está listo? la formación de operaciones y de desarrollo, los procesos de integración y despliegue continuo (CI/CD), la estrategia DevOps, el gobierno y la estructura organizacional, cultura, etc.
El análisis de estas cuestiones son fundamentales a la hora de definir una estrategia, y aunque es un camino de mejora continua, es importante marcar el mismo y empezar.
Tecnologías de Contenedores
Hoy las tecnologías de contenerización van más allá de comparaciones entre “Contenedores vs Virtualización” y están enfocadas en los beneficios que aportan a la Agilidad de su Empresa frente a Time to Market.
En una solución de contenerización existen capas de arquitectura diseñadas para diferentes propósitos y en cada una de ellas dispone de opciones tecnológicas para su implementación.
“En una solución de contenerización existen capas de arquitectura diseñadas para diferentes propósitos.”
Formatos y Runtime de Contenedores
La base misma de contenerización es un servicio que gestiona esas unidades aisladas de cómputo y cuyo formato y diseño está estandarizado en un esfuerzo conjunto de la comunidad a través del Open Container Initiative.
Entre las principales tecnologías que subscriben este estándar tenemos:
- Docker
- CRI-O
- containerd
- Microsoft Containers
Orquestación de los Contenedores
Es normal que en un ambiente resiliente se implemente estrategias de alta disponibilidad y de escalabilidad, que involucran tener decenas, cientos o miles de contenedores, y en donde, una administración manual de los mismos se torna imposible.
Otras cuestiones como la seguridad, la red, los recursos compartidos, el versionamiento y el balanceo requeridos en un esquema resiliente se vuelven críticas y sensibles de administrar.
Aquí es donde requerimos soluciones que nos permitan gestionar las aplicaciones contenerizadas, sus interacciones, sus recursos, sus permisos, etc. y para esto existen las tecnologías de orquestación, entre las cuales tenemos:
- Amazon ECS (Elastic Container Service) y Amazon EKS (Elastic Kubernetes Service)
- Kubernetes
- Docker Swarm
- (Marathon) Apache Mesos
Cada solución de orquestación tiene su propio enfoque de arquitectura, basados todos en la conformación de clusters de servidores. Además tienen varias ventajas adicionales a la orquestación en sí, e integran otros servicios complementarios para la solución completa de contenerización.
Observabilidad de Contenedores
El término “observabilidad” es una visión más holística del funcionamiento de un sistema que va más allá de monitorización de recursos y más hacia el funcionamiento total del servicio que provee el sistema.
Algunas cuestiones relacionadas son rastreo de operaciones, tráfico, métricas, logs, auditorías, etc. y tiene términos relacionados con indicadores del nivel de servicio, objetivos del nivel de servicio y los acuerdos de nivel de servicio. (un término muy aplicado a la observabilidad es la telemetría).
Aunque muchos orquestadores de contenedores tienen embebidos o integrados servicios que permiten la observabilidad, otros no los traen por defecto.
Algunas tecnologías relacionadas son:
- Amazon CloudWatch, AWS App Mesh y Amazon X-Ray
- Istio
- Prometheus
- Jaeger
“Elegir entre uno u otro depende de RTO (Objetivo de Tiempo de Recuperación) y RPO (Objetivo de Punto de Recuperación) del caso de negocio, del escenario exacto de la implementación, la estrategia, los recursos y el equipo en TI, y, el presupuesto y carga administrativa que podemos asignar.”
Podríamos estar de acuerdo que no es lo mismo pensar en resiliencia para un sistema POS de un Retail que para sistema de Mesa de Ayuda para una empresa de Servicios.
Tecnologías de Contenedores en AWS
AWS ofrece una gran variedad de tecnologías que permite la contenerización de aplicaciones, y al mismo tiempo posibilitan su adopción en diferentes escenarios empresariales.
“80% de las aplicaciones contenerizadas corren en la Nube AWS”
*https://nucleusresearch.com/research/single/guidebook-containers-and-kubernetes-on-aws/
Desde soluciones completamente administrables (fully managed) hasta soluciones Serverless las posibilidades que oferta AWS para contenedores son muy amplias, y por esta razón presentamos una introducción de acuerdo a los posibles casos de uso.
Servicios de Orquestación de Contenedores
Se trata de las soluciones que ofrece AWS como PaaS (Plataforma como Servicio) y en donde la administración de los servidores esta completamente en control de su equipo de TI.
En este conjunto encontramos las soluciones Amazon Elastic Kubernetes Service (EKS) y Amazon Elastic Container Service (ECS) como soluciones de orquestación de contenedores.
Amazon Elastic Kubernetes Service (EKS)
Es una solución Kubernetes completamente administrable y una solución Kubernetes Certificada.
Puede migrar sin problemas sus cargas de trabajo de su Kubernetes local a la Nube sin ninguna necesidad de ajustes adicionales o cambios.
AWS trabaja activamente e intensamente con Kubernetes por lo que es completamente compatible con otras soluciones o herramientas que funcionan con él, además de mantener automáticamente aplicadas las actualizaciones liberadas para este producto.
Amazon Elastic Container Service (ECS)
Es la solución de orquestación de contenedores base de los servicios de Amazon, mucho más integrada y extensivamente probada con cientos de miles de servidores y carga de procesamiento.
Por excelencia es la opción que “optimiza el costo” de mejor forma, esto debido a que funciona en el ambiente On-Demand (a demanda), Instancias Spot y Serverless; y además tiene una regulación de capacidad autogestionada asegurando al máximo la optimización de recursos.
Cohesionada completamente con los otros servicios de Amazon, su seguridad, red y alta disponibilidad están soportadas en una amplia y completa tecnología de la Nube, además de poder usar integrada y fácilmente soluciones de BigData, Machine Learning o Bases de Datos entre otras.
Clusters, Servidores y Provisionamiento
Tanto las soluciones Amazon Elastic Kubernetes Service (EKS) y Amazon Elastic Container Service (ECS) orquestan contenedores que entregan varios servicios de Software a la compañía, pero dichos contenedores están en servidores y organizados en clusters.
Para la provisión de estos clusters y sus servidores correspondientes Amazon nos provee de tres enfoques:
Servidores administrados
Amazon EC2 es la solución de cómputo por excelencia de Amazon, en donde podemos provisionar instancias con diferentes características, estas instancias son usadas para conformar la infraestructura necesaria que se va a orquestar con estas soluciones.
En el caso de Amazon Elastic Container Service (ECS) tenemos la gran ventaja de trabajar con instancias On-Demand y Spot, con lo cual los costos estarían en relación con el número de horas que se utiliza esa capacidad de cómputo.
Serverless
Una de las extraordinarias ventajas de Amazon es la posibilidad de provisionar la capacidad de cómputo requerida por los contenedores con cero administración.
AWS Fargate permite especificar y pagar recursos por aplicación y mejora la seguridad mediante el aislamiento de aplicaciones por diseño.
Esta tecnología puede ser orquestada tanto desde Amazon Elastic Kubernetes Service (EKS) como de Amazon Elastic Container Service (ECS).
On-promise
Existen escenarios donde la latencia o las regulaciones de las empresas requieren de soluciones On-promise, en este sentido tanto Amazon Elastic Kubernetes Service (EKS) como Amazon Elastic Container Service (ECS) están en capacidad de ser ejecutadas en su Data Center.
Así mismo, en su Data Center, puede optar por correr el Servicio de cómputo Amazon EC2 para trabajar en conjunto con su solución Amazon EKS o Amazon ECS; incluso podría decidir crear una nube híbrida donde use capacidad su cómputo On-promise y en la Nube de Amazon.
“Amazon Web Services provee soluciones para correr ambientes de contenerización completos en la Nube de Amazon, en ambientes Híbridos o en ambientes On-promise.”
Registro de imágenes
En el mundo de contenedores, cada uno representa una unidad funcional de Software, por lo que nuevas versiones de ese Software, vienen a estar disponibles en nuevas versiones del contenedor.
Así mismo existen diferentes unidades de Software que proveen diferentes servicios a la compañía y que están disponibles en diferentes contenedores, cada uno con su propia definición.
Tanto la definición en sí del contenedor como su unidad de Software cohesionada requieren de una administración de versiones en el tiempo, que permite entre otras cosas desplegar nuevas características del software, ejecutar procesos de rollback e implementar estrategias de entrega continua (CD continuous delivery).
“Tanto la definición en sí del contenedor como su unidad de Software cohesionada requieren de una administración de versiones en el tiempo.”
Para la gestión de este versionamiento, en el mundo de contenedores existen herramientas “repositorio de imágenes” que funcionan en conjunto con los orquestadores de imágenes y que son la base del gobierno TI y DevOps en una compañía.
Amazon Elastic Container Registry (ECR) es la solución de registro de imágenes que nos ofrece Amazon, completamente administrable donde su equipo de TI tiene el control absoluto.
Está diseñada para ser escalable, redundante y durable, pero principalmente es una solución completamente segura, ya que trabaja sobre HTTPS y con encriptación de las imágenes en su repositorio por defecto.
Trabaja integrado a servicios como Amazon EKS y Amazon ECS, pero lo más importante es que es compatible con Docker CLI esto quiere decir que puede usarse como alternativa de repositorio de imágenes sin restricciones de usarlo desde tecnologías de Amazon.
Observabilidad y Red
Hablando del concepto “observabilidad” en Tecnología de Información, Amazon provee varias soluciones que permiten implementar una adecuada estrategia; y aunque estas soluciones no son exclusivas de un ambiente de contenerización, están completamente integradas al funcionamiento de la Nube de Amazon.
Amazon CloudWatch
Amazon CloudWatch es el servicio de Amazon que permite monitorear, recopilar, analizar y actuar sobre la información del desempeño de los recursos de hardware así como sobre los logs de las aplicaciones en un ambiente seguro y encriptado.
Entre las grandes ventajas de Amazon CloudWatch, está la reacción preventiva y correctiva que es capaz de gestionar brindando respuestas para disponer de alta disponibilidad, recuperación de desastres y resiliencia en sus soluciones. Sin duda es un servicio transversal a toda la Nube de Amazon.
Amazon X-Ray
La trazabilidad del sistema o lo que podríamos llamar el análisis de inicio a fin (end to end) se puede gestionar a través de Amazon X-Ray, una solución de Amazon que permite mirar como se comporta el sistema en sus diferentes fases de ejecución así obteniendo respuestas para corrección de errores, y, mejoras de performance y arquitectura.
Amazon X-Ray, es además la solución principal a la hora de depurar microservicios por sus mismas características, y funciona integradamente con estilos de aplicaciones Serverless como el uso combinado de Amazon API Gateway y Amazon Lambda.
AWS App Mesh
En un ambiente contenerizado las interacciones entre contenedores, servidores y clusters tienen retos en su gestión dada su naturaleza, puertos, protocolos, etc. y a medida en que su número se incrementa el reto de visibilizar su flujo se vuelve complejo.
AWS App Mesh es un servicio de Amazon que permite estandarizar esta gestión de forma que las comunicaciones provean una visibilidad de inicio a fin de las transacciones, asegurando siempre la posibilidad de controlar el tráfico, auditar seguridades, realizar enrutamientos y entregar en general una alta disponibilidad.
AWS App Mesh es ideal para los sistemas contenerizados, y además utiliza tecnología Open Source Envoy que asegura una compatibilidad con otros servicios y una independencia de tecnología.
Herramientas de Implementación
Sin duda toda herramienta de gestión y desarrollo que nos permita reducir los esfuerzos de implementación, de automatización, de gestión y en general de carga administrativa son un importante punto de decisión a la hora de implementar una estrategia de contenerización.
No es lo mismo implementar un Software manualmente de archivo en archivo que usar una ambiente integrado de desarrollo (IDE)… si bien es posible, es más óptimo tener ayudas y servicios que agilicen los temas técnicos y nos dejen concentrar en el negocio.
“No es lo mismo implementar un Software manualmente de archivo en archivo que usar una ambiente integrado de desarrollo (IDE).”
Amazon oferta múltiples herramientas para la gestión e implementación de contenedores, entre las cuales tenemos AWS CloudFormation, AWS Copilot y AWS App2Container, y, Amazon ECS CLI.
AWS CloudFormation
Es la herramienta por excelencia de Amazon para provisionar infraestructura como código (IaC), e incluye las definiciones relacionadas con esquemas contenerizados.
Esta herramienta le va a permitir automatizar la provisión de su infraestructura en caso de replicación de ambientes, implementación de esquemas de alta disponibilidad o recuperación de desastres.
Una de las grandes ventajas es que puede funcionar con la semántica del producto Terraform, con lo que podrá provisionar sus ambientes en su tecnología preferida.
AWS Copilot y AWS App2Container
AWS Copilot es una herramienta de línea de comandos, que permite lanzar y gestionar aplicaciones contenerizadas rápidamente. Con AWS Copilot puede automatizar el despliegue de su aplicación de Software hacia un ambiente contenerizado con las mejores prácticas a partir de un archivo Dockerfile.
Para al caso de aplicaciones legadas .NET o Java, Amazon nos provee de la herramienta de línea de comandos AWS App2Container, la cual analiza la aplicación objetivo, identificando las dependencias y las tecnologías necesarias para provisionar automáticamente la infraestructura requerida en un cluster Amazon ECS o Amazon EKS.
Amazon ECS CLI
Como la mayor parte de tecnologías, Amazon ECS incluye una herramienta de administración a través de la línea de comandos llamada Amazon ECS CLI, y es importante remarcarla en esta introducción a los contenedores en AWS ya que simplifica la creación, actualización y monitoreo de los cluster y los contenedores (tasks) desde un ambiente de desarrollo.
Esta herramienta CLI soporta archivos de Docker Compose con lo que se puede contenerizar aplicaciones que requieren múltiples contenedores.
Una importante característica es que Amazon ECS CLI es una herramienta Open Source con su código fuente disponible en GitHub con lo que usted puede extender su funcionalidad y explorar la actual.
Pensamientos Finales
La contenerización de aplicaciones nos provee de muchas ventajas en la resiliencia de los servicios Software, la maximización de recursos de Infraestructura y más importante en la Agilidad que la empresa tiene frente a un mercado tan cambiante.
Sin embargo, en el mundo de la contenerización, a medida que el número de aplicaciones de Software va creciendo, el departamento de Tecnología de Información debe definir una estrategia que permita gestionar adecuadamente esta plataforma y su crecimiento de modo que no tenga costo de negocio y/o económico por fallos.
La selección de tecnología para esta plataforma obedece a la estrategia en sí de la empresa para su crecimiento y específicamente a la característica del problema u oportunidad de negocio que estamos automatizando.
Una estrategia de la implementación en la Nube de AWS sin duda nos da posibilidad de uso, que sería mucha más compleja de implementar On-premise por costos y recursos, y, además se puede ajustar a un presupuesto y alcance definido con una amplia oferta de posibilidades tecnológicas.
Hemos querido aportarle a usted como Líder Tecnológico, en esta introducción a los contenedores en AWS, una completa vista de las opciones que Amazon dispone para que pueda tomar una decisión informada. Es importante recalcar que en el mundo de la Nube la arquitectura de aplicaciones es diferente a la arquitectura On-premise y siempre se recomienda el acompañamiento de un Consultor preparado en estos temas de forma que se tome en cuenta siempre una Solución bien Diseñada.
Gracias por su tiempo y si tiene más dudas continuemos la conversación aquí.