Crea tu clúster de Kubernetes en Proxmox
Crear un clúster de Kubernetes en Proxmox te permite operar una plataforma de orquestación de contenedores de alto rendimiento en un entorno virtualizado y gestionado por ti. Es ideal para entornos de prueba, flujos de trabajo de desarrollo y CI, así como para escenarios de producción de menor escala. En esta guía aprenderás paso a paso cómo configurar máquinas virtuales en Proxmox y, a partir de ellas, desplegar un clúster de Kubernetes estable.
Paso 1: comprobar los requisitos previos
Antes de empezar con la configuración del clúster de Kubernetes, asegúrate de que tu entorno cumple todos los requisitos técnicos necesarios. Contar con una base inicial limpia te ahorrará tiempo más adelante y evitará errores de configuración innecesarios.
En primer lugar, necesitas una instalación funcional de Proxmox VE. Por motivos de rendimiento, se recomienda una instalación bare metal de Proxmox. Tanto el acceso web a través de la interfaz de Proxmox como el acceso SSH a la línea de comandos deben estar disponibles. Mediante SSH podrás ejecutar comandos, subir imágenes y automatizar configuraciones.
Para operar un clúster de Kubernetes estable, también necesitarás varias máquinas virtuales. Se recomienda la siguiente distribución de nodos de Kubernetes:
- un nodo maestro (para la denominada control plane) y
- al menos dos nodos worker.
Esta configuración aporta un cierto grado de redundancia y permite operar Kubernetes de forma similar a entornos reales de producción. No obstante, para fines de prueba o desarrollo también puede ser suficiente una configuración más reducida con un nodo maestro y un nodo worker.
Además, el host de Proxmox debe disponer de una interfaz de red tipo bridge correctamente configurada. Esto permite que las máquinas virtuales accedan a la red local y, si es necesario, a Internet, algo imprescindible para descargar actualizaciones e instalar posteriormente los componentes de Kubernetes.
Para entornos de producción, también es recomendable configurar copias de seguridad periódicas de las máquinas virtuales mediante un Proxmox Backup Server. De este modo, podrás restaurar rápidamente los nodos de Kubernetes en caso de fallo y minimizar los tiempos de inactividad.
La plataforma ideal para aplicaciones de contenedores de alto rendimiento y gran escalabilidad, integrada en el ecosistema de IONOS Cloud con soporte experto 24/7.
Paso 2: descargar la imagen cloud y prepararla como plantilla
La instalación de Kubernetes resulta mucho más sencilla con las denominadas cloud images. Se trata de imágenes de sistemas operativos preconfiguradas, normalmente Ubuntu o Debian, que están optimizadas para el arranque automático mediante cloud-init. En este ejemplo utilizamos una imagen cloud de Ubuntu 22.04 LTS, ya que es estable, está bien documentada y resulta especialmente adecuada para su uso con Kubernetes.
En primer lugar, descarga la imagen cloud actual de Ubuntu directamente en tu host de Proxmox. Para ello, inicia sesión por SSH en el servidor Proxmox y cambia al directorio en el que Proxmox almacena los archivos ISO e imágenes:
cd /var/lib/vz/template/isobashA continuación, descarga la imagen de Ubuntu con el siguiente comando:
wget -O ubuntu-22.04-server-cloudimg-amd64.img https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.imgbashComo alternativa, también puedes descargar la imagen primero en tu equipo local y transferirla después al host de Proxmox mediante scp (Secure Copy):
scp ubuntu-22.04-server-cloudimg-amd64.img root@<proxmox-ip>:/var/lib/vz/template/iso/bashUna vez que la imagen esté disponible en el host de Proxmox, puedes crear a partir de ella una nueva máquina virtual que más adelante servirá como plantilla. Para ello, crea primero una VM vacía con un ID único, por ejemplo 9000, y asígnale recursos de hardware básicos:
qm create 9000 --name ubuntu-template --memory 2048 --net0 virtio,bridge=vmbr0bashAhora importa la imagen cloud descargada previamente como disco duro virtual en el almacenamiento deseado (en este ejemplo, local-lvm):
qm importdisk 9000 /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img local-lvmbashA continuación, conecta el disco importado a la VM y configura el controlador adecuado. De este modo, la imagen queda vinculada al controlador SCSI virtual de la máquina:
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0bashPara poder configurar automáticamente direcciones IP, nombres de host y claves SSH al clonar las VM más adelante, necesitas añadir una unidad Cloud-Init. Esta unidad virtual contiene los datos de configuración que se aplican automáticamente durante el primer arranque de la máquina virtual. Añade la unidad Cloud-Init y define el orden de arranque con los siguientes comandos:
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0bashActiva también el QEMU Guest Agent, para que Proxmox pueda leer información de estado de la VM, y configura una consola serie que permita acceder directamente a la consola en caso de emergencia:
qm set 9000 --agent 1
qm set 9000 --serial0 socket --vga serial0bashSi todo está configurado correctamente, puedes convertir la máquina virtual en una plantilla. En Proxmox, las plantillas sirven como base a partir de la cual puedes crear tantos clones como necesites, lo que las hace ideales para los nodos maestro y worker de Kubernetes:
qm template 9000bashTras completar este paso, dispondrás de una plantilla de Ubuntu lista para crear los nodos de tu clúster de Kubernetes.
Paso 3: clonar máquinas virtuales para maestro y worker mediante la CLI
En este paso crearás, a partir de la plantilla generada anteriormente, las máquinas virtuales que actuarán como nodos maestro y worker de tu clúster de Kubernetes. Cada VM recibe su propia dirección IP, un nombre de host único y una clave SSH para un acceso seguro. Proxmox aplica automáticamente la configuración básica mediante cloud-init, por lo que no es necesario realizar ajustes manuales dentro de las máquinas virtuales.
En primer lugar, clona la plantilla (en este ejemplo, con el ID 9000) y crea tres máquinas virtuales: una para el nodo maestro y dos para los nodos worker. Durante el proceso puedes ajustar de forma individual los recursos de CPU y memoria RAM:
qm clone 9000 101 --name k8s-master-1 --full true
qm set 101 --cores 2 --memory 4096
qm clone 9000 102 --name k8s-worker-1 --full true
qm set 102 --cores 2 --memory 4096
qm clone 9000 103 --name k8s-worker-2 --full true
qm set 103 --cores 2 --memory 4096bashA continuación, define mediante cloud-init la configuración básica de red, el nombre de usuario y la clave SSH. Puedes asignar direcciones IP estáticas o utilizar DHCP. En este ejemplo se emplean direcciones IP estáticas.
# Configurar el nodo maestro
qm set 101 --ipconfig0 ip=192.168.1.10/24,gw=192.168.1.1
qm set 101 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 101 --ciuser ubuntu
qm set 101 --nameserver 192.168.1.1
qm set 101 --description "K8s Master 1"
# Configurar los nodos worker
qm set 102 --ipconfig0 ip=192.168.1.11/24,gw=192.168.1.1
qm set 102 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 102 --ciuser ubuntu
qm set 103 --ipconfig0 ip=192.168.1.12/24,gw=192.168.1.1
qm set 103 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 103 --ciuser ubuntubashAdapta las direcciones IP de ejemplo a tu propia red. Utiliza direcciones dentro del rango de tu router y asegúrate de que cada VM tenga una IP única que no esté asignada a otro dispositivo.
Por último, inicia las tres máquinas virtuales:
qm start 101
qm start 102
qm start 103bashEspera unos instantes a que los sistemas arranquen por completo y comprueba la conexión por SSH. Por ejemplo, puedes iniciar sesión en el nodo maestro con el siguiente comando:
ssh ubuntu@192.168.1.10Paso 4: añadir la configuración básica en todas las máquinas virtuales
Antes de instalar Kubernetes en las VM, es necesario aplicar algunos ajustes a nivel de sistema para garantizar un funcionamiento estable. Entre ellos se incluyen la desactivación del swap, la configuración de parámetros del kernel relacionados con la red y el reenvío de IP, así como la sincronización de la hora del sistema. Estas medidas son imprescindibles para el correcto funcionamiento de Kubernetes y para garantizar una comunicación de red fiable entre nodos y contenedores.
En primer lugar, desactiva el swap en todos los nodos, ya que Kubernetes lo exige para el correcto funcionamiento del scheduler. Además, elimina la entrada correspondiente en /etc/fstab para evitar que el swap se reactive tras reiniciar el sistema:
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstabbashA continuación, configura los parámetros del kernel necesarios para que el tráfico de red pueda procesarse correctamente entre contenedores y nodos. Para ello, crea un archivo de configuración específico y aplica los cambios:
cat <<'EOF' | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# Aplicar cambios
sudo sysctl --systembashOtro paso importante es sincronizar la hora del sistema, ya que diferencias de tiempo pueden provocar errores en certificados y en distintos componentes del clúster. Para ello, instala y activa chrony:
sudo apt update && sudo apt install -y chrony
sudo systemctl enable --now chronybashPor último, se recomienda instalar algunas herramientas auxiliares básicas que serán necesarias en los pasos posteriores de la configuración:
sudo apt install -y curl apt-transport-https ca-certificates gnupg lsb-releasebashTras completar estos pasos, todos los nodos quedan preparados de forma uniforme: el swap está desactivado, los ajustes de red están correctamente configurados y la hora del sistema está sincronizada. Las máquinas virtuales ya están listas para instalar Kubernetes y continuar con la creación del clúster.
Paso 5: elección de la distribución de Kubernetes
Antes de comenzar con la instalación de Kubernetes, conviene elegir una distribución adecuada en función de tus requisitos y del entorno de uso previsto. En este contexto, hay dos opciones especialmente recomendables:
- RKE2 (Rancher Kubernetes Engine 2): RKE2 es una distribución de Kubernetes estable y preparada para producción, desarrollada por Rancher. Resulta especialmente adecuada si más adelante quieres utilizar una gestión gráfica mediante Rancher o si planeas operar un clúster con varios nodos de control plane.
- k3s: k3s es una distribución de Kubernetes ligera, ideal para entornos de prueba, laboratorios domésticos o sistemas con recursos limitados. Destaca por su instalación sencilla y por requerir menos memoria y CPU que otras distribuciones completas.
Para crear un clúster de Kubernetes robusto en Proxmox, que también pueda utilizarse en escenarios cercanos a producción, se recomienda RKE2. En cambio, si tu objetivo es configurar rápidamente un clúster pequeño para pruebas o desarrollo, k3s suele ser la alternativa más práctica. En el resto de esta guía se utilizará RKE2.
Paso 6: instalar RKE2 en el nodo maestro
Una vez completada la configuración básica de las máquinas virtuales, puedes comenzar con la instalación de RKE2 en el nodo maestro. Para ello, inicia sesión por SSH en el nodo maestro:
ssh ubuntu@192.168.1.10bashA continuación, descarga y ejecuta el script oficial de instalación de RKE2. De forma opcional, puedes especificar el canal de versión que deseas utilizar:
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_CHANNEL=v1.28 bash -bashUna vez finalizada la instalación, habilita el servicio del servidor RKE2 y arráncalo de inmediato:
sudo systemctl enable --now rke2-server.servicebashComprueba que el servicio se esté ejecutando correctamente con el siguiente comando:
sudo systemctl status rke2-serverbashPara poder administrar el clúster de Kubernetes desde tu equipo local, copia el archivo kubeconfig generado por RKE2. Primero, ajusta los permisos del archivo en el nodo maestro y, a continuación, transfiérelo a tu equipo local:
sudo chmod 644 /etc/rancher/rke2/rke2.yaml
scp ubuntu@192.168.1.10:/etc/rancher/rke2/rke2.yaml ~/rke2-kubeconfigbashDespués, adapta la dirección IP del nodo maestro en el archivo kubeconfig para que kubectl pueda conectarse correctamente al servidor de la API de Kubernetes:
sed -i 's/127.0.0.1:6443/192.168.1.10:6443/' ~/rke2-kubeconfig
export KUBECONFIG=~/rke2-kubeconfigbashSi ya tienes kubectl instalado en tu equipo local, puedes comprobar si el nodo maestro está accesible y registrado correctamente en el clúster:
kubectl get nodesbashSi el nodo maestro aparece en la salida, la instalación de RKE2 se ha completado correctamente. En el siguiente paso podrás añadir los nodos worker al clúster.
Paso 7: instalar el agente de RKE2 en los nodos worker
Una vez que el nodo maestro esté configurado correctamente, puedes integrar los nodos worker en el clúster. Para ello, debes instalar el agente de RKE2 en cada nodo worker y conectarlo al nodo maestro.
En el nodo maestro, obtén primero el token del clúster, que se utiliza para autenticar los nodos worker al unirse al clúster:
sudo cat /var/lib/rancher/rke2/server/node-tokenbashGuarda el valor del token, ya que lo necesitarás en los nodos worker.
A continuación, inicia sesión por SSH en uno de los nodos worker (repite el proceso para cada nodo):
ssh ubuntu@192.168.1.11bashDescarga el script de instalación de RKE2 e instala el agente con el siguiente comando:
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_CHANNEL=v1.28 sh -bashDespués, crea el archivo de configuración del agente e introduce la dirección del nodo maestro y el token obtenido previamente:
sudo mkdir -p /etc/rancher/rke2
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
server: https://192.168.1.10
token: <INSERTAR_TOKEN_AQUI>
EOFbashPor último, habilita e inicia el servicio del agente de RKE2:
sudo systemctl enable --now rke2-agent.servicebashRepite estos pasos en todos los nodos worker del clúster. Tras unos minutos, puedes comprobar desde el nodo maestro si los nodos se han unido correctamente:
kubectl get nodesbashSi todo ha funcionado correctamente, verás el nodo maestro y los nodos worker en el estado Ready. Con esto, el clúster de Kubernetes ya está completo y preparado para instalar plugins de red, balanceadores de carga y otros componentes esenciales.
Paso 8: instalar la CNI de red y el LoadBalancer
Una vez que los nodos maestro y worker estén configurados correctamente, necesitas una Container Network Interface (CNI) para que los pods del clúster puedan comunicarse entre sí, así como un LoadBalancer para exponer los Services en la red. En esta guía utilizamos Calico como CNI y MetalLB para la funcionalidad de balanceo de carga de capa 2.
Calico se encarga de establecer la conectividad de red entre los pods, asignar direcciones IP y, de forma opcional, aplicar políticas de red. Puedes instalarlo con el siguiente comando:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlbashA continuación, comprueba que los pods de Calico se hayan iniciado correctamente:
kubectl get pods -n kube-systembashTodos los pods deberían aparecer con el estado Running o Completed. Si alguno permanece en Pending, espera unos minutos, ya que Calico necesita tiempo para desplegar la configuración de red en todos los nodos.
Kubernetes admite de forma nativa Services del tipo LoadBalancer, pero en clústeres autoalojados, como los que se ejecutan en Proxmox, es necesario un componente adicional para asignar direcciones IP externas. Para ello se utiliza MetalLB. Instálalo con el siguiente comando:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yamlbashDespués, crea un pool de direcciones IP desde el que MetalLB pueda asignar IP a los Services de tipo LoadBalancer. Ajusta el rango de direcciones a tu red local:
cat <<EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.200-192.168.1.210
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
spec: {}
EOFbashComprueba también que los pods de MetalLB se estén ejecutando correctamente:
kubectl get pods -n metallb-systembashCuando todos los pods muestren el estado Running, la red del clúster estará lista. A partir de este momento, puedes utilizar Services de Kubernetes del tipo LoadBalancer para exponer aplicaciones directamente en la red local. Con esto, tu clúster de Kubernetes en Proxmox queda completamente configurado y preparado para desplegar aplicaciones y gestionar recursos de red.
- Nuevos GPUs NVIDIA RTX PRO 6000 Blackwell de alto rendimiento disponibles
- Rendimiento sin igual para cargas de trabajo exigentes de inteligencia artificial y análisis de datos
- Alojadas en centros de datos seguros y fiables
- Pago por uso, con precios flexibles

