Kubernetes vs. Docker: entendiendo los contenedores y su orquestación

Así es como Docker y Kubernetes están cambiando el desarrollo de aplicaciones y cómo estas tecnologías de contenedores clave se integran entre sí.

0
10

Si se ha mantenido al día con las últimas tendencias en el desarrollo de software, hay dos términos que definitivamente ha llegado a conocer: Docker y Kubernetes, que son esencialmente sinónimos de contenedor y orquestación.

Los contenedores Docker han ayudado a simplificar el proceso de mover aplicaciones mediante el desarrollo, las pruebas y la producción, mientras que tanto Docker como Kubernetes han ayudado a reinventar la forma en que se construyen y distribuyen las aplicaciones, como colecciones de microservicios en lugar de como algo monolítico.

¿Por qué son importantes Docker y Kubernetes, cómo está cambiando el desarrollo de software y qué papel desempeñan en ese proceso? Continúe y lea para averiguarlo.

Docker y container
Los container, soportados en Linux, Windows y otros sistemas operativos modernos, permiten que el software funcione en mini-entornos independientes aislados del resto del sistema. Los container se han comparado con las máquinas virtuales, pero no son máquinas virtuales: son mucho más eficientes, más rápidos de arrancar y detener, y mucho más flexibles y portátiles. Dado que los contenedores se pueden escalar en segundos, facilitan la ejecución de aplicaciones en entornos flexibles como la nube.

Linux y otros sistemas operativos han estado soportando aplicaciones de container durante muchos años, pero trabajar con container no ha sido exactamente fácil. Docker, en sus encarnaciones de código abierto y comercial, es un software que hace de los contenedores un producto fácil de usar para los desarrolladores. Docker proporciona un conjunto común de herramientas de contenedores, de modo que puede empaquetar aplicaciones en imágenes de contenedores que se pueden distribuir y reutilizar fácilmente en su organización o en cualquier otro lugar.

En resumen, Docker facilita la creación de imágenes de container, su uso compartido, su desplazamiento y su distribución a hosts compatibles con Docker.

¿Cuándo debo usar Docker y los container?
Los docker y container son adecuados para cargas de trabajo que deben tener una o más de las siguientes características:

  • Escalabilidad elástica. No sabes cuántas instancias de una aplicación tendrás que ejecutar para satisfacer la demanda. Una aplicación o servicio contenedorizado puede ser redimensionado para satisfacer la demanda mediante la distribución de menos o más instancias de sus contenedores.
  • Aislamiento. No quieres que la aplicación interfiera con otras aplicaciones. Tal vez pueda ejecutar varias versiones en paralelo para cumplir con las diferentes revisiones de una API. O tal vez quieras mantener limpio el sistema subyacente (siempre es una buena idea).
  • Portabilidad. Necesita ejecutar esta aplicación en diferentes entornos y necesita que cada configuración sea reproducible. Los container le permiten empaquetar todo el entorno de ejecución de la aplicación, lo que facilita la implementación de la aplicación en cualquier lugar donde se encuentre un host compatible con Docker: en el escritorio de un desarrollador, en un equipo de pruebas de control de calidad o en una nube remota.

Kubernetes y orquestación de container
Los container están diseñados principalmente para aislar procesos o aplicaciones entre sí y del sistema siguiente. La creación y distribución de contenedores individuales es sencilla. Pero, ¿qué sucede si desea ensamblar varios contenedores, como una base de datos, un front-end Web y un back-end computacional, en una aplicación de gran tamaño que puede gestionarse como una unidad, sin tener que preocuparse de distribuir, conectar, administrar y redimensionar cada uno de esos contenedores por separado? Necesitas una forma de orquestar todas las partes en un todo funcional.

Este es el trabajo que hace Kubernetes. Si los container son pasajeros de un crucero, Kubernetes es el director del crucero.

Kubernetes, basado en proyectos creados por Google, ofrece una forma de automatizar la distribución y gestión de aplicaciones multi-contenedor en múltiples hosts, sin tener que gestionar cada contenedor directamente. El desarrollador describe la distribución de la aplicación en varios contenedores, incluyendo detalles como la forma en que cada contenedor utiliza la red y el almacenamiento. Kubernetes se encarga del resto en tiempo de ejecución. También maneja detalles más complejos como los secretos y las configuraciones de una aplicación.

Kubernetes requiere un poco de experiencia para poder utilizarlo bien, aunque hoy en día es mucho más sencillo que en el pasado. Algunos de los avances en la facilidad de uso se deben a la disponibilidad de «recetas» para aplicaciones comunes (Helm), otros a la gran cantidad de distribuciones de Kubernetes producidas por marcas de renombre (Red Hat, Canonical, Docker), que trabajan en estrecha colaboración con los paquetes de aplicaciones y frameworks de desarrollo más populares.

¿Cuándo deben utilizarse los kubernetes y la orquestación de container?
Las  aplicaciones simples en container que sirven a un número limitado de usuarios generalmente no requieren orquestación, y mucho menos Kubernetes. Pero si una aplicación tiene más que un simple nivel de funcionalidad o está dirigida a un cierto número de usuarios, las cosas cambian. Aquí hay algunas reglas prácticas para determinar cuándo se debe usar la orquestación.

  • Tus aplicaciones son complejas. Cualquier aplicación que involucre más de dos containers probablemente encajaría en la orquestación. Dicho esto, las aplicaciones que sólo sirven a un pequeño número de usuarios podrían ser orquestadas a través de una solución más mínima como el modo de enjambre de Docker en lugar de Kubernetes.
  • Sus aplicaciones tienen altas exigencias de redimensionamiento y resiliencia. Los kubernetes y otros orquestadores le permiten equilibrar las cargas para satisfacer la demanda, describiendo el estado deseado del sistema en lugar de codificar manualmente las reacciones a las condiciones cambiantes.
  • Usted desea aprovechar al máximo las técnicas modernas de CI/CD. Los sistemas de orquestación soportan modelos de distribución para aplicaciones que utilizan distribución azul/verde o actualizaciones continuas.

Puede haber un día en que Docker y Kubernetes se vean eclipsados por abstracciones aún más simples e inmediatas y den paso a formas más elegantes de crear y gestionar contenedores. Por ahora, sin embargo, Docker y Kubernetes son herramientas que necesitan ser conocidas y entendidas.

Redacción Cambio Digital On Line