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.
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.
Contenidos
¿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 hasta convertirse en líder. 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
Es importante conocer 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 clusters autogestionados o a través de un proveedor cloud.
Datadog
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)
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.
Kubernetes vs Docker
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.
Plataformas Empresariales basadas en Kubernetes para la Gestión de Contenedores
Actualmente también existen diferentes plataformas PaaS basadas en Kubernetes en nube privada o multicloud además de las opciones comentadas de servicios en nube pública.
Si te preguntas qué opción debes escoger aquí tienes una comparativa sobre la que basar tu decisión. Las 5 mejores alternativas empresariales son Openshift, Rancher y VMWare TKG. Además, las soluciones de Google y de Microsoft también se pueden desplegar en nube privada con GKE OnPrem y AKS en Azure Stack.
Openshift Container Platform
Openshift es una distribución de Kubernetes de la empresa Red Hat muy popular. Esta alternativa añade ciertas funcionalidades entorno a la seguridad y a las herramientas de desarrollo además de una licencia con soporte empresarial con una suscripción que también incluye el sistema operativo.
Debemos conocer que Openshift está basado totalmente en Kubernetes open source, por lo que no hay diferencias entre ambas APIs para orquestar los contenedores.
VMware Tanzu Kubernetes Grid
Otra plataforma empresarial basada en Kubernetes es VMWare. Usa el runtime de Docker y facilita las operaciones en entornos multicluster. Es la opción que se integra perfectamente con VMWare. Por otro lado, no soporta federación y usa herramientas de gestión y de configuración que no son estándar.
Rancher
La plataforma de Rancher se caracteriza por ser open source y ofrecer también soporte empresarial con licencia y suscripciones. También soporta las distribuciones cloud como EKS, AKS y GKE, además de una distribución ligera llamada K3s. Simplifica las operaciones visibilidad, monitorización y alertas con interfaces como Grafana.
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://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/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
Formación y Cursos de Kubernetes: Siguientes Pasos
Estos son mis cursos recomendados para realmente aprender Kubernetes como me habría gustado hacerlo a mí desde el principio:
Aprende K8 de principiante a experto
Este curso completo en Udemy en español te permitirá iniciarte en Kubernetes para orquestar contenedores. Aprenderás conceptos teóricos como su arquitectura y componentes y también a desarrollar y desplegar aplicaciones reales.
Introducción a Contenedores con Docker y Kubernetes
El curso ofrecido por IBM en Coursera te proporcionará más de 11 horas formación para manejar con detalle entornos de contenedores y Kubernetes. Mediante ejemplos y guías paso a paso podrás terminar el curso con un nivel avanzado de esta tecnología.
Arquitectura con el motor de Kubernetes (Especialización)
Por último, te recomiendo la especialización de Google, que tienes disponible en Coursera. La especialización cuenta con cuatro módulos que te permitirán aprender todo lo que necesitarás para usar Kubernetes en cloud y en entornos empresariales para preparar la certificación.
Además, aquí te dejo dos libros que te pueden resultar muy útiles como referencia para convertirte en experto:
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.
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 Kubernetes 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!
Excelente artículo. Muy buen resumen y la explicación queda fenomenal.