Recientemente me topé con K8sQuest. Se trata de una plataforma de aprendizaje gamificada, donde vamos a familiarizarnos con Kubernetes a través de diferentes misiones, donde algo se se romperá… y nos tocará diagnosticarlo y solucionarlo. Se ejecuta completamente en local, utilizando Kind (Kubernetes in Docker/Podman) para levantar bajo el capó el cluster con el que vamos a interactuar.
Al correr el instalador, él mismo trata de instalar el cluster con Kind, pero al utilizar en mi equipo Podman en modo rootless (sin privilegios de root), me topé de frente con un muro en forma de error:
|
|
En este post vamos a ver por qué ocurre esto, cómo solucionarlo, y unas pequeñas indicaciones sobre cómo empezar a jugar con K8sQuest en nuestro entorno Linux.
El problema: Systemd y la delegación de Cgroups
Cuando usamos Kind con Podman rootless, el sistema intenta crear contenedores que actúan como “nodos” de nuestro clúster de Kubernetes. Estos nodos necesitan gestionar sus propios límites de CPU y memoria utilizando cgroups v2.
Por defecto, y por motivos de seguridad, systemd bloquea que un usuario normal delegue estos controles. Aunque la documentación oficial recomienda modificar los ficheros de configuración de systemd o usar systemctl --user, muchas veces estas soluciones fallan silenciosamente o simplemente no son las más sencillas.
La solución
En lugar de pelearnos con la configuración global de nuestra sesión o reiniciar servicios a lo loco, la forma más efectiva que me ha funcionado es inyectar el permiso directamente en el momento de la ejecución del propio instalador.
Para ello, vamos a envolver nuestro script de instalación con systemd-run. Esta herramienta nos permite lanzar un proceso creándole un “scope” (un entorno efímero) donde le pasamos exactamente la propiedad que necesita: Delegate=yes.
Nos situamos en el directorio del repositorio clonado de K8sQuest y lanzamos la instalación así:
|
|
Al ejecutarlo, verás un mensaje fugaz indicando que se está ejecutando como una unidad de systemd (ej. Running as unit: run-XXXX.scope), y a continuación la instalación continuará sin problemas hasta el final, creando el clúster correctamente, y todas las dependencias necesarias de K8sQuest.
|
|
Empezando a jugar con K8sQuest
Una vez que el instalador ha terminado, ya tenemos nuestro clúster operativo y corriendo en Podman de forma totalmente transparente y sin comprometer la seguridad de nuestro sistema usando la cuenta root.
Para empezar a trabajar con él, los pasos habituales son:
Verificar el clúster
Podemos asegurarnos de que el clúster de Kind se ha levantado correctamente comprobando los nodos (recuerda que si usas Podman, quizás tengas que exportar la variable KUBECONFIG si el instalador te lo ha indicado):
|
|
Se debería ver el nodo o nodos de K8sQuest en estado Ready.
|
|
Arrancar el juego
Para iniciar el juego, tan solo tenemos que abrir una terminal en el directorio donde clonamos los archivos de K8sQuest y ejecutar:
|
|

Al aceptar, comenzará nuestra primera misión: “Fix the Crashing Pod”


Nos hace una serie de indicaciones muy importantes para poder jugar:
- Debemos abrir una nueva ventana/pestaña de terminal, desde donde “jugaremos” realmente.
- Utilizaremos el comando
kubectlpara aplicar las soluciones. - Volveremos a esta pestaña para verificar la solución.
Limpiar el cluster de K8sQuest
Como todo el clúster está contenido dentro de nuestro entorno de usuario de Podman, se puede gestionar cómodamente. Si en algún momento necesitamos parar el clúster para liberar recursos de la máquina, se puede hacer usando el CLI de Kind indicando el proveedor experimental:
|
|
Con todo esto, ya tenemos un entorno de Kubernetes funcional, ligero y seguro en nuestro Linux para seguir trasteando y aprendiendo con K8sQuest. ¡Nos vemos en el próximo post!

PD: La imagen del banner de este post ha sido generada con IA.