Kubernetes y Docker son dos de las palabras que más se oyen en conversaciones sobre DevOps hoy en día. Docker es una herramienta que permite contenerizar y ejecutar aplicaciones, y Kubernetes proporciona una plataforma para orquestar o administrar estos contenedores, ya que administrar miles de contenedores manualmente con Docker CLI es una tarea muy costosa.

En el 2013 Docker empezó a ganar popularidad permitiendo a los desarrolladores crear, ejecutar y escalar rápidamente sus aplicaciones creando contenedores. Parte de su éxito se debe a ser Open Source y al apoyo de compañías como IBM, Microsoft, RedHat o Google. Docker en apenas dos años había sido capaz de convertir una tecnología nicho en una herramienta fundamental al alcance de todos gracias a su mayor facilidad de uso. Pero si el número de aplicaciones crece en el sistema, se convierte en complicado de gestionar.

Docker no es suficiente, ya que se necesita una coordinación para hacer el despliegue, la supervisión de servicios, el reemplazo, el escalado automático y, en definitiva, la administración de los distintos servicios que componen la arquitectura distribuida.

Google es, probablemente, la primera compañía que se dio cuenta de que necesitaba una mejor forma de implementar y administrar sus componentes software para escalar a nivel mundial, y durante años desarrolló internamente Borg (más tarde llamado Omega). En 2014, después de casi una década de uso intensivo interno, se presentó de forma pública Kubernetes como un sistema Open Source basado en el aprendizaje utilizando servicios a gran escala. Y hoy en día, Kubernetes es el estándar de facto para implementar y desplegar aplicaciones distribuidas.

Características de Kubernetes

Las aplicaciones modernas se basan cada vez en el uso de contenedores, que son microservicios empaquetados con sus dependencias y configuraciones. Kubernetes es un software de código abierto para implementar y administrar esos contenedores a gran escala. Habilita cualquier número de servidores de muchos tipos al mismo tiempo, separados por la distancia que sea, para compartir cargas de trabajo para un inquilino común.

Lo más importante es que Kubernetes fue diseñado para utilizarse en cualquier lugar, de modo que puede orquestar despliegues in situ, en nubes públicas y en despliegues híbridos. Con Kubernetes, se puede adoptar medidas concretas para lograr una mejor seguridad de TI. Además, también debe integrarse a las conexiones en red, el almacenamiento, la seguridad, la telemetría y otros servicios para proporcionar una infraestructura de contenedores integral. Esto ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre proveedores de infraestructura.

Entre algunas de sus características, se encuentran:

  • La capacidad de colocar contenedores automáticamente según sus requisitos de recursos, sin afectar la disponibilidad.
  • Descubrimiento de servicios y balanceo de carga: no es necesario utilizar un mecanismo externo para el descubrimiento de servicios ya que Kubernetes asigna a los contenedores sus propias direcciones IP y un nombre DNS único para un conjunto de contenedores y puede balancear la carga sobre ellos.
  • Planificación: se encarga de decidir en qué nodo se ejecutará cada contenedor de acuerdo a los recursos que requiera y a otras restricciones. Mezcla cargas de trabajo críticas y best-effort para potenciar la utilización y el ahorro de recursos.
  • Permitir la orquestración del almacenamiento: montar automáticamente el sistema de almacenamiento como un proveedor de nube pública. O también un sistema de almacenamiento en red on premise como NFS, iSCSI, Gluster, Ceph, Cinder entre otros.
  • Ejecución Batch: además de los servicios, Kubernetes puede gestionar cargas de trabajo ‘batch’ y CI, reemplazando los contenedores que fallen.
  • Gestión de la configuración y secrets: la información sensible, como las passwords o las claves ssh, se almacena en Kubernetes oculta en ‘secrets’. Tanto la configuración de la aplicación como los ‘secrets’ se despliegan y se actualizan sin tener que reconstruir la imagen ni exponer información confidencial.
  • Autoreparación: reiniciar los contenedores que fallan, reemplazar y re-programarlos cuando los nodos mueran. Eliminar asimismo los contenedores que no responden y no publicarlos hasta que estén listos.
  • Ejecución de despliegues automatizados donde se implementan progresivamente los cambios en la aplicación o su configuración, mientras se monitorea su estado. De este modo, se asegura que no elimine todas sus instancias al mismo tiempo. Si algo sale mal, Kubernetes revertirá el cambio.

