Cloud Computing

Docker, Kubernetes y OpenShift

¿Quieres aclarar conceptos sobre Cloud Computing y sobre las tecnologías que se utilizan? Aquí te contamos los aspectos más importantes sobre contenedores y las tecnologías Docker, Kubernetes y OpenShift.

Publicado el 05 de Junio de 2019
Compartir

Contenedores

Los contenedores es un término que está muy de moda en los últimos tiempos, y lo que nos permiten es tener una partición aislada dentro de un sistema operativo. Es algo parecido a una máquina virtual, pero mucho más liviano, porque un contenedor suele partir el núcleo del sistema operativo con los demás contenedores.

El uso de contenedores tiene una serie de ventajas que queremos destacar:

  • Cada aplicación está aislada y se va a ejecutar en un contenedor, por lo que cada una tiene su conjunto de librerías y la actualización de un contenedor no afecta.
  • Se tiene un menor tamaño de hardware, porque, como hemos dicho, son más livianos que un sistema operativo virtualizado, que una máquina virtual que tiene todas las características de una máquina completa, y los contenedores comparten normalmente el núcleo de sistema del sistema.
  • La implementación es muy rápida, porque al ser tan liviano, el inicio, la parada y la actualización de los contenedores se hace una manera muy ágil.
  • Minimiza el impacto frente a cambios, ya que al tener cada aplicación en un contenedor, si una aplicación cambia y hay que actualizarla, no afecta a las demás.
Aprende DevOps para acelerar tus desarrollos de Software
Aprende las herramientas más importantes para acelerar el desarrollo de software: Jenkins, Docker, Kubernetes, Vagrant y más.
Comenzar gratis ahora

Docker

Docker es una tecnología que nos permite trabajar con contenedores, más en concreto con un tipo de contenedores llamados contenedores de aplicación, que están especializados en implantación de aplicaciones web.

Es una virtualización ligera, como comentamos anteriormente, con la que se aprovecha mejor el hardware, y el contenedor finalmente es un sistema de archivos mínimo para que la aplicación funcione.

  • El contenedor es autosuficiente, solo se necesita una imagen para crearlo el contenedor.
  • De una forma muy simple podríamos entender una imagen como “un sistema operativo con las aplicaciones ya instaladas”.
  • El proyecto Docker nos ofrece un repositorio con imágenes con las que podemos trabajar, llamado Docker Hub.
  • Otro aspecto muy importante es que un contenedor suele ejecutar un solo proceso. Por ejemplo, si tenemos una base de datos es un contenedor, si tenemos una aplicación con PHP es un contenedor con un servidor web.

Componentes de Docker

De forma muy básica podemos diferenciar varios componentes en Docker:

  • Docker Engine: Es un demonio Docker y es el responsable de ejecutar los contenedores. Corre sobre cualquier distribución de Linux y expone una API externa para la gestión de imágenes y contenedores.
  • Docker Client: Es el cliente de línea de comando (CLI) que nos permite interactuar con el Docker Engine. Se puede configurar para trabajar con un Docker Engine local o remoto.
  • Docker Registry: Es el repositorio de imágenes generadas por el Docker Engine, y nos permite distribuir nuestras imágenes. Podemos instalar un registro privado, o hacer uso de uno público como Docker Hub.

Kubernetes

Docker nos permite la ejecución de contenedores y trabaja en un servidor, por lo que nos lo interesante sería tener un clúster de servidores donde los contenedores se fueran ejecutando en distintos servidores, y que además hubiera un control de esos contenedores. Aquí es donde aparece Kubernetes.

Podemos definir Kubernetes como un orquestador de contenedores, ya que es el responsable de que los contenedores que vamos a tener estén conectados pero se ejecuten en distintos en distintos nodos.

Está escrito en Go y originalmente fue un proyecto de Google, pero que rápidamente pues se alió con la Linux Foundation para crear una nueva fundación llamada Cloud Native Computing Foundation (CNCF), donde ahora mismo se desarrolla el proyecto.

Es un proyecto muy reciente, ya que comenzó en 2015, pero está en pleno auge y cada vez se utiliza más.

Ventajas de Kubernetes

