Kubernetes: Introducción y Conceptos Clave

Última actualización: 21/02/2021

En esta entrada voy explicarte los conceptos básicos que cualquier persona interesada en usar Kubernetes en sus proyectos debería conocer, como sus componentes, arquitectura, recursos y servicios.

Introducción a Kubernetes

Si acabas de aterrizar, quizá te interese echar un ojo a mi artículo de introducción a Docker y los comandos básicos de Docker.

¿Qué es Kubernetes?

Kubernetes es un sistema de orquestación de contenedores open source desarrollado originalmente por Google. Su versión inicial fue publicada en el año 2014, y desde entonces no ha parado de crecer. Está escrito en el lenguaje de programación Go y a menudo se suele abreviar como “K8s”.

Y te preguntarás: ¿qué es un sistema de orquestación de contenedores?

Los contenedores como Docker nos facilitan empaquetar y distribuir las aplicaciones. Con la creciente adopción de arquitecturas de microservicios, mantener y administrar todas estas aplicaciones que trabajan juntas no es tarea fácil. Aquí es donde entra en juego Kubernetes, que nos permite automatizar el despliegue de estas aplicaciones, gestionar su escalabilidad y las operaciones de mantenimiento. En definitiva, podemos controlar todo su ciclo de vida de una manera más cómoda.

Además, nos permite:

  • Gestionar y asignar los recursos disponibles del sistema
  • Balancear la carga
  • Escalar los servicios y los contenedores
  • Monitorizar el estado de los contenedores
Tendencia de búquedas de Kubernetes en el tiempo [Google Trends]
Búquedas de Kubernetes en el tiempo [Google Trends]

Hay que decir que funciona con numerosos sistemas de contenedores como Docker o containerd. Muchos proveedores cloud también lo ofrecen como servicio, por ejemplo el servicio AKS (Azure Kubernetes Service) o EKS (Amazon Elastic Kubernetes Service).

Kubernetes se ha convertido en el estándar de facto para la orquestación de contenedores. Hoy en día, la mitad de las organizaciones que ejecutan contenedores usan Kubernetes, ya sea en clústeres autogestionados o a través de un proveedor cloud.

Datadog

Kubernetes vs Docker

Docker Logo

A menudo, la gente pregunta cuál es la diferencia entre Docker y Kubernetes. Docker lo que nos permite es simplemente empaquetar nuestras aplicaciones en imágenes y contenedores.

Kubernetes, sin embargo, es un orquestador de contenedores, que puede manejar contenedores Docker. Crea las estructuras y agrupaciones necesarias como pods para facilitar su gestión.

Casi el 90 por ciento de los contenedores son orquestados

Datadog

Otros orquestadores de contenedores conocidos son Docker Swarm, Marathon o Apache Mesos.

Openshift vs Kubernetes

Openshift logo

Openshift es una distribución de Kubernetes de la empresa Red Hat. Ambas plataformas son opciones populares para la gestión de contenedores. Openshift añade ciertas funcionalidades entorno a la seguridad y a las herramientas de desarrollo además de una licencia con soporte empresarial.

Debemos conocer que Openshift está basado totalmente en Kubernetes open source, por lo que no hay diferencias entre ambas APIs para orquestar los contenedores.

Arquitectura de Kubernetes

Un cluster de Kubernetes agrega los recursos computacionales disponibles en la infraestructura para ejecutar las aplicaciones en contenedores. Cada máquina del cluster (física o virtual) es un nodo.

En este clúster existen dos tipos de nodos. Los nodos master son los encargados de gestionar el clúster. Los nodos worker son los encargados de ejecutar los contenedores.

Nodo Master

En el nodo master de Kubernetes ejecuta el servidor de API. Este servidor es con el que se comunica la CLI: kubectl. Además, ejecuta también el planificador encargado de gestionar el uso de recursos y repartir la carga de trabajo en los nodos workers.

En estos nodos master ejecutan los controller manager, encargados de mantener el estado correcto del cluster (replicas, endpoints, balanceadores, recursos cloud, etc)

Arquitectura y componentes en Kubernetes
Arquitectura y componentes en Kubernetes

Por último, Kubernetes usa etcd como almacenamiento de tipo clave-valor para mantener el estado y la consistencia de todo el cluster.

Nodo Worker

