Germán Salazar

Germán Salazar

Business Intelligence Consultant | Data Scientist

Otros Artículos:

Kubernetes

El Marie Kondo de los contenedores

Compartir en linkedin
LinkedIn
Compartir en facebook
Facebook
Compartir en twitter
Twitter
Compartir en whatsapp
WhatsApp

Utilizar contenedores para desarrollar, distribuir y ejecutar nuestras aplicaciones, se ha convertido en un estándar dentro de la industria del desarrollo. Y en estos últimos años la popularidad de herramientas como Docker y Kubernetes es más que notoria si se habla de trabajar con contenedores.

Docker y contenedores hasta en la sopa

Si bien la tecnología proviene del kernel de Linux, Docker nos ha permitido utilizar de una manera muy fácil esta tecnología para nuestros desarrollos. Nos permite crear imágenes de Docker las cuales podemos distribuir en otras máquinas y así poder levantar nuestras aplicaciones con el entorno necesario para su correcto funcionamiento. Esto nos ahorra escuchar la famosa frase:

Pues en mi ordenador sí que funciona”

Veamos rápidamente los pasos que debemos seguir para poner nuestra app dentro de un contenedor en Docker.

  • Lo primero que necesitaremos es crear un Dockerfile el cual contendrá todas las configuraciones necesarias para que nuestra app funcione.
				
					FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
				
			

Aquí podemos ver un ejemplo simple de lo que sería tener una imagen que ejecute una aplicación de Python utilizando Flask.

  • Luego de hacer un proceso llamado Build podemos obtener de nuestro Dockerfile una imagen de Docker.
				
					docker build -t my_python_app:0.1 .
				
			
  • Utilizando las opciones que nos da Docker al utilizar el comando run podemos crear contenedores que tengan como base la imagen que hemos creado. Y así desplegar nuestra aplicación dentro de un contenedor.
				
					docker run my_python_app
				
			

La facilidad de uso, el poder desarrollar y sobre todo distribuir nuestras aplicaciones manteniendo el entorno necesario para que funcionen correctamente, han hecho de los contenedores y de Docker, la tecnología y herramienta básica para distribuir aplicaciones basadas en código.

¡Muchos, pero que muchos contenedores!

Como ya hemos mencionado, podemos crear contenedores que ejecuten nuestra aplicación dentro de nuestra máquina, pero también poder ejecutar contenedores en servidores.

¿Y qué pasa si no es solo un servidor? ¿Que pasa si son cientos o miles de servidores?

Pues para esto necesitamos un orquestador y sin duda Kubernetes es de las mejores opciones que nos podemos encontrar. Un orquestador nos permite manejar aplicaciones dentro de contenedores, a través de múltiples servidores (tanto servidores virtuales como físicos).

Kubernetes es una herramienta de orquestación de contenedores y como tal tenemos muchas opciones que nos facilitan la vida.

  • Nos da la posibilidad de manejar muchos contenedores a través de muchos nodos.
  • Proporciona alta disponibilidad de nuestras aplicaciones. Esto lo hace mediante la creación de replicadas de nuestra aplicación, así si una de nuestras aplicaciones se cae, Kubernetes redirecciona el tráfico automáticamente hacia una de estas réplicas. Esto claramente transparente para el usuario que está usando nuestra aplicación.
  • Escalar nuestra aplicación por si en algún caso necesitamos recibir más tráfico, es otra característica que nos brinda Kubernetes.
  • Además de todo esto, se encarga de todo lo que tiene que ver con disaster recovery. Ya que es muy fácil recrear las aplicaciones que se murieron, puesto que todo está basado en manifiestos declarativos. 

Lo importante es el interior

Por ahora hemos hablado de lo que puede hacer Kubernetes, pero ahora veamos de que pasta está hecho. Tranquilo, no pretendo enseñar cada componente de la arquitectura de Kubernetes, es más, no te serviría de mucho si solo vas a utilizar Kubernetes como desarrollador. Muchos de los servicios en la nube que nos proporcionan Kubernetes como servicio, no nos dejan tocar varios de los componentes de la arquitectura.

Kubernetes tiene dos grandes grupos, los workers y los master. Cada worker corre un agente de Kubernetes llamado Kubelet. En los master hay varios componentes como:

  • API Server, es el que se encarga de exponer una interfaz para que los distintos clientes puedan interactuar con Kubernetes.
  • El Controller Manager, es el que maneja lo que está ocurriendo en el cluster. Se encarga de estar atento a los contenedores que se están ejecutando y los contenedores que se tienen que estar ejecutar.
  • El scheduler recibe las órdenes del Controller Manager y mueve los pods entre los diferentes workers.
  • Todo esto está guardado en una base de datos de que se llama etcd. Esta guarda el estado de nuestro cluster de Kubernetes, además de las configuraciones de este.

Por último, destacar una figura ya mencionada antes y que es la unidad básica para la ejecución de contenedores, los pods. Dentro de los nodos o workers es dónde vamos a correr los pods de nuestra aplicación.

Un pod es un set de contenedores que comparten el mismo namespace, por lo tanto, comparte la misma ip. Lo más normal es correr un solo contenedor en cada pod, pero hay casos dónde podemos correr más de una para así dividir las tareas.

El lunes comienzo con los contenedores

Podríamos hablar sobre muchísimos más aspecto de Kubernetes, pero el propósito de este artículo es más bien enseñarte porque estas tecnologías se han vuelto un estándar a día de hoy y que te animes a probarlas. Hay multitud de información sobre Docker y Kubernetes que puedes consumir y quién sabe si el día de mañana te vuelvas un pro de los contenedores.

Por último, si necesitas migrar tus servicios a contenedores, orquestar worflows basado en contenedores o desarrollar sobre estos, puedes consultar con el equipo de Best In BI y encantados podremos asesorarte en tu proyecto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Business Data Master Logo

No te pierdas el

WEBINAR
Gratuito

Explicaremos en detalle los contenidos y objetivos del Business Data Master

29/11/2021

18:30 (GTM+1)

Online

BUSINESS DATA MASTER

* Tu información será utilizada exclusivamente para contactarte en relación al Business Data Master. No hacemos spam ni compartimos datos con terceros.