¿Qué es un clúster de Kubernetes y cómo crearlo?

15min

Kubernetes es una de las herramientas más avanzadas para organizar despliegues de aplicaciones donde podamos asegurar un buen rendimiento y la alta disponibilidad. En otros post de nuestro blog ya la hemos presentado, abordando su arquitectura y los distintos componentes que ofrece. En esta ocasión queremos ir un poco más allá para explicaros qué es un clúster de Kubernetes y cómo debes crearlo, junto con algunas de las herramientas que te pueden ayudar a gestionarlos.

Índice

¿Qué es un clúster de Kubernetes?

En términos generales llamamos clúster a un conjunto de máquinas que trabajan juntas para ejecutar aplicaciones. En un clúster podemos tener tanto máquinas físicas como máquinas virtuales, si bien es cierto que en la actualidad la comodidad y versatilidad que nos ofrecen los servicios en la nube, lo más habitual es que se usen servidores virtualizados.

Ya dentro del contexto de este post, un clúster de Kubernetes se refiere a un conjunto de máquinas que trabajan juntas para ejecutar aplicaciones en despliegues basados en contenedores. En Kubernetes un clúster está compuesto por uno o varios nodos que cumplen funciones específicas y que se coordinan mediante un «control plane». Gracias al clúster, Kubernetes consigue organizar y supervisar los contenedores, atendiendo a las las cargas de trabajo y los parámetros sobre los cuales se debe funcionar.

Componentes de un clúster Kubernetes

Vamos a ver ahora cuáles son los componentes que forman un clúster de Kubernetes.

Plano de control o Control Plane

El componente principal de un clúster de Kubernetes es el denominado Control Plane, que en español vendría a ser el plano de control. Este es el componente que se encarga de decidir qué se ejecuta en el clúster y cómo se ejecuta. También se encarga de responder ante fallos o cambios en el sistema, haciendo que todo vuelva a la normalidad según los parámetros de trabajo deseados.

Nodos de trabajo (Workers)

Luego tenemos los nodos de trabajo, que son las máquinas donde realmente se ejecutan los contenedores gestionados por el control plane y, a su vez, las aplicaciones.

Es importante saber que en cada nodo de trabajo no se albergan directamente los contenedores. En realidad se ejecutan los Pods asignados por el plano de control, donde a su vez se ejecutan los contenedores.

API Server, Scheduler y Controller Manager

Estas son herramientas que nos sirven para controlar el cluster, realizando cada una de ellas operaciones distintas:

  • API Server se encarga de ofrecer un punto central para llevar las comunicaciones entre todos los componentes del clúster. Todas las operaciones dentro del clúster se realizan usando llamadas a este API..
  • Scheduler es el componente que decide en qué nodo se colocan los pods, atendiendo a las reglas que se hayan definido y los recursos disponibles en los nodos.
  • Controller Manager se encarga de supervisar el estado del clúster. Es el componente que detecta desviaciones respecto al estado deseado y se encarga de producir las correcciones necesarias para volver a estado marcado.

Kubelet, Kube-proxy y Runtime

Luego tenemos los componentes de cada nodo trabajador, que nos permiten organizar el propio nodo en el que se encuentran.

  • Kubelet es el agente que corre en cada nodo y se usa para que los contenedores puedan recibir órdenes del plano de control.
  • Kube-proxy es el componente que se encarga de gestionar el tráfico de red hacia los servicios, haciendo que pueda existir una comunicación entre Pods y hacia fuera del clúster.
  • Runtime de contenedores, que es el encargado de ejecutar los contenedores, siendo el propio software que permite poner en marcha contenedores, como Docker También es capaz de funcionar con otras tecnologías similares y compatibles con Kubernetes como containerd o CRI-O.

etcd: El almacén de datos del clúster

Es otro componente que se encuentra en el plano de control y que sirve para almacenar la configuración y el estado del clúster. Se trata de una base de datos distribuida que se usa para poner tomar decisiones desde el plano de control.

Diferencias entre un clúster y un nodo

Como hemos dicho antes un cluster es un conjunto de máquinas, que trabaja de forma conjunta para servir de soporte a la ejecución de una aplicación. Por tanto, un clúster es un conjunto de nodos, y un nodo es la unidad individual de cada uno de los elementos del clúster.

