Docker es una plataforma de contenedorización y un tiempo de ejecución de contenedores, mientras que Kubernetes es una plataforma para ejecutar y gestionar contenedores a partir de numerosos tiempos de ejecución de contenedores. Kubernetes admite varios tiempos de ejecución de contenedores, incluido Docker.
La irrupción de Docker en el año 2013 supuso el comienzo de la era moderna de los contenedores y el inicio de un modelo informático basado en microservicios. Dado que los contenedores no tienen un sistema operativo propio, facilitan el desarrollo de microservicios escalables y poco vinculados, ya que permiten que los equipos empaqueten aplicaciones de forma declarativa, junto con sus dependencias y su configuración, como imágenes de contenedor.
Sin embargo, a medida que las aplicaciones fueron ganando en complejidad para incluir contenedores distribuidos en distintos servidores, empezaron a plantearse problemas; por ejemplo, cómo coordinar y programar varios contenedores, cómo permitir la comunicación entre contenedores o cómo escalar instancias de contenedor. Kubernetes se creó para resolver este tipo de problemas.
En la tecnología de contenedores, Docker y Kubernetes son dos herramientas de referencia. Tal vez te preguntes cuál de ellas es mejor. A menudo, la clave no está en elegir una o la otra, sino en saber cómo pueden utilizarse conjuntamente para obtener resultados óptimos.
¿Qué es Docker?
Docker es una plataforma comercial de contenedorización y un tiempo de ejecución de contenedores que ayuda a los desarrolladores a crear, implementar y ejecutar contenedores. Utiliza una arquitectura cliente-servidor con comandos sencillos y automatización a través de una sola API.
También incluye un kit de herramientas que suele utilizarse para empaquetar aplicaciones como imágenes de contenedor inmutables escribiendo un Dockerfile y ejecutando luego los comandos adecuados para crear la imagen mediante el servidor de Docker. Los desarrolladores pueden crear contenedores sin Docker, pero con esta plataforma el proceso les resultará más sencillo. Después, estas imágenes de contenedor pueden implementarse y ejecutarse en cualquier plataforma que admita contenedores, como Kubernetes, Docker Swarm, Mesos o HashiCorp Nomad.
Aunque Docker permite empaquetar y distribuir aplicaciones en contenedores de forma eficaz, es complicado ejecutar y gestionar contenedores a escala solo con esta herramienta. Algunos de los aspectos que pueden plantear problemas son la coordinación y programación de contenedores en distintos servidores y clústeres, la actualización o implementación de aplicaciones sin tiempos de inactividad y la supervisión del estado de los contenedores.
Para resolver estos y otros problemas, se crearon soluciones para orquestar contenedores, como Kubernetes, Docker Swarm, Mesos o HashiCorp Nomad, entre otras. Estas herramientas permiten a las organizaciones gestionar un gran volumen de contenedores y usuarios, equilibrar cargas de forma eficaz, ofrecer autenticación y seguridad, realizar implementaciones multiplataforma, etc.
¿Qué es Kubernetes?
Kubernetes, o K8s, es una conocida plataforma de código abierto que orquesta sistemas de tiempo de ejecución de contenedores en un clúster de recursos en red. Kubernetes puede usarse con o sin Docker.
Originalmente lo desarrolló Google, que necesitaba una nueva forma de ejecutar miles de millones de contenedores a la semana a escala. Lo publicó en el año 2014 como plataforma de código abierto y en la actualidad es la herramienta de orquestación estándar del sector y líder del mercado para la implementación de contenedores y aplicaciones distribuidas. Como señala Google, "el principal objetivo de Kubernetes es facilitar la implementación y la gestión de sistemas distribuidos complejos, además de seguir beneficiándose del uso mejorado que permiten los contenedores".
Kubernetes coloca un conjunto de contenedores en un grupo que gestiona en la misma máquina para reducir la sobrecarga de red y aumentar la eficiencia del uso de recursos. Un ejemplo de conjunto de contenedores podría ser un servidor de aplicación, una caché de Redis o una base de datos SQL. En el caso de los contenedores de Docker, se trata de un proceso por contenedor.
Kubernetes is particularly useful for DevOps teams since it offers service discovery, load balancing within the cluster, automated rollouts and rollbacks, self-healing of containers that fail, and configuration management. Plus, Kubernetes is a critical tool for building robust DevOps CI/CD pipelines.
No obstante, Kubernetes no es totalmente una plataforma como servicio (PaaS). Al crear y gestionar clústeres de Kubernetes, hay que tener en cuenta distintos factores. La complejidad que supone gestionar Kubernetes es uno de los principales motivos por los que muchos clientes prefieren usar servicios de Kubernetes gestionados de proveedores de soluciones en la nube.
Ventajas de Kubernetes
Kubernetes, que suele describirse como "el Linux de la nube", tiene motivos para ser la plataforma de orquestación de contenedores más popular. Estos son algunos:
Operaciones automatizadas
Kubernetes incluye una potente herramienta de API y línea de comandos, denominada kubectl, que se encarga de una gran parte de las tareas de gestión de contenedores más pesadas a través de la automatización de las operaciones. El patrón controlador de Kubernetes permite que las aplicaciones y los contenedores se ejecuten exactamente según se ha especificado.
Abstracción de la infraestructura
Kubernetes gestiona los recursos que pones a su disposición. De esta forma, los desarrolladores pueden centrarse en escribir código de aplicaciones y olvidarse de la infraestructura de computación, redes o almacenamiento subyacente.
Supervisión del estado de los servicios
Kubernetes supervisa el entorno en ejecución y lo compara con el estado deseado. Lleva a cabo comprobaciones de estado automáticas en los servicios y reinicia los contenedores que han fallado o se han detenido. Kubernetes solo hace que los servicios estén disponibles cuando están en ejecución y listos.
Comparación entre Kubernetes y Docker
Docker es un tiempo de ejecución de contenedores, mientras que Kubernetes es una plataforma para ejecutar y gestionar contenedores a partir de muchos tiempos de ejecución de contenedores. Kubernetes admite numerosos tiempos de ejecución de contenedores, como Docker, containerd, CRI-O y cualquier implementación de Kubernetes CRI (Container Runtime Interface). Kubernetes podría entenderse como un "sistema operativo" y, los contenedores de Docker, como las "aplicaciones" que se instalan en él.
Por sí solo, Docker es muy beneficioso para el desarrollo de aplicaciones modernas y resuelve el clásico problema de “funciona en mi máquina”, pero no en otras. La herramienta de orquestación de contenedores Docker Swarm puede gestionar la implementación de una carga de trabajo basada en contenedores de producción formada por varios contenedores. Cuando un sistema crece y tiene que añadir muchos contenedores conectados en red entre sí, Docker puede, de forma independiente, hacer frente a algunos problemas crecientes que Kubernetes ayuda a resolver.
Al comparar ambas herramientas, es mejor comparar Kubernetes con Docker Swarm. Docker Swarm, o el modo swarm de Docker, es una herramienta de orquestación de contenedores como Kubernetes, lo que significa que permite gestionar varios contenedores implementados en distintos hosts que ejecutan el servidor de Docker. El modo swarm está deshabilitado de forma predeterminada y un equipo de DevOps debe instalarlo y configurarlo.
Kubernetes orquesta clústeres de máquinas para que funcionen conjuntamente y programa contenedores para que se ejecuten en esas máquinas en función de los recursos que tienen disponibles. Los contenedores se agrupan a través de una definición declarativa en pods, la unidad básica de Kubernetes. Kubernetes gestiona automáticamente tareas como el descubrimiento de servicios, el equilibrio de carga, la asignación de recursos, el aislamiento y el escalado vertical u horizontal de los pods. Ha sido adoptado por la comunidad de código abierto y ahora forma parte de la Cloud Native Computing Foundation. Amazon, Microsoft y Google ofrecen servicios de Kubernetes gestionados en sus plataformas de computación en la nube, lo que reduce significativamente la carga de trabajo que supone ejecutar y mantener los clústeres de Kubernetes y sus cargas de trabajo contenedorizadas.
Docker o Kubernetes: ¿cuál te conviene?
Puesto que tanto Docker Swarm como Kubernetes son plataformas de orquestación de contenedores, ¿cuál deberías elegir?
Por lo general, Docker Swarm se instala más deprisa y requiere menos configuración que Kubernetes si creas y ejecutas tu propia infraestructura. Ofrece las mismas ventajas que Kubernetes, como implementar aplicaciones a través de archivos YAML declarativos, escalar servicios automáticamente al estado deseado, equilibrar la carga en los contenedores del clúster, y controlar la seguridad y el acceso en todos tus servicios. Si ejecutas pocas cargas de trabajo, no te importa gestionar tu propia infraestructura o no necesitas una función concreta de Kubernetes, Docker Swarm puede ser una excelente opción.
Kubernetes es más difícil de instalar al principio, pero ofrece una mayor flexibilidad y más funciones. También cuenta con el amplio apoyo de una comunidad activa de código abierto. Kubernetes ofrece varias estrategias de implementación listas para usar, puede gestionar el tráfico que recibe tu red y proporciona funciones de observabilidad de los contenedores. Los principales proveedores de servicios en la nube ofrecen servicios de Kubernetes gestionados que hacen que sea mucho más fácil empezar a usar funciones nativas en la nube, como el escalado automático. Si ejecutas muchas cargas de trabajo y necesitas interoperabilidad nativa en la nube, y además tienes muchos equipos en tu organización (lo que requiere aislar mejor los servicios), Kubernetes es la plataforma que más te conviene.
Compass y la orquestación de contenedores
Independientemente de la solución de orquestación que elijas, es importante que uses una herramienta para gestionar la complejidad de tu arquitectura distribuida a medida que escalas. Atlassian Compass es una plataforma de experiencia extensible para desarrolladores que reúne en un lugar centralizado que admite búsquedas en información desconectada sobre procesos de ingeniería y colaboración en equipo. Además de ayudarte a controlar la expansión de tu microservicio con el Catálogo de componentes, Compass puede ayudarte a establecer prácticas recomendadas y evaluar el estado de tu software con cuadros de mandos, así como ofrecerte datos e información útil en toda tu cadena de herramientas de DevOps mediante extensiones creadas en la plataforma Atlassian Forge.
Originalmente publicado en: https://www.atlassian.com/es/microservices/microservices-architecture/kubernetes-vs-docker