Instalar kubernetes en Ubuntu Linux

Instalar kubernetes en Ubuntu Linux

Kubernetes (abreviado K8s) es una plataforma de orquestación de contenedores. Sirve para desplegar, administrar, escalar y mantener aplicaciones que se ejecutan en contenedores (normalmente Docker) de forma automática y distribuida. También es un skill incluido dentro del roadmap de formación de DevOps, por eso te explico cómo instalar kubernetes en Ubuntu Linux.

¿Por qué existe Kubernetes?

Cuando tenemos muchos contenedores en varios servidores, hacer todo “a mano” se vuelve inviable:

  • ¿Dónde corre cada contenedor?
  • ¿Qué pasa si un servidor cae?
  • ¿Cómo escalo de 2 a 20 instancias?
  • ¿Cómo actualizo sin que el servicio se caiga?

Kubernetes automatiza todo eso.

instalar kubernetes en ubuntu

Modelo básico de un clúster kubernetes. Un nodo maestro (ó Control Plane) y uno o varios nodos workers. El nodo worker es el que contiene y ejecuta nuestros contenedores.

Instalar kubernetes en Ubuntu


El proceso de instalación de kubernetes es un poco dispendioso. Entonces te recomiendo que todo este proceso de aprendizaje lo realices en máquinas virtuales tipo VirtualBox. Para este ejemplo vamos a usar Ubuntu 24.04.

La instalación del nodo máster lleva hasta 14 pasos, y el o los nodos workers, 11. Entonces del 1 al 14 nodo máster, y del 1 al 10 nodo worker. Te recomiendo ejecutar los comandos desde el paso 1 al 11 en modo root (no sudo).

1- Actualizar repositorios de Ubuntu

apt update && apt upgrade -y

apt install curl apt-transport-https git wget software-properties-common \
lsb-release ca-certificates socat -y

2- Desactivar swap. En Kubernetes la swap debe estar desactivada en todos los nodos (incluido el master/control-plane) por una razón técnica y de diseño. Kubernetes necesita tener control total y predecible de la memoria.

swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

3- Cargar módulos necesarios del kernel y cargar configuración en sysctl:

modprobe overlay

modprobe br_netfilter

cat << EOF | tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

4- Aplicar configuración de sysctl y comprobar que se ha aplicado correctamente:

sysctl --system

5- Instalar las claves gpg de Docker para instalar containerd. (si vienes del artículo sobre instalar Docker seguramente ya habrás ejecutado estos comandos del quinto paso):

mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

6- Instalar containerd y configurar el daemon para que use cgroups de systemd:

apt update && apt install containerd.io -y

containerd config default | tee /etc/containerd/config.toml

sed -e's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml

systemctl restart containerd

7- Instalar claves gpg de Kubernetes y añadir el repositorio:

mkdir -p -m 755 /etc/apt/keyrings

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

8- Añadir el repositorio de Kubernetes 1.30 (puedes cambiar la versión modificando las URLs):

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" \
| sudo tee /etc/apt/sources.list.d/kubernetes.list

apt update

9- Instalar kubeadm, kubelet y kubectl:

apt install -y kubeadm=1.30.1-1.1 kubelet=1.30.1-1.1 kubectl=1.30.1-1.1

apt-mark hold kubelet kubeadm kubectl # Bloquear actualizaciones automáticas

10- Buscamos nuestra IP y la añadimos al fichero /etc/hosts con el nombre del nodo maestro (para este ejercicio k8scp como control plane pero podemos ponerle el nombre que queramos):

echo "la_Ip_del_nodo_master k8scp" >> /etc/hosts

11- Iniciar el cluster con kubeadm (importante cambiar el rango de IPs para los pods, por un rango que no esté en uso en nuestra red. También evitar el rango 10.XXX.XXX.XXX ya que es un rango reservado para redes privadas). Por último, añadimos el nombre del nodo maestro (recuerda usar el de antes) y el puerto 6443:

kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=k8scp:6443

12- Configurar kubectl e instalar autocompletado:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

sudo apt install bash-completion -y

source <(kubectl completion bash)

echo 'source <(kubectl completion bash)' >> ~/.bashrc # persistir autocompletado

13- Instalar Helm, necesario para instalar algunas aplicaciones en Kubernetes, incluido cilium (la CNI que vamos a instalar):

curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

sudo apt update

sudo apt install helm -y

14- Instalar cilium, una CNI que nos permitirá conectar los pods entre sí:

helm repo add cilium https://helm.cilium.io/

helm repo update

helm template cilium cilium/cilium --version 1.16.1 \
--namespace kube-system > cilium.yaml

kubectl apply -f cilium.yaml

Y ese es todo el proceso de instalación. Recuerda que un nodo worker se instala repitiendo los pasos desde el 1 al 10.

Podemos ir al siguiente paaso, instalar una interfaz gráfica para kubernetes

Instalar interfaz gráfica de Kubernetes LENS en Ubuntu

Comparte esto en
Publicado en GNU Linux.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *