Kubernetes frente a Docker: comprender los contenedores y la orquestación

Si se ha mantenido al día con las últimas tendencias en desarrollo de software, hay dos términos que sin duda ha encontrado una y otra vez: Docker y Kubernetes, que son esencialmente una abreviatura de  contenedores  y  orquestación .

Los contenedores Docker han ayudado a agilizar el proceso de mover aplicaciones a través del desarrollo y las pruebas y a la producción, mientras que Docker y Kubernetes han ayudado a reinventar la forma en que se construyen e implementan las aplicaciones, como colecciones de microservicios en lugar de pilas monolíticas.

¿Por qué son importantes Docker y Kubernetes, cómo están cambiando el desarrollo de software y qué papel juega cada uno en el proceso? Intentaré responder esas preguntas a continuación.

Docker y contenedores

Los contenedores, compatibles con Linux, Windows y otros sistemas operativos modernos, permiten que el software se ejecute en mini entornos autónomos que están aislados del resto del sistema. Los contenedores se han comparado con VM, pero no son VM: son mucho más eficientes, más rápidos de iniciar y detener, y mucho más flexibles y portátiles. Debido a que los contenedores se pueden girar hacia arriba o hacia abajo o ampliarse o reducirse en segundos, facilitan la ejecución de aplicaciones en entornos elásticos como la nube. 

Linux y otros sistemas operativos han admitido aplicaciones en contenedores durante muchos años, pero trabajar con contenedores no era exactamente fácil de usar. Docker, tanto en su versión de código abierto como comercial, es un software que convierte a los contenedores en un producto fácil de usar y de fácil desarrollo. Docker proporciona un conjunto común de herramientas y metáforas para contenedores para que pueda empaquetar aplicaciones en imágenes de contenedor que se pueden implementar y reutilizar fácilmente en su propia organización o en otro lugar.

En resumen, Docker hace que sea muy fácil crear imágenes de contenedores, versionarlas, compartirlas, moverlas e implementarlas en hosts compatibles con Docker como contenedores en ejecución.

¿Cuándo utilizo Docker y los contenedores?

Docker y los contenedores son los más adecuados cuando se trata de cargas de trabajo que deben tener una o más de las siguientes cualidades:

  • Escalabilidad elástica.  No sabe cuántas instancias de una aplicación necesitará ejecutar para satisfacer la demanda. Una aplicación o servicio en contenedores se puede escalar para satisfacer la demanda implementando menos o más instancias de sus contenedores.
  • Aislamiento.  No desea que la aplicación interfiera con otras aplicaciones. Quizás esté ejecutando múltiples versiones de la aplicación en paralelo para satisfacer diferentes revisiones de una API. O tal vez desee mantener limpio el sistema subyacente (siempre es una buena idea).
  • Portabilidad.  Necesita ejecutar esta aplicación en una variedad de entornos y necesita que cada configuración sea reproducible. Los contenedores le permiten empaquetar todo el entorno de ejecución de su aplicación, lo que hace que la aplicación sea fácil de implementar en cualquier lugar donde encuentre un host compatible con Docker: un escritorio de desarrollador, una máquina de prueba de control de calidad, hierro local o nube remota.

Más información sobre Docker y contenedores

  • ¿Qué es Docker? La chispa de la revolución de los contenedores
  • Por qué debería usar Docker y contenedores
  • Empiece a utilizar Docker
  • Los beneficios ocultos de Docker para control de calidad
  • 12 herramientas de código abierto que hacen que Docker sea mejor
  • Más noticias, análisis, procedimientos, reseñas y consejos de Docker

Kubernetes y orquestación de contenedores

Los contenedores están diseñados principalmente para aislar procesos o aplicaciones entre sí y del sistema subyacente. Crear e implementar contenedores individuales es fácil. Pero, ¿qué sucede si desea ensamblar varios contenedores (por ejemplo, una base de datos, un front-end web, un back-end computacional) en una gran aplicación que se puede administrar como una unidad, sin tener que preocuparse por implementar, conectar, administrar, y escalar cada uno de esos contenedores por separado? Necesita una forma de  orquestar  todas las partes en un todo funcional.

Ese es el trabajo que asume Kubernetes. Si los contenedores son pasajeros de un crucero, Kubernetes es el director del crucero.

Kubernetes, basado en proyectos creados en Google, proporciona una forma de automatizar la implementación y administración de aplicaciones de múltiples contenedores en múltiples hosts, sin tener que administrar cada contenedor directamente. El desarrollador describe el diseño de la aplicación en varios contenedores, incluidos detalles como cómo cada contenedor utiliza la red y el almacenamiento. Kubernetes se encarga del resto en tiempo de ejecución. También maneja la gestión de detalles complicados como secretos y configuraciones de aplicaciones.

Kubernetes requiere una cierta cantidad de experiencia para usarse bien, aunque es mucho más una solución llave en mano de lo que solía ser. Algunos de los avances en la facilidad de uso se deben a las recetas disponibles para aplicaciones comunes (gráficos de Helm); algo se debe a una gran cantidad de distribuciones de Kubernetes producidas por firmas de marcas reconocidas (Red Hat, Canonical, Docker) que trabajan mano a mano con pilas de aplicaciones y marcos de desarrollo populares.

¿Cuándo utilizo Kubernetes y la orquestación de contenedores?

Las aplicaciones simples en contenedores que sirven a una pequeña cantidad de usuarios generalmente no requieren orquestación, y mucho menos Kubernetes. Pero si una aplicación tiene más de un nivel trivial de funcionalidad o un número trivial de usuarios, resulta difícil no reinventar la rueda proporcionada por los sistemas de orquestación. Aquí hay algunas reglas generales para determinar cuándo la orquestación debe entrar en escena.

  • Tus aplicaciones son complejas.  Cualquier aplicación que involucre más de dos contenedores probablemente sea la adecuada. Dicho esto, las aplicaciones modestas que sirven solo a un pequeño número de usuarios podrían estar orquestadas a través de una solución más mínima como el modo enjambre de Docker en lugar de Kubernetes.
  • Sus aplicaciones tienen altas demandas de escalabilidad y resiliencia.  Kubernetes y otros orquestadores le permiten equilibrar cargas y girar contenedores para satisfacer la demanda de forma declarativa, al describir el estado deseado del sistema en lugar de codificar manualmente las reacciones a las condiciones cambiantes.
  • Desea aprovechar al máximo las técnicas modernas de CI / CD.  Los sistemas de orquestación admiten patrones de implementación para aplicaciones que usan implementación azul / verde o actualizaciones continuas.

Puede llegar el día en que Docker y Kubernetes sean eclipsados ​​por abstracciones aún más amigables y den paso a formas más elegantes de crear y administrar contenedores. Por ahora, sin embargo, Docker y Kubernetes son cruciales para conocer y comprender.

Obtenga más información sobre Kubernetes y la orquestación

  • ¿Qué es Kubernetes? Tu próxima plataforma de aplicaciones
  • 4 razones por las que debería usar Kubernetes
  • 10 distribuciones de Kubernetes que lideran la revolución de los contenedores
  • Kubernetes administrado: AWS frente a Azure frente a Google Cloud
  • Hola MicroK8s: un Kubernetes más simple
  • Novedades de Kubernetes
  • Más noticias, procedimientos, reseñas, consejos y análisis de Kubernetes