Tipos de clúster Kubernetes

Además de los distintos componentes que forman un clúster de Kubernetes también es importante que puedas entender los distintos tipos de clúster que se pueden dar.

Clúster Kubernetes on-premise

Llamamos Clúster on-premise a aquellos que se implementan en infraestructura propia dentro de un centro de datos privado. Este tipo de clúster ofrece un elevado nivel de control pero no es tan habitual porque requiere personal especializado para su instalación, mantenimiento y seguridad, aparte de requerir muchos conocimientos técnicos del personal.

Aún así este tipo de clúster es habitual en empresas específicas como la banca, así como organizaciones que requieren garantizar una elevada privacidad de los datos, por ejemplo las dedicadas a la salud o los seguros.

Clúster en la nube pública (cloud)

Actualmente los clúster de Kubernetes se suelen instalar en proveedores cloud, ya que permiten simplificar muchos procesos del día a día de la gestión de los nodos. Esta opción ofrece mucha estabilidad y reduce de manera destacable el mantenimiento de máquinas, haciendo también que el coste pueda estar más ajustado, ya que está vinculado directamente al consumo de recursos que realmente se necesitan.

Clúster híbrido

Este tipo de clúster combina el trabajo con los dos modelos anteriores: on-premise y los  recursos en la nube. Por tanto, ofrece una alternativa que puede aprovechar ventajas de ambas soluciones, ofreciendo flexibilidad y control de gasto pero además la posibilidad de cumplir normativas específicas.

Clúster gestionado vs. autogestionado

Además, si queremos realizar un clúster de Kubernetes también tenemos la opción de gestionarlo nosotros o delegar la gestión en algún servicio en la nube.

El cluster gestionado tiene la ventaja de ser administrado desde un plano de control que ofrece el propio proveedor cloud, lo que nos facilita mucho la tarea del día a día y reduce la complejidad de operación.

Si deseamos gestionarlo nosotros mismos, lo que se suele llamar «Autogestionado» quiere decir que nosotros mismos seremos los responsables de organizar y administrar toda la instalación de Kubernetes. Esta opción nos aporta mayor control pero también hace crecer la responsabilidad y la necesidad de conocimientos técnicos, así como tiempo para mantener el clúster.

Kubernetes en edge computing

Por último queremos mencionar Kubernetes en Edge Computing que básicamente consiste en ejecutar clústeres ligeros y distribuidos cerca del lugar donde se generan los datos. Esta es una solución que se usa en dispositivos IoT, sistemas en movilidad y fábricas y que permite baja latencia y procesamiento local de los datos.

¿Para qué sirve un clúster de Kubernetes?

Como habrás podido entender, si quieres trabajar con Kubernetes es necesario organizar un cluster en el cual participan diversas máquinas, ya sea físicas o virtuales. Sus utilidades pueden ser bastante diversas como vamos a ver.

Automatizar el despliegue y gestión de aplicaciones en contenedores

Desplegar aplicaciones en contenedores tiene sus ventajas pero si realmente queremos sacar partido a los contenedores necesitamos Kubernetes, ya que es una capa que permite hacer numerosas automatizaciones y además gestionar la infraestructura automáticamente, atendiendo a situaciones de error o necesidades de demanda cambiantes.

Garantizar alta disponibilidad y continuidad del servicio

Cuando necesitamos desplegar una aplicación con alta disponibilidad, asegurando siempre la continuidad del servicio, Kubernetes también nos resulta esencial, ya que es capaz de reaccionar cuando un nodo falla, reubicando los pods automáticamente en otros nodos.

Con ello es posible asegurar que las aplicaciones siguen funcionando a pesar de eventuales problemas que puedan ocurrir

Escalar aplicaciones de forma rápida y eficiente

La escalabilidad también es un punto importante, ya que Kubernetes se encargará de aumentar o reducir la réplicas de los pods, atendiendo a la demanda que tenga la aplicación en cada momento. Además es capaz de hacerlo de manera automática, eliminando la necesidad de intervención humana.

Optimizar el uso de recursos entre múltiples nodos

