Hace poco surgió el Tutorial Kubernetes en Español, el cual lanzamos la semana pasada, y hoy siguiendo esos pasos vamos a comenzar a aclarar una de las dudas más comunes al momento de trabajar con contenedores.
Tanto Kubernetes y Docker puede parecer lo mismo a primera vista, ambos permiten hacer cosas similares como el permitir ejecutar contenedores, sin embargo ambos trabajan en capas diferentes de la infraestructura Cloud y mas que competidores en realidad son dos socios que pueden trabajar muy bien juntos.
Muchas veces escuchamos hablar de Kubernetes vs Docker, o incluso hay muchos tutoriales que hablan de uno y otro como si fueran algo diferente y que compiten entre si en cuanto a funcionalidades, cuando en realidad son complementos que trabajan juntos.
Repasemos ahora las funciones de cada uno, y aprendamos más abajo para qué sirve Kubernetes cuando usamos Docker.
¿Qué es un contenedor?
Un contenedor es un paquete cerrado que contiene todo lo necesario para que una aplicación o un servicio que se ejecute encapsulado dentro de una sola imagen completamente independiente el servidor anfitrión que lo aloje, incluye tanto binarios como archivos de configuración y demás ficheros que necesite.
La idea detrás de esto es que sea ligeros y portables, que se pueda transferir entre diferentes entornos sin contratiempos ya que el funcionamiento interno es completamente independiente del sistema operativo que lo aloja.
¿Un contenedor es entonces una maquina virtual?
Es bastante similar a una maquina virtual y podemos verlo de esa manera sin embargo la filosofía es un poco diferente (lo vimos antes en el artículo Docker vs Máquinas Virtuales), en una maquina virtual se virtualiza todo el servidor, incluido el sistema operativo completo, mientras que en un contenedor solo contiene los ficheros necesarios.
Ejemplo de esto puede ser un contenedor que empaqueta solamente la aplicación desarrollada en Node.JS y las dependencias que necesite, nada mas, esto hace que el contenedor sea mas liviano y que que el inicio sea de apenas segundos, en contraposición a una maquina virtual que puede llevar varios minutos en iniciar.
En una maquina virtual tenemos que instalar el sistema operativo, configurar todo lo necesario, instalar nuestra aplicación junto a una larga lista de tareas para poner a punto el sistema, algo que puede llevar horas realmente dependiendo de nuestros propósitos, mientras que la construcción de un contenedor en Docker por ejemplo lleva considerablemente menos tiempo.
El hecho de que un contenedor no virtualize un sistema operativo completo hace que el uso de contenedores sea mucho mas eficiente en cuestión consumo de recursos de hardware que las maquinas virtuales tradicionales.
¿Qué es Docker?
Básicamente Docker es un sistema que nos permite construir, transferir, desplegar y ejecutar los contenedores con nuestras aplicaciones dentro de una manera muy sencilla y confiable, garantizando un despliegue escalable de forma eficiente sin importar el sistema operativo anfitrión.
Con Docker podemos tener este grado de certeza y confianza en cuanto a compatibilidad entre equipos porque todo lo que necesita nuestra aplicación junto las librerias y demás dependencias se encuentran encapsuladas dentro del mismo contenedor, lo que nos garantiza que el contenedor se ejecutara de la misma forma en cualquier equipo o servidor.
¿Qué es Kubernetes?
Si bien Docker mismo permite ejecutar los contenedores creados y las herramientas de gestión que nos provee pueden ser suficientes para gestionar un solo servidor, resultan muy poco practicas de utilizar a gran escala para montar una infraestructura distribuida de múltiples contenedores corriendo en tal vez docenas o cientos de servidores al mismo tiempo.
Para esto se necesita un sistema que se encargue de gestionar todo el cluster de servidores, eso significa un sistema que se encargue de distribuir los contenedores a través del sistema según los recursos disponibles en el cluster, ademas de crear, ejecutar, vigilar, medir, destruir y relanzar los contenedores, debe mantener y controlar en todo momento cada aspecto relevante de los contenedores y su estado, de todo eso y mas se encarga Kubernetes.
El desarrollo de Kubernetes esta basando en la experiencia previa de sus programadores en un proyecto interno de Google llamado Borg, que por su estructura y filosofía de división del trabajo se asemeja al colectivo Borg de Star Trek, por esa razón no es casualidad que su nombre clave para Kubernetes en su comienzo era Project Seven
Este nombre de Project Seven es un guiño al proyecto original de Google por ser una referencia a un personaje llamado Seven of Nine, nombre que es una denominación Borg dentro del universo Star Trek que luego con el tiempo y el correr de los capítulos simplificaron como Seven en la serie Star Trek Voyager para ser mas precisos.
Con este nombre pretendieron indicar que al igual que en la serie, el nuevo proyecto Seven era una versión mas amigable que el proyecto Borg original, posteriormente adopto como nombre final Kunernetes que tiene su origen el idioma griego y cuya traducción significa timonel o piloto, por lo que su logo es una rueda de timón de barco y que ademas tiene siete puntas en alusión a Seven, su nombre en código original.
Kubernetes y Docker: ¿Por que utilizarlos?
La ventaja de los servicios en la la nube son varios, desde el punto de vista técnico la nube tiene la gran ventaja de ser elástica, permite crecer e decrecer en recursos según las necesidades de computo casi al instante, eso nos asegura poder acompañar el crecimiento de la carga de trabajo aumentando los recursos y volver a decrecer cuando ya no lo necesitemos.
De esta forma permite no tener recursos ociosos que cuestan dinero, por lo que solo pagamos por lo que usamos, en ese sentido el Cloud Hosting es mas rentable que las soluciones tradicionales.
Si bien Kubernetes soporta varios tipos de contenedores diferentes el mas común y popular es Docker, en esta sociedad perfecta que forman ambos, Docker es el que se encarga de crear las imágenes y los contenedores que se van a utilizar y Kubernetes se encarga de gestionar todo.
Ambos tienen la ventaja de ser de código abierto, esto es una ventaja no solo por un tema económico, sino que lo fundamental de este punto es que al ser open-source nos da la opción de adaptarlo a nuestras necesidades con libertad sin estar atado a las limitaciones de una licencia y a las limitaciones técnicas que muchas veces enfrentamos con un producto cerrado.
Tampoco olvidar que detrás de estos dos productos hay una amplia comunidad que nos asegura respaldo técnico, ademas las empresas desaparecen y con ellas sus productos pero los proyectos de codigo abierto normalmente no mueren, solo se transforman, esto es otra ventaja ya que nos ofrece proyección de futuro a mediano y largo plazo.
Esperamos que tras estas explicaciones ya hayan quedado claras las diferencias entre Kubernetes vs Docker.
¿Qué hay de ti? ¿Usas Kubernetes con Docker? Cuéntanos tu historia.