Kubernetes: Introducción y Conceptos Clave

Última actualización: 14/11/2020

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 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.

Otros orquestadores de contenedores conocidos son Docker Swarm y 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.

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.

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.

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 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:

[Guía en construcción]

¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Deja una respuesta