Durante 2017 el mundo de los contenedores evolucionó de forma continua, sin embargo, en
la actualidad, aún siguen siendo pocos los que conocen esta tecnología.
2018 supone un paso más en la integración de los contenedores en nuestro día a día.
Todos los fabricantes apuestan por este nuevo concepto, ya que está resultando como un
nuevo estándar de distribución de software. La capacidad de ejecutar en cualquier lugar las
aplicaciones, sin dependencias de sistema, podrá permitir en un futuro que incluso el
usuario final pueda realizar sus despliegues de aplicaciones en forma de imágenes.
No obstante, el mundo de los contenedores no ha hecho más que despegar.
Servicios en la nube
La apuesta actual son los despliegues sobre las propias infraestructuras de los
contenedores, dejando a un lado la complejidad de la propia plataforma y permitiendo así el
foco en nuestras aplicaciones. Las grandes empresas de la nube apuestan por servicios
completos basados en orquestación, sin importar la plataforma subyacente. De esta forma,
nos encontramos con Azure Kubernetes Service (AKS), Amazon Elastic Container Service
for Kubernetes (EKS) y, por supuesto, la plataforma propia de Google: Google Kubernetes
Engine.
Por otro lado, existe incluso la evolución a plataformas aún más abstractas, como Amazon
Fargate, en la que simplemente desplegamos contenedores y servicios, manteniendo el
foco únicamente en el propio despliegue.
Serverless
Los contenedores y los microservicios son otro concepto que se ha hecho muy popular en
los últimos años, y que van claramente de la mano. Cualquiera de los orquestadores de las
plataformas de contenedores gestionará la interacción de los diferentes microservicios
(escalados, interconexión, resiliencia, etc..).
Una vuelta de tuerca al concepto de microservicio son los componentes Serverless: el
desarrollador no tendrá que ocuparse por los recursos sobre los que se ejecutará esta parte
del aplicativo, almacenamiento, cluster de computación, etc…
La relación de los componentes serverless y los contenedores es también evidente. Este
tipo de componentes llevan tiempo disponibles dentro del catálogo de Amazon como AWS
Lambda, pero los contenedores han facilitado la creación de nuevos entornos de integración
(Function as a Service).
IoT
Los contenedores proporcionan algunas de las características más necesarias para los
dispositivos del Internet de las Cosas (IoT): independencia de plataforma, velocidad de
despliegue y ligereza. Si añadimos además las posibilidades geográficas de los diferentes
dispositivos y la seguridad, tendremos una solución perfecta. Últimamente se ven nuevos
proyectos como Eliot, aún en fase alpha, que nacen como orquestación y configuración de
miles de dispositivos con las necesidades de estos entornos tan dinámicos.
Service Mesh
El concepto de Service Mesh surge como solución a las intercomunicaciones entre los
diferentes microservicios de un entorno. Las comunicaciones entre servicios pueden tener
también encriptación por seguridad y, además, podremos crear servicios de proxy entre
ellos para acelerar sus comunicaciones, o simplemente elegir los mejores caminos para
llegar a ellos en cada situación, añadiendo, entre otras funcionalidades, la caché y la
posibilidad de romper circuítos de comunicación erróneos.
Todas estas funcionalidades se ofrecen desde NGINX/NGINX+, pudiéndose ampliar
también con Istio.io o Linkerd.io. NGINX, por su parte, propone tres modelos de arquitectura
de intercomunicación de Microservicios (Proxy Model, Routing Mesh Model y Fabric Model),
cada uno con casos de uso más o menos particulares.
Orquestación
El gran hito este año es la integración de Kubernetes bajo el paraguas de Docker Enterprise
Edition 2.0. Esto supone la posibilidad de elección de la mejor orquestación, dependiendo
del tipo de trabajo que vamos a desplegar en el clúster de EE2.0, y que incluye una versión
completamente funcional de Kubernetes certificada por la CNCF (Cloud Native Computing
Foundation).
La evolución de Kubernetes, además, llega también a Windows, por lo que en breve
podremos usar este orquestador también en los despliegues de nuestra aplicaciones .Net
Entorno de Ejecución
No podemos dejar a un lado los cambios del último año en lo referente a Dockercomo
estándar de ejecución. La aparición de Moby y LinuxKit hacen presagiar un nuevo concepto
que permitirá la liberalización total de fabricantes.
Además, el runtime de ejecución se dividió en componentes con el nuevo concepto de
Container Runtime Interface (CRI) que, junto a la liberalización de containerd, ha dado lugar
a CRI-Containerd, que compite con el propio Dockery los proyectos de runtime ajenos al
mismo como CRI-O.
Esta competencia es muy buena si se mantiene una unicidad de criterios y siempre
podamos elegir el runtime de ejecución que más se ajuste a nuestras necesidades.
Almacenamiento
Rexray como solución certificada por Docker para el mundo de los contenedores, con gran
cantidad de proveedores de backend supone un gran avance, al igual que la consolidación
de StorageOS y la evolución de las cabinas tradicionales de almacenamiento de los
fabricantes a modelos totalmente definidos por software. Igualmente, las integraciones de
los grandes competidores en hiperconvergencia con los diferentes orquestadores de
contenedores han mejorado para poder tratar modelos totalmente productivos de entornos
persistentes. ¿Quién no se atreve aún a ejecutar bases de datos en contenedores?
Publicación de Servicios
La publicación de los microservicios para su consumo, tanto interno entre servicios como
por los propios usuarios es otro de los puntos problemáticos cuando tratamos con
infraestructuras dinámicas.
Por un lado tendremos que lidiar con routing dinámico y por otro con la propia securización
de las aplicaciones. En ambos casos se busca una gestión más allá de la mera publicación
de endpoints al mundo. Para ello, NGINX como proxy inverso, proporciona gran parte de lo
que podemos esperar (API cachés, gestión dinámica de backends, alta disponibilidad,
routing y gestión de tráfico).
Podemos ir un paso más allá con herramientas como Kong, basada en NGINX, que añade
aún más funcionalidades, facilitando de forma integrada la propia documentación de
nuestras APIS, o la gestión de estadísticas de consumo de nuestros servicios, con
seguridad integrada, muy útil cuando tratamos por ejemplo con servicios IoT.
Por último, cabe destacar el uso extensivo que se realiza hoy en día de los contenedores en
nuevas tecnologías como Blockchain, o incluso a la hora de desplegar entornos de Machine
Learning o Big Data.
En resumen, los contenedores siguen avanzando y son ya un estándar de despliegue y un
artefacto simplificado en los pipeline de desarrollo.
By Javier Ramírez, Arquitecto de Sistemas Senior en Hopla! Software