Kubernetes es una plataforma de código abierto para la gestión de cargas de trabajo y servicios, que facilita tanto la configuración declarativa como la automatización. A continuación, se presenta una guía paso a paso para instalar Kubernetes en un entorno de máquina virtual utilizando kubeadm
.
Requisitos Previos
- Sistema Operativo: Ubuntu 20.04 o 22.04 LTS.
- Usuario: Asegúrate de tener acceso como root o un usuario con permisos sudo.
- Memoria: Al menos 2GB de RAM para el nodo maestro.
- CPU: Al menos 2 CPUs.
- Red: Conectividad entre todos los nodos del clúster.
Paso 1: Preparar el Entorno
- Actualizar el sistema:
bash sudo apt update && sudo apt upgrade -y
- Desactivar el swap:
bash sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- Instalar dependencias:
bash sudo apt install -y apt-transport-https ca-certificates curl
Paso 2: Instalar Docker
- Agregar el repositorio de Docker:
bash curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- Instalar Docker:
bash sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io
- Habilitar e iniciar Docker:
bash sudo systemctl enable docker sudo systemctl start docker
Paso 3: Instalar kubeadm, kubelet y kubectl
- Agregar la clave GPG de Kubernetes:
bash curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
- Agregar el repositorio de Kubernetes:
bash sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF'
- Instalar las herramientas de Kubernetes:
bash sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
Paso 4: Inicializar el Control Plane (Nodo Maestro)
- Inicializar Kubernetes:
bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16
- Configurar kubectl para el usuario no root:
bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Paso 5: Instalar la Red de Pods (Calico)
- Aplicar la configuración de red:
bash kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
Paso 6: Unir Nodos al Clúster
- Obtener el comando de unión (este comando se obtiene al finalizar la inicialización del Control Plane):
bash kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- Ejecutar el comando de unión en cada nodo trabajador.
Paso 7: Verificar la Instalación
- Comprobar los nodos en el clúster:
bash kubectl get nodes
Solución de problemas de instalación
Aquí tienes una lista de algunos errores comunes que pueden ocurrir durante la instalación de Kubernetes y cómo solucionarlos:
1. Problemas con Swap
Error:
[ERROR Swap]: running with swap on is not supported. Please disable swap.
Solución:
Desactiva el swap con los siguientes comandos:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. Docker no está corriendo
Error:
CRI v1 runtime: docker: unable to detect the docker daemon.
Solución:
Asegúrate de que Docker esté instalado y corriendo:
sudo systemctl start docker
sudo systemctl enable docker
3. Problemas con la red del Pod
Error:
[ERROR Port-10250]: Port 10250 is in use
Solución:
Asegúrate de que no haya ningún servicio usando el puerto 10250:
sudo lsof -i :10250
sudo kill -9 <PID>
4. Problemas de permisos con kubectl
Error:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
Solución:
Configura kubectl correctamente para el usuario:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5. Problemas con los cgroups
Error:
[ERROR SystemVerification]: failed to parse cgroup info: failed to get cgroup stats: failed to parse memory.stat - invalid format
Solución:
Asegúrate de que Docker esté configurado para usar el controlador de cgroups correcto:
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
6. Problemas con el certificado
Error:
x509: certificate signed by unknown authority
Solución:
Asegúrate de que todos los nodos estén usando la misma configuración de certificado. Si hay problemas, puedes regenerar los certificados:
sudo kubeadm reset
sudo kubeadm init
7. Problemas con la configuración de red
Error:
[ERROR] Network Plugin is not ready: cni config uninitialized
Solución:
Asegúrate de haber aplicado correctamente la configuración de red (por ejemplo, Calico):
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
8. Falta de espacio en el disco
Error:
[ERROR ImagePull]: failed to pull image
Solución:
Asegúrate de tener suficiente espacio en disco y limpiar imágenes de Docker no utilizadas:
docker system prune -a
9. Token expirado
Error:
[ERROR Token expired]: the token has expired.
Solución:
Genera un nuevo token para unir nodos al clúster:
kubeadm token create
kubeadm token list
Usa el nuevo token en el comando de unión.
10. Problemas con el firewall
Error:
[ERROR] failed to connect: failed to connect to the host
Solución:
Asegúrate de que los puertos necesarios estén abiertos:
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10251/tcp
sudo ufw allow 10252/tcp
sudo ufw allow 10255/tcp
Estos son algunos de los errores comunes que puedes encontrar durante la instalación de Kubernetes y sus soluciones. Asegúrate de seguir las mejores prácticas y revisar la documentación oficial de Kubernetes para más detalles y soluciones avanzadas.
Conclusión
Siguiendo estos pasos, habrás instalado y configurado un clúster básico de Kubernetes. Desde aquí, puedes comenzar a desplegar aplicaciones y servicios en tu clúster. Para más información y configuraciones avanzadas, visita la documentación oficial de Kubernetes.