Las principales ventajas que ofrece Kubernetes son:

  • Tolerancia a fallos: asegura que el servicio y los contenedores siempre están en ejecución.
  • Escalabilidad dinámica: permite escalar de forma sencilla los contenedores.
  • Actualizaciones continuas: se puede actualizar las versiones de forma fácil.
  • Despliegues automáticos.
  • Enrutamiento a nuestras aplicaciones: permite enrutar y tener nombres de dominio o de máquinas para acceder.
  • Balanceo de carga: balancea la carga entre los distintos contenedores.
  • Volúmenes persistentes: al igual que en Docker, los contenedores tienen una característica que es que la información que tienen es efímera, es decir, se pierde, por lo tanto son necesarios mecanismos de volúmenes externos para guardar la información de la aplicación.

OpenShift

Kubernetes es un proyecto que se puede utilizar por sí mismo, y están surgiendo muchos productos que se basan en él, siendo OpenShift uno de ellos.

OpenShift es un producto que internamente utiliza Kubernetes, que lo que hace es mejorar la funcionalidad del mismo introduciendo nuevas características.

Es la plataforma de desarrollo, con características de Cloud Computing en la capa de Plataforma como Servicio (PaaS), de Red Hat.

La Plataforma como Servicio de Cloud Computing ofrece la posibilidad a un desarrollador de tener una infraestructura donde colocar su aplicación con características de Cloud Computing, como la escalabilidad o el pago por uso, es decir, se usan más o menos recursos en función de las necesidades, y se paga según se consuman más o menos recursos.

OpenShift permite que el desarrollador se centre en el desarrollo de aplicaciones y que no tenga que saber cómo funciona internamente Docker y Kubernetes, ya que le permite desplegar aplicaciones de una manera muy sencilla con la funcionalidad y las ventajas de tener un sistema como Kubernetes, que internamente facilita esta implantación.

Se puede utilizar en la integración continua del desarrollo de una aplicación, para terminar implantando la aplicación en OpenShift.

Podemos trabajar con OpenShift con una aplicación web o con cliente de línea de comandos.

Principal diferencia de OpenShift con Kubernetes

La novedad más importante que diferencia a OpenShift de Kubernetes es que las imágenes Docker que se utilizan en Kubernetes las tenemos que generar nosotros, mientras que OpenShift tiene la característica de source2image, que a partir de un repositorio con nuestro código, es capaz de crear una nueva imagen Docker de forma automática y es la que va a utilizar internamente.

Por lo tanto el desarrollador se centra en su desarrollo, tiene el mismo en un repositorio GitHub e internamente OpenShift es capaz de, a partir de una imagen base de un lenguaje de programación, extraer el contenido de este repositorio y crear una nueva imagen.

Ventajas que ofrece OpenShift

OpenShift tiene las mismas ventajas que el uso de Kubernetes que vimos anteriormente, pero además ofrece algunas ventajas adicionales:

  • Gestión más sencilla de proyectos y usuarios.
  • Conjunto de imágenes base con el que podemos trabajar.
  • Asignación de forma automática de las rutas para acceder a la aplicación.
  • Gestiona de forma sencilla los volúmenes.
  • Se puede incluir en un flujo de integración continua y entrega continua.
  • Tiene ya incluidas herramientas de métricas y monitorización.
Aumenta la productividad de tu equipo de desarrollo
Desarrolla el talento de tu empresa 3 veces más rápido con formaciones prácticas y avanzadas de Cloud Computing y DevOps.
Solicitar más información

Conclusiones

Tras todo lo visto anteriormente ya te puedes hacer una idea de cómo funciona el ecosistema del trabajo con contenedores:

  • Lo más básico de trabajar con Docker, que trabaja con contenedores en una máquina.
  • Posteriormente con Kubernetes, que gestiona los contenedores que se ejecutan en un conjunto de máquinas.
  • Y OpenShift se puede decir que es una versión mejorada de Kubernetes, que añade la posibilidad de que un desarrollador, sin conocimientos de Docker y Kubernetes, pueda utilizar las ventajas de Kubernetes en un sistema sencillo.

Compartir este post

También te puede interesar...

Tecnología

Qué es OpenShift

03 Junio 2019 José Domingo Muñoz
Especialista en Automatización DevOps

Especialista en Automatización DevOps

17 horas y 57 minutos · Carrera

Conviértete en un especialista DevOps y da un salto en tu lista

Artículos
Ver todos