Este tutorial va a servir como guía para montar un clúster de K8s usando kubeadm

Se va a abordar todos los aspectos a tener en cuenta desde las instalación hasta la puesta en marcha pasando por el firewall y los diferentes tipos de clústeres que existen.

Instalación del software necesario

Instalación de Docker

Lo primero de todo, vamos a necesitar tener Docker instalado. Para ello, vamos a seguir el tutorial oficial. Se ha preparado un script para realizar todo el proceso de forma más rápida y sencilla:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/ubuntu> \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Install packages
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Con esto ya estaría Docker instalado correctamente y listo para funcionar. Sin embargo, solo se permite al usuario root que ejecute comandos de Docker. Para cambiar esto, solo debemos de añadir el usuario que queremos al grupo docker

Verificación de los módulos cargados

Para hacer un uso correcto de K8s, necesitamos tener dos módulos principalmente: overlay y br_netfilter

En cuanto al primero, normalmente se habilita al instalar Docker. Por lo tanto, no tenemos ningún problema. Este módulo tiene la función principal de permitir el uso del sistema de ficheros OverlayFS que es usado tanto por Docker como K8s para el manejo de las imágenes de los contenedores (de ahí que se habilite con la instalación de Docker).

En cuanto al segundo, este no suele venir habilitado normalmente. Su función es la de permitir que a los paquetes que atraviesen un red de tipo bridge también se les apliquen las reglas de iptables. Sin este módulo, K8s no funcionaría correctamente puesto que las redes que monta entre los distintos nodos, pods y contenedores son de este tipo.

Para habilitarlo, hay que ejecutar el siguiente comando:

sudo modprobe br_netfilter

Y ya quedaría habilitado. Sin embargo, esto no persiste entre reinicios. Para hacerlo persistente, hay que usar el directorio /etc/modules-load.d/ y dentro crear un archivo con el nombre k8s.conf (el nombre no debe ser necesariamente ese) y el siguiente contenido:

overlay
br_netfilter

<aside> ⚠️

Se ha añadido también el módulo overlay para asegurar que, en ningún caso, se desactive el módulo si desinstalamos o desactivamos Docker por algún motivo. Pero como ya se ha comentado anteriormente, esto no es necesario

</aside>

Además, hay que indicarle al sistema que debemos actuar como router y que también tenemos que aplicar las reglas de iptables. Para ello, tenemos que usar el directorio /etc/sysctl.d/ dentro crear un archivo con el nombre k8s.conf (el nombre no debe ser necesariamente ese) y el siguiente contenido:

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

Ahora aplicamos la configuración mediante el comando

sudo sysctl --system