
[30/11/2019] Si se ha mantenido al día con las últimas tendencias en el desarrollo de software, existen dos términos que sin duda ha encontrado una y otra vez: Docker y Kubernetes, que son esencialmente abreviaturas para contenedores y orquestación.
Los contenedores Docker han ayudado a racionalizar el proceso de mover aplicaciones a través del desarrollo, las pruebas y la producción, mientras que Docker y Kubernetes han ayudado a reinventar la forma en que las aplicaciones se crean e implementan, como colecciones de microservicios -en lugar de stacks monolíticos.
¿Por qué son importantes Docker y Kubernetes, cómo están cambiando el desarrollo de software y qué papel juegan cada uno en el proceso? Trataré de 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 miniambientes autónomos que están aislados del resto del sistema. Los contenedores se han comparado con las máquinas virtuales, pero no son máquinas virtuales -son mucho más ágiles, más rápidos de iniciar y detener, y mucho más flexibles y portátiles. Debido a que los contenedores se pueden crecer o reducirse, o ampliar o reducir en segundos, hacen que sea más fácil ejecutar aplicaciones en ambientes elásticos como la nube.
Linux y otros sistemas operativos han soportado aplicaciones en contenedores durante muchos años, pero trabajar con contenedores no era algo exactamente fácil. Docker, tanto en sus encarnaciones de código abierto como comerciales, es un software que hace que los contenedores sean un producto fácil de usar y amigable para el desarrollador. Docker proporciona un conjunto común de herramientas y metáforas para contenedores con el fin de empaquetar aplicaciones en imágenes de contenedores que se pueden implementar y reutilizar fácilmente en su propia organización, o en otro lugar.
En resumen, Docker hace que sea fácil crear imágenes de contenedores, versionarlas, compartirlas, moverlas e implementarlas en hosts compatibles con Docker como contenedores en ejecución.
¿Cuándo uso Docker y contenedores?
Docker y contenedores son los más adecuados para 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 puede crecer en escala para satisfacer la demanda mediante la implementación de menos o más instancias de sus contenedores.
- Aislamiento. Usted no deseará que la aplicación interfiera con otras aplicaciones. Tal vez esté ejecutando varias versiones de la aplicación en paralelo para satisfacer las 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 ambientes, y requiere que cada configuración sea reproducible. Los contenedores le permiten empaquetar todo el ambiente de tiempo de ejecución de su aplicación, haciendo que la aplicación sea fácil de implementar en cualquier lugar donde encuentre un host compatible con Docker -una desktop de desarrollador, una máquina de prueba de control de calidad, una máquina local o desde la nube remota.
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 múltiples contenedores -por ejemplo, una base de datos, un front end web, un back end computacional- en una aplicación grande que se puede administrar como una unidad, sin tener que preocuparse por implementar, conectar, administrar, y aumentar la escala en cada uno de esos contenedores individualmente? Necesita una forma de orquestar todas las partes en un todo funcional.
Ese es el trabajo que Kubernetes asume. Si los contenedores son pasajeros en un crucero, Kubernetes es el director del crucero.
Sin tener que administrar cada contenedor directamente, Kubernetes -basado en proyectos creados en Google- proporciona una forma de automatizar la implementación y la administración de aplicaciones de contenedores múltiples en varios hosts. El desarrollador describe el diseño de la aplicación en varios contenedores, incluidos detalles como la manera en que cada contenedor utiliza redes y almacenamiento. Kubernetes se encarga del resto en el tiempo de ejecución. También maneja la gestión de detalles complicados, como los secretos y las configuraciones de las aplicaciones.
Kubernetes requiere una cierta cantidad de experiencia para usarse bien, aunque es una solución mucho más accesible de lo que solía ser. Parte del progreso en la facilidad de uso se debe a las recetas fácilmente disponibles para aplicaciones comunes (gráficos Helm); algunos se deben a una gran cantidad de distribuciones de Kubernetes producidas por firmas de marca (Red Hat, Canonical, Docker) que trabajan de la mano con los conjuntos de aplicaciones y marcos de desarrollo más populares.
¿Cuándo uso Kubernetes y la orquestación de contenedores?
Las aplicaciones en contenedores simples que sirven a un pequeño número 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, se hace 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 ser considerada.
- Sus aplicaciones son complejas. Cualquier aplicación que involucre más de dos contenedores probablemente cumpla con los requisitos. Dicho esto, las aplicaciones modestas que solo atienden a un pequeño número de usuarios podrían organizarse a través de una solución más mínima, como el modo de enjambre Docker en lugar de Kubernetes.
- Sus aplicaciones tienen altas demandas de crecimiento de escala y resistencia. Kubernetes y otros orquestadores le permiten equilibrar cargas y variar los contenedores para satisfacer la demanda de manera declarativa, describiendo 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 un día en que Docker y Kubernetes se vean 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, conocer y comprender a Docker y a Kubernetes es crucial.
Serdar Yegulalp, InfoWorld (EE.UU.)