El hecho de poder escalar las aplicaciones de manera automática, tanto a la hora de aumentar los nodos cómo cuando sea necesario reducirlos, nos asegura que los gastos estarán ajustados a lo que realmente nuestra aplicación necesita. En otras palabras, Kubernetes nos da la garantía de que el uso de los recursos está optimizado en todo momento, sin que tengamos que estar pendientes todo el rato de las instalaciones o gestionar la infraestructura manualmente.

Facilitar la portabilidad entre entornos y proveedores cloud

Además, otra de las ventajas que nos ofrece Kubernetes, es una mayor independencia del entorno donde se está ejecutando el sistema, ya que hace mucho más viable mover las aplicaciones entre proveedores o entornos locales, nubes públicas o híbridas.

¿Cómo crear un clúster de Kubernetes?

Ahora que ya tenemos una idea más o menos clara sobre lo que es Kubernetes, para qué sirve y cuáles son sus componentes principales, es el momento de aprender a crear un clúster.

Sin embargo, debes saber que dependiendo de lo que vaya a hacer con el clúster el procedimiento más adecuado puede cambiar bastante. O sea, no es lo mismo crear un clúster para hacer pruebas locales, desarrollo, formación o crearlo para el entorno de producción. Es por ello que vamos a explicarlo en distintos apartados.

Requisitos previos (hardware, SO, versiones)

En cualquier caso, antes de crear un clúster, es importante tener los recursos necesarios para poder ejecutarlo. Esto es:

Hardware:

Para hacer que Kubernetes pueda funcionar en tu ordenador local, por ejemplo para desarrollo o formación necesitarías un ordenador moderno con 8 GB RAM como mínimo, aunque recomendaríamos al menos 16 GB si necesitas usar programas extra para desarrollar, por ejemplo. En este caso lo haremos usando alguna herramienta como Minikube, que hará que todo lo necesario resida en tu propio ordenador de desarrollo.

Si ya se trata de un entorno de producción necesitarás varias máquinas con 2 VCPU por nodo y un mínimo de 4GB también por nodo. Toma esto siempre como mínimo, ya que lo ideal sería contar con máquinas con más recursos todavía.

Sistema operativo:

Para lo que respecta al sistema operativo te recomendamos distribuciones Linux modernas como Ubuntu, Debian, CentOS, Rocky Linux o Alma Linux.

Si estás en desarrollo puedes también usarlo en Windows o macOS mediante herramientas como Minikube y máquinas virtuales o Docker.

Crear un clúster con kubeadm (método manual)

kubeadm es la herramienta oficial para crear los clústeres de Kubernetes sobre máquinas virtuales o servidores dedicados. Esta herramienta se encarga de inicializar el plano de control y generar el comando de unión de nodos.

Los pasos que tienes que realizar son los siguientes:

  1. Instalar kubeadm y kubelet en cada nodo
  2. Tendrás que instalar también el runtime de contenedores, ya sea Docker, containerd o CRI-O. Este software lo tendrás que instalar tanto en los Worker como en el control plane.
  3. Luego tienes que inicializar el nodo de control con el comando «sudo kubeadm init»

El siguiente paso es configurar kubectl para manejar el clúster, instalar plugin de red, un CNI como Calico, Flannel o Weave, que te permita habilitar la red de Pods y luego unir los workers al plano de control. Enseguida daremos más instrucciones sobre este proceso.

Crear un clúster con Minikube (entorno local)

Ahora bien, si estás en un entorno de desarrollo no necesitas hacer todo ese trabajo. Es mucho más cómodo usar una herramienta como Minikube, que puede crear el clúster Kubernetes en local en una sola máquina.

En este caso tendrás un único nodo (control + worker) y podrás usar distintos drivers dependiendo de la tecnología de virtualización que quieras usar, ya sea Docker, VirtualBox, HyperKit, KVM.

Para ello harás «minikube start» y seguirás el proceso.

Crear un clúster con Kind (para desarrollo y testing)

Kind es otra herramienta ideal para desarrollo y testing, similar a Minikube, aunque en este caso específica para ejecutar un clúster dentro de contenedores Docker. El nombre de esta herramienta es un acrónimo de «Kubernetes in Docker».

Para arrancar tu cluster tendrás que hacer esto:

kind create cluster --name app_name_test

