En este artículo vamos a explicar el proceso para el despliegue de un cluster productivo de OKD sobre un virtualizador de KVM en el cual no disponemos de cloud-init por lo que el proceso de despliegue se hace siguiendo la documentación como si lo desplegasemos sobre un entorno de baremetal, de hecho este mismo artículo serviría si queremos hacer el despliegue sobre un entorno baremetal.
Denominamos este cluster como productivo, ya que vamos a hacer un despliegue de un total de 5 nodos de Fedora CoreOS, de los cuales 3 servidores van a corresponderse con nodos master y 2 de ellos serán los denominados nodos worker, para entender mejor este despliegue, os dejo una imagen con un esquema de los componentes con sus IPs de tal forma que si a lo largo del artículo no se entiende alguno de los elementos se pueda revisar la imagen para entenderlo mejor.
Para comenzar, debemos conocer los requisitos para el despliegue de un cluster de este estilo. En primer lugar, vamos a necesitar de un DNS privado que resuelva dominios con una definición estándar, así como sus registros inversos, importante el paso de la resolución inversa de los dominios, ya que si esto no se produce, te encontrarás un entorno que parece que despliega, pero que realmente se queda bloqueado por ciertos operadores de cluster y nunca termina de desplegarse por completo.
Si disponemos de un servidor DNS configurado con bind puedes directamente usar ese, si no tienes ningún servidor DNS privado y quieres instalar uno rápidamente te recomiendo crear una máquina virtual/servidor ligero e instalar pi-hole cuyo software nos proporciona la posibilidad de crear los registros necesarios para un cluster de OKD, en la imagen a continuación podéis ver como se definen estos registros (muy importante conservar los nombres DNS tal cual indica la documentación {master0, master1, worker0, worker1,…}.{cluster_name}.{dominio})
El segundo requisito es la necesidad de un balanceador de carga externo al propio cluster, si no dispones de ninguno la propia documentación te recomienda usar haproxy, por lo que para este despliegue vamos a hacer uso de este software.
Siguiendo con las recomendaciones de la documentación creamos el cluster creando el fichero de configuración del haproxy (/etc/haproxy/haproxy.cfg) como sigue.
|
|
A continuación será necesario volver a la máquina de pi-hole para añadir un elemento, la resolución mediante wildcard de todas las apps que se vayan a desplegar en el cluster, para esta tarea debemos añadir en el directorio /etc/dnsmasq.d y agreguemos un fichero 02-cluster-okd.conf con la línea:
|
|
En donde le indiquemos que apps.nombrecluster.dominio resuelva la dirección ip del haproxy
Una vez dispongamos de estos dos elementos esenciales, podremos comenzar con la creación del cluster, esto significa que debemos conocer primero un poco sobre como funciona CoreOS, básicamente se trata de un sistema operativo de carácter inmutable y cuya finalidad es buscar la estabilidad de la máquina o instancia, se intenta que el sistema operativo tenga la mayor parte posible de directorios en modo solo lectura de cara a evitar posibles puntos de fallo al modificar ficheros del sistema, para realizar una instalación sobre este tipo de sistemas operativos necesitamos generar los denominados ficheros ignition que se pasan en el arranque de la máquina y se ejecutan en el initramfs, de esta forma se aseguran que las modificaciones quedan hechas para todos los reinicios y se evita la modificación posterior de elementos del sistema.
Para crear estos ficheros ignition la comunidad de OKD (y Red Hat) nos proporciona una serie de binarios, los cuales permiten crear y modificar estos ficheros ignition, este tipo de instalación que vamos a realizar es la denominada como UPI (User Provided Infrastructure) en la cual intentamos no depender o lo que es lo mismo abstraernos en todo lo posible de instaladores que realicen todo el trabajo sobre nuestros equipos sin tener el conocimiento de realmente que es lo que están haciendo.
Por lo que descargamos el binario de OKD que nos permite generar los ficheros de configuración. En nuestro caso estamos usando openshift-install-linux-4.14.0-0.okd-2023-11-14-101924.tar.gz estos ficheros se pueden obtener del enlace https://github.com/okd-project/okd/releases también tenemos que descargar el fichero client para nuestra plataforma, siempre usando la misma versión.
|
|
Una vez tengamos la estructura de carpetas creada, añadimos el fichero install-config.yaml (muy importante que la extensión sea yaml, no yml) con contenido tal que así.
|
|
Una vez tengamos definido esto, tan solo tendremos eu ejecutar:
|
|
Esto nos genera una serie de ficheros yml que podemos editar y configurar a nuestro gusto por si necesitamos hacer una instalación más personalizada, si no es nuestro caso, tan solo tendremos que asegurarnos que el fichero ${cluster_name}/manifests/cluster-scheduler-02-config.yml tiene el parámetro mastersSchedulable: false, ya que estamos realizando un despliegue de 5 nodos.
Y con el mismo binario ejecutamos la creación de los ficheros ignition ./openshift-install create ignition-configs –dir ${cluster_name}
Para poder usar estos ficheros necesitamos que se encuentren en un servidor HTTP/HTTPS, en nuestra caso no disponemos de ninguno, por lo que vamos a usar la máquina virtual en la que hemos instalado el haproxy para instalar un servicio web en un puerto alternativo de uso temporal. Nos conectamos via ssh a la máquina e instalamos un servidor nginx y lo levantamos en el puerto 1080 (el 80 está siendo usado por el propio balanceador)
|
|
Lo siguiente es conseguir la ISO que vamos a utilizar para la creación del cluster y para ello podemos obtener los enlaces con el siguiente comando:
|
|
En nuestro caso lo descargamos en el Proxmox y lo ponemos como iso de arranque para cada máquina que vamos a desplegar.
Una vez tengamos nuestros nodos preparados procederemos con la instalación de los nodos, arranca el servidor con la ISO y en el menudo pulsa TAB y luego añade:
ip=192.168.6.20::192.168.5.1:255.255.255.0::ens18:none nameserver=192.168.6.15
Ten en cuenta que la interfaz puede ser otra distinta en función si estás usando una máquina virtual o una máquina física, si no sabes el nombre de la interfaz puedes arrancar sin nada escrito y revisarlo antes de comenzar el procedimiento, es importante que las ips encajen con los DNS por ello es importante o bien fijarlas mediante DHCP (si las fijas mediante DHCP no necesitarías este paso) o bien definirlas durante el arranque como una ip estática (y para esto usamos la línea indicando los datos de red en el arranque)
Una vez el sistema arranque procedemos a la instalación en el disco.
|
|
Fijándonos el comando es importante observar que se le indica la ruta del fichero ignition que vamos a utilizar (bootstrap.ign, master.ign o worker.ign) así como el dispositivo de almacenamiento donde se instalará. También le indicamos que conserve la configuración de red que definimos en el paso anterior (opción -n), así como los parámetros insecure, ya que no hemos añadido certificado SSL a nuestro servidor nginx.
Una vez termine apagamos la máquina, retiramos la ISO de instalación y la encendemos.
Esperaremos a que el nodo bootstrap termine de arrancar correctamente antes de proceder a repetir los pasos para los demás nodos.
Repetiremos este paso para cada uno de los nodos de nuestro cluster, tanto para los master como para los worker.
Para saber el estado en el que se encuentra la instalación podemos utilizar el comando:
|
|
Una vez todos los componentes se encuentren en Ready tendrás el cluster de OKD instalado.
Por cierto mencionar que el consumo de recursos para el despliegue de un OKD productivo básico es bastante elevado.