Los nodos worker ejecutan los pods que hayan sido planificados. Para ello, el componente llamado kubelet se encarga de ejecutar y monitorizar los pods de ese nodo. Además, es el componente encargado de reportar los recursos disponibles del nodo. En estas máquinas también ejecuta kube-proxy.

Componentes de Kubernetes

En esta sección, vamos a mencionar y explicar brevemente los componentes más importantes.

Pods

Un Pod de Kubernetes es una agrupación lógica de componentes. Los pods contienen al menos un contenedor y sus componentes se despliegan en un mismo host compartiendo los recursos. Estos contenedores comparten red y almacenamiento.

Esta es la unidad mínima que se usa para planificar y distribuir la carga del sistema. No se recomienda a los usuarios manejar pods directamente, sino usar las abstracciones sobre estos, como pueden ser los Deployments, stateful sets o daemon set.

Volúmenes

Los volúmenes permiten asignar almacenamiento persistente a los pods. Los datos contenidos en este almacenamiento no se pierden cuando el pod se reinicia y también se puede usar como almacenamiento compartido para los contenedores dentro del mismo pod.

Replica Sets

Permiten mantener pods replicados en el sistema. De esta forma, se puede garantizar la alta disponibilidad de sus componentes. Para ello, debemos configurar un pod con varias réplicas o instancias.

Stateful Sets

Los StatefulSets proporcionan características como identificadores únicos y consistentes para las redes y el almacenamiento, así como algunas restricciones que garantizan el orden de ciertas operaciones, como las relacionadas con el escalado y el despliegue. Son perfectos para desplegar aplicaciones con estado como pueden ser bases de datos.

Servicios

Es un conjunto de pods que trabajan juntos para proporcionar un servicio concreto. El servicio se puede exponer de forma interna al clúster de Kubernetes con DNS o bien externa para ser visible desde clientes externos al clúster.

Cómo Empezar con Kubernetes

Para empezar a probar Kubernetes solamente vas a necesitar su CLI (kubectl), Docker y acceso a un cluster. La opción ideal sería usar un cluster desplegado en algún proveedor cloud, pero también puedes ejecutar fácilmente un cluster de un nodo de en tu ordenador personal con Docker Desktop o Minikube.

Para instalar kubectl en Linux puedes seguir los pasos a continuación. La descarga puede tardar si no tienes conexión rápida a internet.

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

# Comprueba la versión instalada
kubectl version --client

Siguientes Pasos

Para aprender más sobre esta tecnología y Big Data, no te olvides de unirte a la lista de correo para no perderte todos los artículos y actualizaciones.

También, puedes echar un ojo a los siguientes cursos de Udemy:

Además, aquí te dejo dos libros que te pueden resultar muy útiles como referencia para convertirte en experto:

Preguntas Frecuentes de Kubernetes – FAQ

¿Cuál es la diferencia entre Kubernetes y Docker?

Docker permite empaquetar nuestras aplicaciones en imágenes y contenedores. Kubernetes, es un orquestador de contenedores, que puede manejar contenedores Docker: crea las estructuras y agrupaciones necesarias como pods para facilitar su gestión.

¿Cuál es la diferencia entre Openshift y Kubernetes?

Openshift es la distribución de Kubernetes de Red Hat. Openshift añade ciertas funcionalidades entorno a la seguridad y a las herramientas de desarrollo además de una licencia con soporte empresarial. Openshift está basado en Kubernetes, por lo que no hay diferencias entre ambas APIs.

¿Cuáles son los servicios cloud alternativa a Kubernetes?

Los proveedores cloud ofrecen Kubernes como servicio: en Azure AKS (Azure Kubernetes Service) y en Amazon EKS (Amazon Elastic Kubernetes Service).

¿Por qué es necesario Kubernetes sobre los contenedores?

Los sistemas de contenedores aportan muchas ventajas pero necesitan ser orquestados y gestionados. En el caso de que un contenedor falle, es necesario desplegar uno nuevo para sustituirlo. Kubernetes ayuda a automatizar esta gestión y a escalar los sistemas de contenedores.


A continuación, un breve vídeo-resumen. ¡No te lo pierdas!


¡Echa un ojo a mis listas de reproducción de Big Data y suscríbete al canal de Youtube para no perderte ningún vídeo nuevo!

Si te ayuda el contenido del blog, considera unirte a la lista de correo para estar al día de Big Data y cupones de formación

Deja una respuesta