Crear un clúster gestionado en la nube (GKE, EKS o AKS)

Otra opción es usar los servicios de algún proveedor cloud de Kubernetes gestionado. En este caso ellos administran el plano de control y te ofrecen una interfaz sencilla para definir los parámetros para ajustar el funcionamiento de las aplicaciones para alta disponibilidad. También se encargan de mantener el sistema actualizado.

De este modo tienes menos requisitos operacionales y puedes hacerlo todo sin menos conocimientos, gastando también menos tiempo. Por ejemplo, en Arsys tenemos nuestro propio servicio de Kubernetes gestionado y te resultará muy sencillo configurarlo.

Configuración inicial del clúster de Kubernetes

Una vez has creado el clúster tendrás que realizar una serie de pasos que incluyen la adición de nodos y la configuración de la red. En detalle son los siguientes puntos:

Nota que estos pasos no los necesitas hacer si estás en Minikube o Kind, ya que te ofrecen soluciones más sencillas y limitadas a una máquina de desarrollo.

Añadir nodos al clúster

El paso de añadir los nodos al clúster consiste en asociar los workers donde se ejecutarán los pods. Esto lo consigues con un comando de kubeadm llamado join.

En el comando necesitarás entregar la IP del Worker, un token y el discovery token que es la huella del certificado necesario para asociarlo. La sintaxis del comando es esta:

kubeadm join IP:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Instalar un CNI (Calico, Weave, Flannel)

El CNI es el sistema que nos permite que los pods se puedan comunicar en red. Son las siglas de Container Network Interface. Existen varias alternativas que incluyen Calico, Flannel o Weave Net.

La Instalación se realiza entregando un manifiesto que tiene formato YAML. El comando para Calico sería este:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Desplegar un dashboard para gestión visual

En el día a día de administración de tus aplicaciones seguramente querrás tener un dashboard, que te permita la gestión del clúster mediante interfaz gráfica. Kubernetes tiene uno que puedes usar para visualizar elementos como pods, despliegues, servicios, estados del clúster, etc.

También lo instalas mediante un manifiesto YAML:

kubectl apply -f https://kubernetes.io/examples/dashboard.yaml

Configurar roles y accesos (RBAC)

También tendrás que configurar los roles y accesos, lo que se conoce por RBAC. Esto permite definir qué usuarios o servicios pueden acceder a qué partes del clúster, ofreciendo distintos tipos de roles, permisos y bindings. Esto es esencial para que puedas definir quienes tienen acceso y qué tipo de operaciones podrán realizar.

Buenas prácticas de seguridad inicial

Antes de acabar sería ideal atender algunas configuraciones recomendadas como buenas prácticas. Entre ellas te recomendamos cambiar tokens o certificados generados automáticamente, restringir el acceso a API Server. También usar políticas de red suficientemente restrictivas y evitar ejecutar contenedores privilegiados por defecto.

Herramientas para gestionar un clúster Kubernetes

Seguramente en el uso del día a día de Kubernetes te vendrán bien otras herramientas útiles para gestionar el clúster. Solo para que vayas apuntando, te pasamos aquí una lista de herramientas avanzadas.

kubectl

Es la herramienta de línea de comandos oficial de Kubernetes. La usarás para gestionar todos los recursos del clúster, lo que incluye elementos como pods, servicios, deployments, nodos, RBAC, etc.

Helm

Esta es una herramienta interesante que hace de gestor de paquetes de Kubernetes. Se usa para instalar aplicaciones complejas.

Lens

Si quieres disponer de una interfaz gráfica avanzada para administrar clústeres te recomendamos analizar Lens. Es muy interesante para administradores y te ofrece nuevas métricas, logs y recursos.

Operators

Los Operators son extensiones que automatizan operaciones avanzadas dentro del clúster. Puedes encontrar de diversos tipos, por ejemplo para gestionar aplicaciones con lógica propia, ya sea bases de datos, colas, etc. Además es cómoda porque lo haces todo de forma declarativa.

Kubernetes Dashboard

Esta ya la hemos comentado. Es la interfaz visual oficial de Kubernetes. que deberías tener sí o sí, incluso para el aprendizaje o desarrollo.

Fernán García de Zúñiga

Productos relacionados: