Migración de plataforma
Kubernetes, ¿una palabra de moda?
Tras años analizando nuestra plataforma, estudiando las prácticas de Site Reliability Engineering de Google y experimentando con sus herramientas, decidimos que Kubernetes, basado en la arquitectura de distribución Borg de Google, era el más adecuado para la siguiente iteración de nuestra plataforma Lighthouse.
¿Qué es Kubernetes?
Kubernetes es una tecnología de código abierto basada en la arquitectura interna Borg de Google, que utilizaron internamente durante muchos años y que después se publicó de forma abierta. Es tecnología puntera que aprovecha la potencia de la orquestación de contenedores.
Orquestación de contenedores es un término cargado, pero, aunque es complejo, no es complicado de entender.
Empecemos por los componentes básicos:
Un contenedor incluye únicamente el software y las dependencias que necesitas para poner en marcha tu aplicación. Esto significa que tu software se ejecuta en su propio entorno sin necesidad de descargar ni importar dependencias externas. Es parecido a una máquina virtual, salvo que solo contiene lo que necesita y, por tanto, es ligero y sencillo.
En resumen, si funciona en mi ordenador, entonces funciona en tu ordenador, ya que el contenedor aporta de forma independiente todo lo necesario.
¿Dónde ejecutamos nuestros contenedores?
Normalmente, los contenedores necesitan sus propios entornos para ejecutarse. Si desarrollas en una sola máquina, entonces lo habitual es que la aplicación se ejecute en algo como Docker. Sin embargo, si quieres ejecutar varias imágenes entre varios nodos o un clúster, entonces Kubernetes es la opción preferida.
Kubernetes es la opción más flexible porque toda la configuración (no solo los contenedores), el entorno, las configuraciones de la aplicación y las configuraciones de red pueden definirse como código.
¿Por qué es algo bueno?
Al almacenar nuestras configuraciones como código, podemos tener una única fuente de verdad y guardar nuestras configuraciones en Git. Esto nos permite desplegar cambios de forma mucho más fácil, segura y con mayor velocidad y eficiencia.
Esto nos aporta muchas ventajas:
Escalabilidad: podemos escalar con facilidad y nuestra carga puede distribuirse entre muchos nodos, lo que mejorará el rendimiento
Disponibilidad: esto también se relaciona con la fiabilidad porque, si un pod o contenedor no funciona o el nodo se cae, entonces quedan otros contenedores para asumir la carga
Simplicidad: encaja a la perfección con nuestro modelo de trabajo de programación extrema y entrega continua, que se centra en pequeños cambios iterativos
Control: tenerlo todo en código facilita controlar cómo se ejecuta y dónde se ejecuta
Observabilidad: obtenemos más información sobre cómo se ejecuta y dónde se ejecuta y, como nuestro negocio consiste en aportar insights, la información que recopilamos se transfiere a nuestro producto y enriquece la información que ofrecemos
Tecnología: como tenemos mejor acceso y todo está simplificado, nos resultará más fácil integrarnos con nuevas tecnologías disruptivas como el machine learning, el big data, la IA y lo que esté por llegar.
Esto no es exhaustivo, pero ilustra de forma modesta la potencia que quedará disponible al adoptar esta tecnología mientras crecemos juntos hacia un futuro más fiable.