Despliegue de Kubernetes
Actualizado: 2026-02-16 · Dificultad: Media · Tiempo estimado: 20-30 min
Resultado: al final tendrás un nodo principal de Kubernetes funcionando donde desplegar tus proyectos.
Requisitos
- Equipo Linux con Docker, 4 gb de RAM mínimo. Recomendado 8GB
Objetivo
Vamos a montar un nodo principal de Kubernetes para desplegar nuestros proyectos.
Pasos
1) Actualización del sistema
Primero actualizamos el sistema.
sudo apt update && sudo apt -y full-upgrade && sudo reboot2) Instalar dependencias
Instalamos las dependencias necesarias.
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p /etc/apt/keyrings
3) Añadimos repositorio oficial Kubernetes
Descargamos la clave del repositorio como confiable:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key |
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
Añadimos el repositorio:
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" |
sudo tee /etc/apt/sources.list.d/kubernetes.list
Volvemos a hacer update para que nos actualize los paquetes con los de dicho repo:
sudo apt updateInstalamos los paquetes:
sudo apt install -y kubelet kubeadm kubectlEvitamos que se actualicen automáticamente y quedarnos con una versión estable:
sudo apt-mark hold kubelet kubeadm kubectl4) Configuración del sistema
Primero desactivamos el swap:
sudo swapoff -aY quitamos la swap del fstab para que no se monte cada vez que inicamos el equipo:
sudo sed -i '/ swap / s/^/#/' /etc/fstabCargamos los módulos necesarios:
sudo modprobe overlay
sudo modprobe br_netfilter
Configuramos el sistema para que funcione correctamente con Kubernetes:
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system5) Configuración de containerd
Vamos a entrar a editar el archivo /etc/containerd/config.toml
Y vamos a cambiar:
SystemdCgroup = falsePor:
SystemdCgroup = trueY reiniciamos containerd:
sudo systemctl restart containerd
sudo systemctl restart kubelet
6) Inciando el Cluster
Primero vamos a añadir el hostname en el archivo /etc/hosts del equipo.
192.168.1.200 k8scpIniciamos el cluster:
sudo kubeadm init --apiserver-advertise-address=192.168.1.200 --control-plane-endpoint=k8scp --pod-network-cidr=172.24.0.0/16
Fijaros n los rangos de RED que estoy yo poniendo y cambiarlos a vuestras necesidades.
7) Configurar kubectl
Vamos a copiar el archivo de configuración que viene por defecto en Kubernetes y configurar los permisos:
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config8) Instalar Calico
Instalamos Calico para la red interna de Kubernetes:
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
Calico es el gestor de redes para los Pods en Kubernetes, y yo quiero que asigne un rango de IP concreto. para ello, en el archivo calico.yaml hay que cambiar el CIDR:
192.168.0.0/16 → 172.24.0.0/16
kubectl apply -f calico.yaml9) Permitir Single Node
Por defecto Kubernetes no permite desplegar un solo nodo, para ello debemos permitirlo desactivando el taint:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-10) Instalar Dashboard
Instalamos el dashboard de Kubernetes para poder gestionar el cluster:
sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
Y creamos un usuario para el dashboard:
kubectl -n kubernetes-dashboard create token admin-user
Recuerda guardarlo en un archivo para poder acceder al dashboard desde el navegador.
Para poder acceder al dashboard necesitarás forwardear el servicio de dashboard a tu red local:
sudo kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443 --address 0.0.0.0
Y acceder a https://localhost:8443
Y debes añadir la siguiente excepción al firewall:
sudo ufw allow 8443
Debugging
Si tienes problemas con el cluster, puedes usar los siguientes comandos:
sudo crictl ps -a | grep etcd
crictl interactua directamente con el servicio que corre los contenedores, en este caso containerd, listando su estado y errores que pueda haber al levantarlos.
Ver recursos del sistema:
df -h
free -h
En ocasiones, podemos tener el disco lleno y no darnos cuenta, por lo que es importante revisar el espacio en disco.
Reset completo:
sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d
sudo rm -rf /var/lib/cni
sudo rm -rf /var/lib/etcd
sudo systemctl restart containerd
sudo systemctl restart kubelet
Volver a tutoriales.