Hoy en día cada vez está más extendido el uso de contenedores, y orquestación de los mismos con soluciones como Openshift o Kubernetes. Si en nuestro día a día es algo que con lo que tenemos que lidiar continuamente, o simplemente queremos trastear con algun proyecto personal, puede ser interesante tener un pequeño laboratorio en casa para testing.
Con nuestra querida RaspberryPi podemos montarnos un pequeño cluster (de momento lo vamos a dejar como standalone) que aunque no nos vaya a servir como entorno de producción, y no sea algo rápido, ni fácil, puede resultar tremendamente entretenido.
Para comenzar lo que vamos a necesitar va a ser muy sencillo:
- RaspberryPi 4 con al menos 4GB de RAM
- Tarjeta microSD de 64GB
- Adaptador de corriente de mínimo 3A para alimentar la Raspberry
- Otro equipo con el que conectaremos por ssh.
Preparación
Lo primero será preparar el S.O. de nuestra RaspberryPi. En esta ocasión vamos a utilizar Ubuntu Server.
Para ello vamos a descargar la ISO correspondiente de su web oficial y la cargamos en nuestra SD mediante Balena Etcher.
Enchufamos el adaptador de corriente y arrancamos nuestra placa. El proceso de arranque inicial suele llevar unos 5 minutos antes de que nos permita hacer login.
Accedemos a nuestra Raspberry mediante ssh, si no tenemos monitor y teclado. El login por defecto es:
- user:
ubuntu
- pass:
ubuntu
|
|
Una vez dentro, lo primero que nos va a pedir es establecer una contraseña.
Actualizamos paqueteria
|
|
Preparamos el S.O. para utilizar los cgroups. Para ello añadimos al final de la linea de arranque del fichero /boot/firmware/cmdline.txt
, lo siguiente:
|
|
Inicialmente conectamos la Raspberry por cable de red, pero podemos opcionalmente dejar configurado el Wifi como “failover”
|
|
|
|
Corregimos nuestra zona horaria
|
|
Añadimos un nombre de host
|
|
y finalmente reiniciamos
|
|
MicroK8s
A la hora de montar nuestro pequeño cluster de kubernetes, tenemos varias opciones:
- La vía oficial de kubernetes
- minikube
- Kubernetes embebido de Docker desktop
- microk8s
En nuestro caso, ya que estamos utilizando como base un sistema operativo, vamos a ir con la solucion de microk8s, ya que es desarrollada por la propia Canonical como paquete snap. Esto nos puede proporcionar más compatibilidad y simplicidad a la hora de mantenerlo al día.
Para ello, es tan simple como instalar el paquete.
|
|
La sintaxis para gestionar nuestro cluster con microk8s es: microk8s kubectl ******
. Nuestra intencion es abstraernos lo máximo posible de esta sintaxis, y simplificarlo utilizando kubectl
como un alias:
En este caso es bash pero si utilizaramos zsh habria que cambiar la ruta del fichero de aliases
|
|
añadimos permisos a nuestro usuario
|
|
Chekeamos que está running:
|
|
Añadimos algunos plugins esenciales, como el de Dashboard, Ingress Registry y DNS
|
|
Una pequeña descripción de cada uno de ellos
|
|
Verificamos que nuestros alias funcionan correctamente, y tenemos un nodo corriendo
|
|
MetalLB
Vamos a instalar el Load Balancer, utilizando la solucion de MetalLB
|
|
Nos pedira un rango de IPS reservadas para gestionar. En mi Red casera voy a reservar estas: 192.168.200.220-192.168.200.249
Vamos a lanzar un pequeño deployment para verificar que nuestro balanceador está funcionando correctamente:
|
|
Podemos verificar que se ha asignado una de las IP reservadas:
|
|
Ahora solo nos hace falta atacar la IP desde el navegador o con un simple curl
|
|
Dashboard
Para acceder a nuestro dashboard, necesitamos conocer la IP y puerto asignados al mismo:
|
|
Con esto ya podemos acceder al dashboard desde fuera de nuestra raspbery PI
https://{server ip}:{port number}
En mi caso:
|
|
Al acceder desde el navegador, nos pedirá autenticación. Necesitamos averiguar el token. Esta información la podemos obtener en la propia configuracion de microk8s
|
|
Copiamos el token y lo pegamos en la UI.
Con esto ya tendríamos nuestro cluster con un único nodo corriendo y listo para trabajar con él. Más adelante veremos como añadir más nodos a este cluster, eliminarlos, etc.