Transformar la infraestructura TI de una empresa con Kubernetes

Desde sus inicios, Kubernetes ha sido un proyecto que ha gozado de gran reconocimiento y siempre ha tenido mucha repercusión, pero en los últimos meses su influencia se ha consolidado en base a diferentes factores.

La comunidad ha crecido de manera considerable. Google y Red Hat son quienes más contribuyen, pero también están Meteor, CoreOS, Huawei, Mesosphere y muchos más.

Además, Kubernetes ya no se percibe como algo nuevo con lo que experimentar, está adquiriendo la suficiente solvencia para que cada vez se utilice más en producción. De hecho, esta plataforma, en 2019, estaba en producción en el 78% de las empresas. Un año antes, 2018, en el 58%. Empresas como Tinder, Reddit, New York Times, Airbnb o Pinterest han integrado esta tecnología en sus servicios.

Las empresas buscan desarrollar aplicaciones y los contenedores y el código abierto están tomando mucha importancia, ya que se dan cuenta de que Kubernetes es el primer paso para crear aplicaciones modernas escalables.

Kubernetes es un sistema que se puede utilizar para implementar aplicaciones de manera eficiente. Como resultado, puede ayudar a las empresas a ahorrar dinero al usar menos mano de obra para administrar su infraestructura de TI.

Kubernetes automatiza efectivamente la gestión de contenedores. Como los contenedores permiten ensamblar piezas de código en piezas más pequeñas y fáciles de transportar, y las aplicaciones más grandes involucran un paquete de varios contenedores, Kubernetes puede organizar múltiples contenedores en unidades. Por lo tanto, las aplicaciones en contenedores se pueden escalar de manera automatizada, lo que lo hace más factible con solo menos recursos necesarios para administrar múltiples contenedores.

Kubernetes ofrece estas capacidades a un negocio:

  • Flexibilidad de múltiples nubes: a medida que más empresas se ejecutan en plataformas multiclouds, se benefician de Kubernetes, ya que ejecuta fácilmente cualquier aplicación en cualquier servicio de nube pública o una combinación de nubes públicas y privadas.
  • Tiempo de comercialización más rápido: como Kubernetes puede ayudar al equipo de desarrollo a dividirse en unidades más pequeñas para centrarse en microservicios únicos, específicos y más pequeños, estos equipos más pequeños tienden a ser más ágiles.
  • Optimización de costes de TI: Kubernetes puede ayudar a una empresa a reducir los costes de infraestructura de manera bastante drástica si se está operando a gran escala.
  • Escalabilidad y disponibilidad mejoradas: Kubernetes sirve como un sistema de gestión crítico que puede escalar una aplicación y su infraestructura cada vez que se aumenta la carga de trabajo, y reducirla a medida que la carga disminuye.
  • Migración efectiva a la nube: Kubernetes puede manejar el rehosting, re-platforming y refactoring. Ofrece una ruta perfecta para llevar una aplicación desde las instalaciones a la nube de manera efectiva.

Beneficios y desventajas para las empresas

En resumen, y habiendo visto toda la información anterior, Kubernetes tiene los siguientes beneficios para las empresas:

  • Usar Kubernetes y su enorme ecosistema puede mejorar la productividad.
  • El uso de Kubernetes junto a una buena tecnología nativa en la nube atrae el talento. Por ejemplo, muchos ingenieros de software quieren trabajar en empresas que utilizan tecnologías modernas e interesantes.
  • Kubernetes es una solución factible durante muchos años.
  • Kubernetes ayuda a que una aplicación se ejecute de forma más estable.
  • Kubernetes puede ser más barato que otras alternativas, sobre todo si se tienen grandes recursos informáticos.

Si bien todas estas ventajas suenan bastante atractivas, no todas las empresas están usando Kubernetes, y esto puede ser el resultado de una evaluación de sus inconvenientes:

  • Kubernetes puede ser demasiado para aplicaciones simples: Si no se tiene intención de desarrollar algo complejo para una gran audiencia, o no se tienen grandes recursos informáticos, no se aprovechan todas las ventajas de esta tecnología.
  • Kubernetes es muy complejo y puede reducir la productividad: Kubernetes es conocido por su complejidad. Especialmente para los desarrolladores que no están familiarizados con las tecnologías de infraestructura, puede ser muy difícil trabajar con ellos.
  • La transición a Kubernetes puede ser engorrosa: Si se tiene un software y se quiere adaptar a Kubernetes, para que funcione sin problemas se debe emplear un tiempo que es difícil de estimar.
  • Kubernetes puede ser más caro que otras alternativas: Esto se debe a que todas las desventajas mencionadas anteriormente cuestan tiempo a los ingenieros que no se gasta en crear un nuevo valor comercial “tangible”.

Kubernetes y Docker: mejor si funcionan juntos

Desde que Kubernetes apareció demostró ser mucho más popular que Docker y rápidamente se convirtió en el estándar de la industria para la orquestación de contenedores, hasta el punto de que incluso Docker lo ha adoptado. Pero, el hecho es que no es necesario elegir: Kubernetes y Docker son básicamente tecnologías distintas que funcionan bien de forma conjunta para compilar, entregar y escalar aplicaciones en contenedores.

Kubernetes es una aplicación para orquestar o gestionar contenedores. No obstante, el programa no crea los contenedores en sí, sino que necesita para ello una plataforma de contenedores. Docker es, con diferencia, la plataforma más conocida de este tipo, pero también existen alternativas. Kubernetes recurre a las herramientas de contenedores ya existentes y las integra en su propio flujo de trabajo. De esta manera, los contenedores creados con Docker u otra herramienta similar se pueden usar en Kubernetes, que utiliza la orquestación para gestionarlos, escalarlos y moverlos.

Kubernetes garantiza que todo funcione como se desea y también se encarga de reemplazar los puntos nodales que se puedan colapsar. Por lo tanto, usando Kubernetes y Docker al mismo tiempo, se suele conseguir un entorno de contenedores robusto.

Si bien Kubernetes trabaja también con otras plataformas de contenedores, Docker se ha convertido en la más popular por muchas razones. No solo porque Docker haya dado a conocer la virtualización de contenedores, sino también porque Kubernetes y Docker tienen objetivos similares. Además, ambos están respaldados por una fuerte comunidad open source. La interacción de ambos funciona tan bien que Docker puede adquirirse en pack junto a Kubernetes, incluso a pesar de que Docker tiene su propia herramienta de orquestación en el mercado.

En definitiva, se puede usar Kubernetes con Docker para:

  • Mejorar la seguridad de la infraestructura y la alta disponibilidad de las aplicaciones: Las aplicaciones permanecerán conectadas, incluso si se desconectan algunos de los nodos.
  • Conseguir que la aplicación sea más escalable: Si la aplicación empieza a recibir mucha más carga y se necesita escalarla horizontalmente para ofrecer una mejor experiencia del usuario, es fácil poner en marcha más contenedores o agregar nodos a un clúster de Kubernetes.

Conclusiones

La adopción en el uso de contenedores continuará creciendo. También se puede ver cierta estandarización en torno a Kubernetes y Docker. Esto impulsará el crecimiento de un gran número herramientas de desarrollo relacionadas.

El stack tecnológico empieza a madurar bastante y casi todos los proveedores empiezan a ser compatibles entre sí gracias a Docker y Kubernetes. Google, Microsoft, Amazon o IBM, por ejemplo, ya lo son y trabajan bajo un mismo estándar. La lucha ahora se encuentra en mover toda esa carga de trabajo que aún no está en la nube: la nube híbrida.

En todo el mundo, muchos CIO y tecnólogos han optado por usar Kubernetes, y se espera que evolucione mucho más en los próximos años.

Los contenedores se están volviendo cada vez más populares en el mundo del software y Kubernetes se ha convertido en el estándar de la industria para implementar contenedores en producción. Además, se espera una alta tasa de crecimiento de Kubernetes a lo largo de este mismo año también.