Clúster Microk8s en LXD

La Instalación de un clúster con 6 nodos en LXD para pruebas de servicios de un SOC me llevó más tiempo de lo esperado y despues de resolver varios (y estresantes problemas) por fin pude conseguir un clúster funcional usando Microk8s. Aquí los pasos:
Requisitos previos
- Es necesario tener LXD instalado en el equipo host en mi caso usé la versión que viene en Snap ya que contiene una interfaz web para facilitar la administración de los contenedores. la instalación de LXD dependerá de la distribución Linux que se esté usando, la guia de instalación de la interfaz web se encuentra aquí.
- Como minimo se necesita 8GB de Ram para un clúster de 3 nodos si se requiere más nodos el sistema podría ponerse inestable.
Instalación de Rocky Linux en LXD
Una vez instalado LXD se instalará el nodo maestro (master) donde se realizará todas las configuraciones necesarias y posteriormente se creará los otros nodos a partir de este contenedor.
- Primero se debe descargar el perfil especial creado para correr Microk8s en LXD, existen dos versiones de este perfil, dependiendo el sistema de archivos que tenga nuestra instalación de Linux en el host para EXT4 usar este y para ZFS usar este
- Agregar este perfil (en este ejemplo para EXT4) a un proyecto de LXD en la sección “Profiles” para este clúster se creó el proyecto kubeTest como se muestra en la imagen:
- Una vez agregado el perfil procedemos a crear el contenedor con Rocky Linux en la sección “Instances” y presionando el boton “Create Instance” las siguientes imagenes muestran este proceso:
Siguiendo estos pasos ya deberíamos tener Rocky Linux instalado en LXD.
Agregar un usuario no root, instalar Open SSH y nfs-utils en el contenedor
Es importante agregar un usuario no root para administrar Microk8s:
|
|
Instalación de SNAP y Microk8s en el contenedor
- Para SNAP seguir los pasos descritos en snapcraft
- Para la instalación de Microk8s escribimos los siguientes comandos como root:
- Deshabilitar setenforce:
|
|
- Instalar Microk8s y agregar al usuario node al grupo Microk8s:
|
|
- Como usuario node se debe crear la carpeta .kube, configurar permisos, agregar alias al .bashrc y crear la carpeta .ssh:
|
|
- Si es necesario agregar una clave publica al archivo .ssh/authorized_keys
- Verificamos el estado de Microk8s:
|
|
Creación de un snapshot
- En la sección Snapshots del nodo master crearemos un snapshot que se usará para crear los otros nodos del clúster previamenete debemos apagar el contenedor:
Creando nodos del clúster
- En una terminal del host copiamos el Snapshot:
|
|
En este paso podemos crear todos los nodos que necesitemos pero como minimo deben ser 3.
Agregando los nodos al clúster
- Hasta este punto la sección “Instances” debe mostrar todos los contenedores LXD:
- En la terminal del nodo Master como usuario node escribimos el comando:
|
|
- La ejecución de este comando genera una clave unica. Esta clave debe ejecutarse en un único nodo. Por lo tanto, se deben generar diferentes claves para cada nodo.
- Ejecutamos el siguiente comando en el nodo master para verificar el estado del clúster:
|
|
y deberíamos tener una lista de todos los nodos que conforman el clúster
Desde este punto solo queda desplegar servicios eso se verá en los siguientes posts.