Hola Techies, como saben, Openshift proporciona una plataforma de contenedores y puede instalarse en las instalaciones o en la nube pública utilizando diferentes métodos como IPI (instalador aprovisionado por el instalador), UPI (infraestructura aprovisionada por el usuario) y el instalador asistido de Bare Metal.
En esta publicación, demostraremos cómo instalar Openshift 4.9 en nodos bare metal con enfoque UPI.
Para fines de demostración, estoy usando máquinas virtuales KVM. Los siguientes son los detalles de configuración de mi laboratorio,
Total de máquinas virtuales: 7
Nodo bastión:
- Sistema operativo: Rocky Linux 8 / CentOS 8,
- RAM- 4GB, vPCU-4,
- Disco- 120 GB
- Red: Administración N/w – (169.144.104.228), ocp interno n/w – (192.168.110.115)
Nodo de arranque:
- Sistema operativo: sistema operativo central
- RAM: 8GB
- vCPU: 4
- Disco: 40GB
- Red: Red Interna OCP (192.168.110.116)
Nodo del plano de control 1:
- Sistema operativo: sistema operativo central
- RAM: 10GB
- vCPU: 6
- Disco: 60GB
- Red: Red Interna OCP (192.168.110.117)
Nodo del plano de control 2:
- Sistema operativo: sistema operativo central
- RAM: 10GB
- vCPU: 6
- Disco: 60GB
- Red: Red Interna OCP (192.168.110.118)
Nodo del plano de control 3:
- Sistema operativo: sistema operativo central
- RAM: 10GB
- vCPU: 6
- Disco: 60GB
- Red: Red Interna OCP (192.168.110.119)
Nodo trabajador 1:
- Sistema operativo: sistema operativo central
- RAM: 12GB
- vCPU: 8
- Disco: 60GB
- Red: Red Interna OCP (192.168.110.120)
Nodo trabajador 2:
- Sistema operativo: sistema operativo central
- RAM: 12GB
- vCPU: 8
- Disco: 60GB
- Red: Red Interna OCP (192.168.110.121)
Nota: En el hipervisor KVM, hemos creado una red solo de host para ocp-internal.
Use el siguiente archivo y comandos para crear una red solo de host en KVM,
$ cat hostonly.xml <network> <name>hostnet</name> <bridge name='virbr2' stp='on' delay='0'/> <ip address='192.168.110.1' netmask='255.255.255.0'> <range start='192.168.110.10' end='192.168.110.254'/> </ip> </network> $ sudo virsh net-define hostonly.xml $ virsh net-start hostnet $ virsh net-autostart hostnet $ sudo systemctl restart libvirtd
Descargue el software Openshift desde el portal de Red Hat
a) Inicie sesión en el Portal de Red Hat usando la siguiente URL:
https://cloud.redhat.com/openshift
b) Haga clic en Crear clúster
c) Elija la pestaña Centro de datos -> Haga clic en BareMetal
d) Seleccione el Tipo de instalación como ‘UPI’ (infraestructura proporcionada por el usuario)
e) Descargar lo siguiente
- Instalador de OpenShift
- tirar secreto
- Interfaz de línea de comandos
- RHCOSISO
- RHCOS CRUDO
Pasemos ahora a los pasos de instalación de OpenShift
Paso 1) Preparar el nodo bastión
Cree una máquina virtual con los recursos mencionados anteriormente para el bastión, puede instalar el sistema operativo Rocky Linux 8 o CentOS 8. Asigne la dirección IP de la red interna de administración y ocp.
Del mismo modo, cree bootstrap, control plane VM y Worker VM y conecte la red OCP (hostnet) a la interfaz y anote su dirección mac. Entonces, en mi caso, las siguientes son las direcciones MAC,
- Arranque: 52:54:00:bf:60:a3
- ocp-cp1: 52:54:00:98:49:40
- ocp-cp2: 52:54:00:fe:8a:7c
- ocp-cp3: 52:54:00:58:d3:31
- ocp-w1: 52:54:00:38:8c:dd
- ocp-w2: 52:54:00:b8:84:40
Paso 2) Configurar servicios en el nodo bastión
Transfiera el software Openshift descargado, incluido el secreto, al nodo de bastión en la carpeta raíz.
Extraiga el archivo tar del cliente openshift usando el siguiente comando tar,
# tar xvf openshift-client-linux.tar.gz # mv oc kubectl /usr/local/bin
Confirme la instalación de la herramienta de cliente openshift y su versión ejecutando,
# oc version # kubectl version
La salida del comando anterior se vería a continuación:
Extraiga el archivo tar del instalador de Openshift,
# tar xpvf openshift-install-linux.tar.gz README.md openshift-install #
Configurar zonas y enmascaramiento (SNAT)
En mi nodo bastión, tengo dos tarjetas LAN, ens3 y ens8. En ens3, se configura la red externa o de administración y en ens8, se configura la red interna ocp. Por lo tanto, defina las siguientes zonas y habilite el enmascaramiento en ambas zonas.
# nmcli connection modify ens8 connection.zone internal # nmcli connection modify ens3 connection.zone external # firewall-cmd --get-active-zones # firewall-cmd --zone=external --add-masquerade --permanent # firewall-cmd --zone=internal --add-masquerade --permanent # firewall-cmd --reload
Verifique la configuración de la zona ejecutando los siguientes comandos firewall-cmd,
# firewall-cmd --list-all --zone=internal # firewall-cmd --list-all --zone=external
Ahora configuremos el servicio DNS, DHCP, Apache, HAProxy y NFS.
Nota: Para fines de demostración, estoy usando ‘linuxtechi.lan’ como dominio base.
Configurar servidor DNS
Para instalar el servidor DNS y sus dependencias, ejecute el siguiente comando dnf
# dnf install bind bind-utils -y
Edite /etc/named.conf y asegúrese de que el archivo tenga los siguientes contenidos,
# vi /etc/named.conf
Ahora cree un archivo de zona de avance y retroceso,
# mkdir /etc/named/zones # vi /etc/named/zones/db.linuxtechi.lan
Guardar y salir del archivo.
Cree un archivo de zona inversa con las siguientes entradas,
# vi /etc/named/zones/db.reverse
Guarde y cierre el archivo y luego inicie y habilite el servicio dns
# systemctl start named # systemctl enable named
Permitir el puerto DNS en el firewall, ejecutar
# firewall-cmd --add-port=53/udp --zone=internal --permanent # firewall-cmd --reload
Configurar servidor DHCP
Instale y configure el servidor dhcp, vincule la dirección mac de bootstrap, los planos de control y los nodos de trabajo a sus respectivas IP. Ejecute el siguiente comando para instalar el paquete dhcp,
# dnf install -y dhcp-server
Edite el archivo /etc/dhcp/dhcpd.conf y agregue los siguientes contenidos, use las direcciones mac que hemos recopilado en el paso 1 y especifique la dirección IP de los nodos según las entradas de DNS. Entonces, en mi caso, el contenido del archivo se verá a continuación,
[[email protected] ~]# vi /etc/dhcp/dhcpd.conf authoritative; ddns-update-style interim; allow booting; allow bootp; allow unknown-clients; ignore client-updates; default-lease-time 14400; max-lease-time 14400; subnet 192.168.110.0 netmask 255.255.255.0 { option routers 192.168.110.215; # lan option subnet-mask 255.255.255.0; option domain-name "linuxtechi.lan"; option domain-name-servers 192.168.110.215; range 192.168.110.216 192.168.110.245; } host ocp-bootstrap { hardware ethernet 52:54:00:bf:60:a3; fixed-address 192.168.110.216; } host cp1 { hardware ethernet 52:54:00:98:49:40; fixed-address 192.168.110.217; } host cp2 { hardware ethernet 52:54:00:fe:8a:7c; fixed-address 192.168.110.218; } host cp3 { hardware ethernet 52:54:00:58:d3:31; fixed-address 192.168.110.219; } host w1 { hardware ethernet 52:54:00:38:8c:dd; fixed-address 192.168.110.220; } host w2 { hardware ethernet 52:54:00:b8:84:40; fixed-address 192.168.110.221; }
Guarde y cierre el archivo.
Inicie el servicio DHCP y permita el servicio dhcp para la zona interna en el firewall, ejecute
[[email protected] ~]# systemctl start dhcpd [[email protected] ~]# systemctl enable dhcpd [[email protected] ~]# firewall-cmd --add-service=dhcp --zone=internal --permanent success [[email protected] ~]# firewall-cmd --reload success [[email protected] ~]#
Configurar el servidor web Apache
Necesitamos apache para servir el archivo de encendido y rhcos, así que primero lo instalaremos usando el siguiente comando,
[[email protected] ~]# dnf install -y httpd
Cambie el puerto de escucha predeterminado de apache de 80 a 8080 ejecutando el comando sed
[[email protected] ~]# sed -i 's/Listen 80/Listen 0.0.0.0:8080/' /etc/httpd/conf/httpd.conf
Inicie y habilite el servicio apache a través del siguiente comando,
[[email protected] ~]# systemctl start httpd [[email protected] ~]# systemctl enable httpd
Permitir el puerto de servicio de Apache (8080) para la zona interna,
[[email protected] ~]# firewall-cmd --add-port=8080/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --reload
Configurar HAProxy
Usaremos haproxy para equilibrar la carga de los servicios de Openshift como ectd, ingreso de http e ingreso de https y aplicaciones como la consola de openshift.
Entonces, primero instalemos haproxy ejecutando el siguiente comando dnf,
[[email protected] ~]# dnf install -y haproxy
Edite el archivo haproxy y agréguele los siguientes contenidos
[[email protected] ~]# vi /etc/haproxy/haproxy.cfg # Global settings #--------------------------------------------------------------------- global maxconn 20000 log /dev/log local0 info chroot /var/lib/haproxy pidfile /var/run/haproxy.pid user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults log global mode http option httplog option dontlognull option http-server-close option redispatch option forwardfor except 127.0.0.0/8 retries 3 maxconn 20000 timeout http-request 10000ms timeout http-keep-alive 10000ms timeout check 10000ms timeout connect 40000ms timeout client 300000ms timeout server 300000ms timeout queue 50000ms # Enable HAProxy stats listen stats bind :9000 stats uri /stats stats refresh 10000ms # Kube API Server frontend k8s_api_frontend bind :6443 default_backend k8s_api_backend mode tcp backend k8s_api_backend mode tcp balance source server ocp-bootstrap 192.168.110.216:6443 check server cp1 192.168.110.217:6443 check server cp2 192.168.110.218:6443 check server cp3 192.168.110.219:6443 check # OCP Machine Config Server frontend ocp_machine_config_server_frontend mode tcp bind :22623 default_backend ocp_machine_config_server_backend backend ocp_machine_config_server_backend mode tcp balance source server ocp-bootstrap 192.168.110.216:22623 check server cp1 192.168.110.217:22623 check server cp2 192.168.110.218:22623 check server cp3 192.168.110.219:22623 check # OCP Ingress - layer 4 tcp mode for each. Ingress Controller will handle layer 7. frontend ocp_http_ingress_frontend bind :80 default_backend ocp_http_ingress_backend mode tcp backend ocp_http_ingress_backend balance source mode tcp server cp1 192.168.110.217:80 check server cp2 192.168.110.218:80 check server cp3 192.168.110.219:80 check server w1 192.168.110.220:80 check server w2 192.168.110.221:80 check frontend ocp_https_ingress_frontend bind *:443 default_backend ocp_https_ingress_backend mode tcp backend ocp_https_ingress_backend mode tcp balance source server cp1 192.168.110.217:443 check server cp2 192.168.110.218:443 check server cp3 192.168.110.219:443 check server w1 192.168.110.220:443 check server w2 192.168.110.221:443 check
Guardar y salir del archivo.
Inicie y habilite haproxy para realizar los cambios anteriores en el efecto
[[email protected] ~]# setsebool -P haproxy_connect_any 1 [[email protected] ~]# systemctl start haproxy [[email protected] ~]# systemctl enable haproxy
Permita los puertos HAProxy que hemos definido en su archivo de configuración en el firewall del sistema operativo. Ejecutar bajo los comandos,
[[email protected] ~]# firewall-cmd --add-port=6443/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-port=6443/tcp --zone=external --permanent [[email protected] ~]# firewall-cmd --add-port=22623/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=http --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=http --zone=external --permanent [[email protected] ~]# firewall-cmd --add-service=https --zone=internal --permanent [[email protected] ~]# firewall-cmd --add-service=https --zone=external --permanent [[email protected] ~]# firewall-cmd --add-port=9000/tcp --zone=external --permanent [[email protected] ~]# firewall-cmd --reload [[email protected] ~]#
Configurar servidor NFS
Necesitamos un servidor NFS para proporcionar el almacenamiento persistente al registro de OpenShift.
Ejecute el siguiente comando para instalar el servidor nfs,
[[email protected] ~]# dnf install nfs-utils -y
Cree el siguiente directorio y establezca los permisos necesarios. Este directorio se exportará como recurso compartido NFS,
[[email protected] ~]# mkdir -p /shares/registry [[email protected] ~]# chown -R nobody:nobody /shares/registry [[email protected] ~]# chmod -R 777 /shares/registry
Ahora exporte el recurso compartido agregando la siguiente línea al archivo /etc/exports.
[[email protected] ~]# vi /etc/exports /shares/registry 192.168.110.0/24(rw,sync,root_squash,no_subtree_check,no_wdelay)
Guarde y cierre el archivo y ejecute ‘exportfs -rv’ para exportar el directorio
[[email protected] ~]# exportfs -rv exporting 192.168.110.0/24:/shares/registry [[email protected] ~]#
Iniciar y habilitar el servicio NFS
[[email protected] ~]# systemctl start nfs-server rpcbind nfs-mountd [[email protected] ~]# systemctl enable nfs-server rpcbind
Permita el servicio NFS en el firewall del sistema operativo, ejecute los siguientes comandos,
[[email protected] ~]# firewall-cmd --zone=internal --add-service mountd --permanent [[email protected] ~]# firewall-cmd --zone=internal --add-service rpc-bind --permanent [[email protected] ~]# firewall-cmd --zone=internal --add-service nfs --permanent [[email protected] ~]# firewall-cmd --reload
Paso 3) Generar manifiestos y archivos de encendido
Para generar archivos de encendido para bootstrap, plano de control y nodos de trabajo, consulte los siguientes pasos
a) Generar claves SSH
[[email protected] ~]# ssh-keygen
Estas claves ssh se utilizarán para acceder de forma remota a los nodos de arranque, plano de control y trabajadores.
b) Cree el archivo install-config.yaml con los siguientes contenidos
[[email protected] ~]# vi /ocp-install/install-config.yaml apiVersion: v1 baseDomain: linuxtechi.lan #base domain name compute: - hyperthreading: Enabled name: worker replicas: 0 # Must be set to 0 for User Provisioned Installation as worker nodes will be manually deployed. controlPlane: hyperthreading: Enabled name: master replicas: 3 metadata: name: lab # Cluster name networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 networkType: OpenShiftSDN serviceNetwork: - 172.30.0.0/16 platform: none: {} fips: false pullSecret: '{"auths": ...}' # Copy the pullsecret here sshKey: "ssh-ed25519 AAAA..." # Copy ssh public key here
En las líneas 23 y 24, copie el contenido de la clave pública y secreta de extracción que generamos anteriormente.
Después de hacer los cambios, el archivo se verá como se muestra a continuación:
c) Generar archivo de manifiestos
Ejecute siguiendo el comando openshift-install,
[[email protected] ~]# ~/openshift-install create manifests --dir ~/ocp-install
El mensaje de advertencia anterior dice que los nodos maestros son programables, lo que significa que podemos tener una carga de trabajo en los planos de control (los planos de control también funcionarán como nodos de trabajo). Si desea deshabilitar esto, ejecute el siguiente comando sed,
# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/' ~/ocp-install/manifests/cluster-scheduler-02-config.yml
Nota: En mi caso, no lo estoy deshabilitando.
d) Generar archivo de encendido y autenticación
Ejecutar bajo el comando openshift-install,
[[email protected] ~]# ~/openshift-install create ignition-configs --dir ~/ocp-install/
Producción,
e) Servir manifiestos, encendido y archivo de imagen del sistema operativo central a través del servidor web
Cree el directorio /var/www/html/ocp4 y copie todos los archivos de ‘/root/ocp-install’ a ocp4.
[[email protected] ~]# mkdir /var/www/html/ocp4 [[email protected] ~]# cp -R ~/ocp-install/* /var/www/html/ocp4 [[email protected] ~]# mv ~/rhcos-metal.x86_64.raw.gz /var/www/html/ocp4/rhcos
Establezca los permisos requeridos en el directorio ocp4
[[email protected] ~]# chcon -R -t httpd_sys_content_t /var/www/html/ocp4/ [[email protected] ~]# chown -R apache: /var/www/html/ocp4/ [[email protected] ~]# chmod 755 /var/www/html/ocp4/
Verifique si estos archivos son accesibles o no a través del comando curl
[[email protected] ~]# curl 192.168.110.215:8080/ocp4/
La salida debería verse como a continuación
Perfecto, ahora estamos listos para comenzar el despliegue.
Paso 4) Iniciar la implementación de OpenShift
Inicie la máquina virtual de arranque con el archivo ISO rhcos-live. Obtendremos la siguiente pantalla
Cuando se inicie con el archivo ISO, obtendremos la siguiente pantalla,
Escriba el comando coreos-installer y presione enter
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/bootstrap.ign --insecure-ignition
Una vez finalizada la instalación nos aparecerá la siguiente pantalla,
Reinicie el nodo de arranque para que arranque con el disco duro esta vez.
$ sudo reboot
Del mismo modo, inicie todos los nodos del plano de tres controles con el archivo ISO de RHEL Core OS (rhcos). Una vez que se inicien los nodos de control, ejecute el siguiente comando y presione enter
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/master.ign --insecure-ignition
Reinicie el plano de control y arránquelo con el disco duro.
Repita este procedimiento para el resto de los planos de control y monitoree el proceso de arranque usando el siguiente comando.
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
Ahora, inicie ambos nodos de trabajo con el archivo ISO Core OS y una vez que se inicie, ejecute el siguiente comando en los nodos
$ sudo coreos-installer install /dev/sda --insecure --image-url http://192.168.110.215:8080/ocp4/rhcos --ignition-url http://192.168.110.215:8080/ocp4/worker.ign --insecure-ignition
El proceso de arranque para los planos de control y los nodos de trabajo puede demorar entre 10 y 15 minutos, según su infraestructura. Verifique el estado de los nodos usando los siguientes comandos
[[email protected] ~]# export KUBECONFIG=~/ocp-install/auth/kubeconfig [[email protected] ~]# oc get nodes NAME STATUS ROLES AGE VERSION cp1.lab.linuxtechi.lan Ready master,worker 69m v1.22.0-rc.0+894a78b cp2.lab.linuxtechi.lan Ready master,worker 66m v1.22.0-rc.0+894a78b cp3.lab.linuxtechi.lan Ready master,worker 68m v1.22.0-rc.0+894a78b [[email protected] ~]#
Ahora apruebe todos los CSR pendientes para los nodos trabajadores para que puedan unirse al clúster y estar listos. Ejecute el siguiente comando oc para ver la CSR pendiente
[[email protected] ~]# oc get csr
Ejecute el siguiente comando oc para aprobar las CSR pendientes
[[email protected] ~]# oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"n"}}{{end}}{{end}}' | xargs oc adm certificate approve
La salida de los dos comandos anteriores se vería a continuación:
Después de un par de minutos, los nodos de trabajo deberían unirse al clúster y deberían estar en estado listo, ejecute debajo de los comandos para confirmar lo mismo.
[[email protected] ~]# oc get nodes
Genial, lo anterior confirma que ambos nodos trabajadores se unen al clúster y están listos.
También verifique el estado de bootstrap y en la salida deberíamos obtener lo siguiente,
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
Lo anterior confirma que el proceso de arranque también se completó, y podemos detener y eliminar los recursos de VM de arranque y las entradas de arranque del archivo haproxy.
Esto concluye el artículo; Espero que lo hayas encontrado informativo. Por favor, comparta sus opiniones y comentarios.
Leer también : Cómo configurar un clúster de OpenShift de un solo nodo en RHEL 8