Instalación de OpenShift #
En esta entrada del blog, abordaremos todo el proceso de instalación de OpenShift. Es importante asegurarse de que todos los requisitos mencionados en las entradas anteriores de esta serie estén funcionando correctamente.
La máquina que utilizaremos para preparar todo este proceso es una con sistema operativo Debian 12, denominada “bastión”.
Binarios y recursos necesarios #
Para instalar todo lo necesario, ejecutamos el siguiente comando:
apt update && apt install wget curl cifs-utils bind9-utils vim podman rsync git nfs-common net-tools screen nmap expect jq yq
Además, necesitamos los binarios ‘openshift-install’ y ‘oc’, así como la ISO de RHCOS y el pull secret de nuestra cuenta de Red Hat. Podemos descargarlos iniciando sesión con nuestro usuario en la web de Red Hat en el siguiente enlace:
https://console.redhat.com/openshift/install/platform-agnostic/user-provisioned.
Proceso de instalación de OpenShift #
Creamos el directorio “install_ocp4”:
mkdir install_ocp4
Se crea el fichero de configuración install-config.yaml
. Podemos utilizar la plantilla que viene en la documentación oficial, o también podemos generar una con el binario openshift-install
:
openshift-install create install-config --dir=install_ocp4
Una vez generada, se modifica con nuestros datos:
apiVersion: v1
baseDomain: arpovea.com
compute:
- hyperthreading: Enabled
name: worker
replicas: 6
controlPlane:
hyperthreading: Enabled
name: master
replicas: 3
metadata:
name: ocp4
networking:
clusterNetwork:
- cidr: 172.22.0.0/16
hostPrefix: 23
networkType: OVNKubernetes
serviceNetwork:
- 172.21.0.0/16
machineNetwork:
- cidr: 10.10.10.0/24
platform:
none: {}
fips: false
pullSecret: '<valor_pullsecret>'
sshKey: 'valor_sshkey'
Como podéis ver, es una configuración muy sencilla. Especificamos lo siguiente:
- Dominio.
- Número de workers y masters.
- Nombre.
- Configuración de red:
- clusterNetwork: Especifica la red que se utilizará para los pods de nuestro clúster.
- serviceNetwork: Especifica la red que se utilizará para los servicios de nuestro clúster.
- machineNetwork: Especifica la red “física” que estan utilizando nuestros nodos.
- Lo más importante es configurar “platform” en “none” (en nuestro caso).
Vamos a crear un fichero que usaremos más adelante, el cual nos permite agregar una configuración de red híbrida:
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
name: cluster
spec:
defaultNetwork:
ovnKubernetesConfig:
gatewayConfig:
routingViaHost: true
ipsecConfig: {}
hybridOverlayConfig:
hybridClusterNetwork:
- cidr: 172.23.0.0/16
hostPrefix: 23
Esto nos permitirá en un futuro ejecutar nodos Windows para llevar a cabo tareas que requieran este sistema operativo. Aunque esto podría realizarse posteriormente, nos brinda una opción de personalización durante la instalación.
Se copia el fichero de configuración al directorio de instalación creado anteriormente:
cp install-config install_ocp4/
Se ejecuta el siguiente comando para crear todos los manifiestos según el fichero install-config.yaml
:
openshift-install --dir=install_ocp4 create manifest
El fichero cluster-network-03-config.yml
se copia al directorio “manifest”:
cp cluster-network-03-config.yml install_ocp4/manifests/
Y se ejecuta el comando para crear los “ignitions”:
openshift-install --dir=install_ocp4 create ignition-configs
Una vez tenemos los ficheros ignitions necesitamos una forma de que las máquinas RHCOS puedan obtener estos ficheros para la instalación, por lo que montaremos un servidor web con apache para compartir los ingnitions en esta máquina “bastion”.
Una vez que dispongamos de los archivos “ignitions”, será necesaria una forma para que las máquinas RHCOS puedan obtener estos ficheros durante la instalación. Para ello, configuraremos un servidor web con Apache en la máquina “bastión”, que se encargará de compartir los archivos “ignitions” así las máquinas RHCOS tienen acceso a los “ignitions” correspondientes para completar la instalación de OpenShift.
Instalación de Apache:
sudo apt update && sudo apt install apache2
Creación de directorios y permisos para alojar los ignitions:
sudo mkdir -p /var/www/html/ignitions
sudo chown -R www-data:www-data /var/www/html/ignitions
sudo chmod -R 755 /var/www/html/ignitions
Configuración del sitio web para los “ignitions”, editamos el siguiente fichero:
sudo nano /etc/apache2/sites-available/ignitions.conf
Con el siguiente contenido:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/ignitions
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/ignitions>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Activamos el sitio y reiniciamos el servidor Apache para aplicar la configuración:
sudo a2ensite ignitions.conf
sudo systemctl restart apache2
Luego movemos los ficheros “ignitions” al directorio correspondiente para compartirlos con el servidor web y asignamos los permisos necesarios.
cp bootstrap.ign master.ign worker.ign /var/www/html/ignitions/
chown -R www-data: /var/www/html/ignitions/
Ahora que los ficheros ignitions están accesibles desde un servidor web, podemos continuar con la instalación de OpenShift.
A partir de este punto, es necesario arrancar las máquinas para que se autoconfiguren mediante DHCP. Una vez que obtengan su IP y nombre, hay que acceder a ellas y ejecutar los comandos de instalación según el tipo de nodo (bootstrap, master y/o worker). Para el comando coreos-installer
se requiere sudo
.
- Bootstrap:
Conectamos a la máquina bootstrap y ejecutamos el comando para iniciar el proceso de instalación (normalmente desde Proxmox):
sudo coreos-installer intall --ignition-url=http/10.10.10.2/ignitions/bootstrap.ign /dev/sda --insecure-ignition
Este comando es muy configurable, y se le pueden agregar varios parámetros útiles. Por ejemplo, si hemos realizado una configuración de red más específica para varias interfaces (LACP, VLANs, etc.), podemos utilizar el siguiente parámetro:
--copy-network
Este parámetro respeta la configuración que tenga establecida la máquina y la agrega a la configuración en OpenShift.
Para ver las opciones, podemos consultar la siguiente documentación:
Documentación de “coreos-installer”
--insecure-ignition
para no tener que especificar el SHA512 de los ficheros, ya que es un entorno controlado y no hay problema de seguridad.
Para comprobar el estado de la instalación de “bootstrap”, podemos ejecutar el siguiente comando en nuestra máquina “bastion”:
openshift-install --dir=install_ocp4 wait-for bootstrap-complete --log-level debug
Una vez que el comando anterior nos lo indique, podemos proceder con los master.
- Masters:
Conectamos a las máquinas “masters” y ejecutamos el comando para iniciar el proceso de instalación (normalmente desde Proxmox):
sudo coreos-installer intall --ignition-url=http/10.10.10.2/ignitions/master.ign /dev/sda --insecure-ignition
- Workers:
Conectamos a las máquinas “workers” y ejecutamos el comando para iniciar el proceso de instalación (normalmente desde Proxmox):
sudo coreos-installer intall --ignition-url=http/10.10.10.2/ignitions/worker.ign /dev/sda --insecure-ignition
Podemos comprobar el estado de la instalación completa lanzando el siguiente comando desde la máquina “bastion”:
openshift-install --dir=install_ocp4 wait-for install-complete --log-level debug
Además, es necesario aprobar los “CSR” de los nodos para que estos formen parte del clúster de OpenShift (generalmente es necesario aprobar dos por nodo). Puedes utilizar el fichero kubeconfig del directorio ‘auth’ y los siguientes comandos para ello:
export KUBECONFIG=install_ocp4/auth/kubeconfig
oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | xargs oc adm certificate approve
Una vez aprobados los “CSR” y desplegados correctamente todos los componentes en los nodos, la instalación habrá finalizado. Puedes verificar el estado de los “cluster operators” con:
oc get co
Podemos comprobar el balanceador (ha-proxy) para ver cómo los nodos se van levantando en nuestro balanceo. Esto también sirve para detectar cualquier problema en el balanceo o la red.
Si necesitas realizar cualquier depuración a nivel de nodos, puedes acceder a través de “SSH”. Debes utilizar la clave “SSH” generada anteriormente, por ejemplo:
ssh -i .ssh/id_ed25519 core@ocpmaster1.arpovea.com
Si todo ha salido correctamente, ¡enhorabuena!, ya tenemos disponible nuestro clúster de OpenShift.