Ciao Techies, come sai Openshift fornisce una piattaforma container e può essere installato sia in locale che nel cloud pubblico utilizzando diversi metodi come IPI (Installer Provisioned Installer), UPI (User Provisioned Infrastructure) e Assisted Bare Metal Installer.
In questo post dimostreremo come installare Openshift 4.9 su nodi bare metal con approccio UPI.
A scopo dimostrativo, sto utilizzando macchine virtuali KVM. Di seguito sono riportati i dettagli sulla configurazione del mio laboratorio,
Totale macchine virtuali:7
Nodo Bastione:
- OS – Rocky Linux 8 / CentOS 8,
- RAM-4GB, vPCU-4,
- Disco:120 GB
- Rete:Gestione N/n – (169.144.104.228), ocp interna n/n – (192.168.110.115)
Nodo Bootstrap:
- OS:sistema operativo principale
- RAM:8 GB
- vCPU:4
- Disco:40 GB
- Rete:rete interna OCP (192.168.110.116)
Nodo del piano di controllo 1:
- OS:sistema operativo principale
- RAM:10 GB
- vCPU:6
- Disco:60 GB
- Rete:rete interna OCP (192.168.110.117)
Nodo del piano di controllo 2:
- OS:sistema operativo principale
- RAM:10 GB
- vCPU:6
- Disco:60 GB
- Rete:rete interna OCP (192.168.110.118)
Nodo del piano di controllo 3:
- OS:sistema operativo principale
- RAM:10 GB
- vCPU:6
- Disco:60 GB
- Rete:rete interna OCP (192.168.110.119)
Nodo lavoratore 1:
- OS:sistema operativo principale
- RAM:12 GB
- vCPU:8
- Disco:60 GB
- Rete:rete interna OCP (192.168.110.120)
Nodo di lavoro 2:
- OS:sistema operativo principale
- RAM:12 GB
- vCPU:8
- Disco:60 GB
- Rete:rete interna OCP (192.168.110.121)
Nota: Nell'hypervisor KVM, abbiamo creato una rete solo host per ocp-internal.
Usa il file e i comandi seguenti per creare una rete solo host in 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
Scarica il software Openshift dal portale Red Hat
a) Accedi a Red Hat Portal utilizzando il seguente URL:
https://cloud.redhat.com/openshift
b) Fai clic su Crea cluster
c) Scegli la scheda Datacenter -> Fai clic su BareMetal
d) Seleziona il tipo di installazione come "UPI" (infrastruttura fornita dall'utente)
e) Scarica quanto segue
- Programma di installazione OpenShift
- Tira il segreto
- Interfaccia della riga di comando
- RHCOS ISO
- RHCOS RAW
Passiamo ora ai passaggi di installazione di OpenShift
Passaggio 1) Prepara il nodo Bastion
Crea una macchina virtuale con le risorse sopra menzionate per bastion, puoi installare il sistema operativo Rocky Linux 8 o CentOS 8. Assegna l'indirizzo IP dalla rete interna di gestione e ocp.
Allo stesso modo, crea bootstrap, controlla le VM del piano e le VM di lavoro e collega la rete OCP (hostnet) all'interfaccia e annota il loro indirizzo mac. Quindi, nel mio caso, di seguito sono riportati gli indirizzi MAC,
- Cinturino: 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
Fase 2) Configura i servizi sul nodo bastion
Trasferisci il software Openshift scaricato, incluso il segreto nel nodo bastion nella cartella principale.
Estrai il file tar del client openshift usando il seguente comando tar,
# tar xvf openshift-client-linux.tar.gz # mv oc kubectl /usr/local/bin
Conferma l'installazione dello strumento client openshift e la sua versione eseguendo,
# oc version # kubectl version
L'output del comando precedente sarebbe simile al seguente:
Estrai il file tar del programma di installazione di Openshift,
# tar xpvf openshift-install-linux.tar.gz README.md openshift-install #
Configura zone e mascheramento (SNAT)
Nel mio nodo bastion, ho due carte lan, ens3 e ens8. Su ens3 è configurata la rete esterna o di gestione e su ens8 è configurata la rete interna ocp. Quindi, definisci le seguenti zone e abilita il masquerading su entrambe le zone.
# 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
Verifica le impostazioni della zona eseguendo i seguenti comandi firewall-cmd,
# firewall-cmd --list-all --zone=internal # firewall-cmd --list-all --zone=external
Ora configuriamo DNS, DHCP, Apache, HAProxy e NFS Service.
Nota:a scopo dimostrativo, sto utilizzando "linuxtechi.lan" come dominio di base.
Configura server DNS
Per installare il server DNS e le sue dipendenze, esegui il comando dnf
# dnf install bind bind-utils -y
Modifica /etc/named.conf e assicurati che il file abbia i seguenti contenuti,
# vi /etc/named.conf
Ora crea un file di zona avanti e indietro,
# mkdir /etc/named/zones # vi /etc/named/zones/db.linuxtechi.lan
Salva ed esci dal file.
Crea un file di zona inversa con le seguenti voci,
# vi /etc/named/zones/db.reverse
Salva e chiudi il file, quindi avvia e abilita il servizio DNS
# systemctl start named # systemctl enable named
Consenti la porta DNS nel firewall, esegui
# firewall-cmd --add-port=53/udp --zone=internal --permanent # firewall-cmd --reload
Configura il server DHCP
Installa e configura il server DHCP, associa l'indirizzo mac di bootstrap, i piani di controllo e i nodi di lavoro ai rispettivi IP. Esegui il comando seguente per installare il pacchetto DHCP,
# dnf install -y dhcp-server
Modifica il file /etc/dhcp/dhcpd.conf e aggiungi i seguenti contenuti, usa gli indirizzi mac che abbiamo raccolto nel passaggio 1 e specifica l'indirizzo IP dei nodi in base alle voci DNS. Quindi nel mio caso, il contenuto del file apparirà come di seguito,
[[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; }
Salva e chiudi il file.
Avvia il servizio DHCP e consenti il servizio DHCP per la zona interna nel firewall, esegui
[[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] ~]#
Configura server Web Apache
Abbiamo bisogno di apache per servire il file di accensione e rhcos, quindi installiamolo prima usando il comando seguente,
[[email protected] ~]# dnf install -y httpd
Cambia la porta di ascolto di apache predefinita da 80 a 8080 eseguendo sotto il comando sed
[[email protected] ~]# sed -i 's/Listen 80/Listen 0.0.0.0:8080/' /etc/httpd/conf/httpd.conf
Avvia e abilita il servizio Apache tramite il comando sottostante,
[[email protected] ~]# systemctl start httpd [[email protected] ~]# systemctl enable httpd
Consenti la porta di servizio Apache (8080) per la zona interna,
[[email protected] ~]# firewall-cmd --add-port=8080/tcp --zone=internal --permanent [[email protected] ~]# firewall-cmd --reload
Configura HAProxy
Useremo haproxy per bilanciare il carico dei servizi Openshift come ectd, ingress http e ingress https e app come openshift console.
Quindi, installiamo prima haproxy eseguendo il seguente comando dnf,
[[email protected] ~]# dnf install -y haproxy
Modifica il file haproxy e aggiungi i seguenti contenuti
[[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
salva ed esci dal file.
Avvia e abilita haproxy per apportare le modifiche precedenti all'effetto
[[email protected] ~]# setsebool -P haproxy_connect_any 1 [[email protected] ~]# systemctl start haproxy [[email protected] ~]# systemctl enable haproxy
Consenti le porte HAProxy che abbiamo definito nel suo file di configurazione nel firewall del sistema operativo. Esegui sotto i comandi,
[[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] ~]#
Configura server NFS
Abbiamo bisogno del server NFS per fornire la memoria permanente al registro di OpenShift.
Esegui il comando seguente per installare il server nfs,
[[email protected] ~]# dnf install nfs-utils -y
Crea la seguente directory e imposta le autorizzazioni richieste. Questa directory verrà esportata come condivisione NFS,
[[email protected] ~]# mkdir -p /shares/registry [[email protected] ~]# chown -R nobody:nobody /shares/registry [[email protected] ~]# chmod -R 777 /shares/registry
Ora esporta la condivisione aggiungendo la seguente riga al file /etc/exports.
[[email protected] ~]# vi /etc/exports /shares/registry 192.168.110.0/24(rw,sync,root_squash,no_subtree_check,no_wdelay)
Salva e chiudi il file ed esegui 'exportfs -rv' per esportare la directory
[[email protected] ~]# exportfs -rv exporting 192.168.110.0/24:/shares/registry [[email protected] ~]#
Avvia e abilita il servizio NFS
[[email protected] ~]# systemctl start nfs-server rpcbind nfs-mountd [[email protected] ~]# systemctl enable nfs-server rpcbind
Consenti il servizio NFS nel firewall del sistema operativo, esegui i seguenti comandi
[[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
Fase 3) Genera file manifest e Ignition
Per generare file di accensione per bootstrap, piano di controllo e nodi di lavoro, fai riferimento ai seguenti passaggi
a) Genera chiavi SSH
[[email protected] ~]# ssh-keygen
Queste chiavi ssh verranno utilizzate per accedere in remoto al bootstrap, al piano di controllo e ai nodi di lavoro.
b) Crea il file install-config.yaml con i seguenti contenuti
[[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
Nella riga 23 e 24 copia il contenuto del segreto pull e della chiave pubblica che abbiamo generato sopra.
Dopo aver apportato le modifiche, il file apparirà come di seguito:
c) Genera file manifest
Esegui il seguente comando openshift-install,
[[email protected] ~]# ~/openshift-install create manifests --dir ~/ocp-install
Il messaggio di avviso sopra dice che i nodi master sono programmabili, significa che possiamo avere carico di lavoro sui piani di controllo (i piani di controllo funzioneranno anche come nodi di lavoro). Se desideri disabilitarlo, esegui il seguente comando sed,
# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/' ~/ocp-install/manifests/cluster-scheduler-02-config.yml
Nota:nel mio caso, non lo disattivo.
d) Genera file di accensione e autenticazione
Esegui sotto il comando openshift-install,
[[email protected] ~]# ~/openshift-install create ignition-configs --dir ~/ocp-install/
Uscita,
e) Servire manifest, file di immagine del sistema operativo di accensione e di base tramite server Web
Crea la directory /var/www/html/ocp4 e copia tutti i file da '/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
Imposta i permessi richiesti sulla directory 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/
Verifica se questi file sono accessibili o meno tramite il comando curl
[[email protected] ~]# curl 192.168.110.215:8080/ocp4/
L'output dovrebbe apparire come sotto
Perfetto, ora siamo pronti per iniziare la distribuzione.
Passaggio 4) Avvia la distribuzione di OpenShift
Avvia la VM bootstrap con il file ISO rhcos-live. Avremo la seguente schermata
Quando si avvia con il file ISO, avremo la seguente schermata,
Digita il comando coreos-installer e premi invio
$ 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 volta completata l'installazione, avremo la seguente schermata,
Riavvia il nodo bootstrap in modo che questa volta si avvii con il disco rigido.
$ sudo reboot
Allo stesso modo, avvia tutti i tre nodi del piano di controllo con il file ISO RHEL Core OS (rhcos). Una volta che i nodi di controllo si avviano, esegui il comando seguente e premi invio
$ 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
Riavvia il piano di controllo e avvialo con il disco rigido.
Ripetere questa procedura per il resto dei piani di controllo e monitorare il processo di bootstrap utilizzando il comando seguente.
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
Ora, avvia entrambi i nodi di lavoro con il file ISO di Core OS e una volta avviato, esegui il seguente comando sui nodi
$ 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
Il processo di bootstrap per i piani di controllo e i nodi di lavoro può richiedere da 10 a 15 minuti a seconda dell'infrastruttura. Verifica lo stato dei nodi utilizzando i seguenti comandi
[[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] ~]#
Ora approva tutti i CSR in sospeso per i nodi di lavoro in modo che possano unirsi al cluster e diventare pronti. Esegui il seguente comando oc per visualizzare la CSR in sospeso
[[email protected] ~]# oc get csr
Esegui il seguente comando oc per approvare i CSR in sospeso
[[email protected] ~]# oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
L'output dei due comandi precedenti sarebbe simile al seguente:
Dopo un paio di minuti, i nodi di lavoro dovrebbero entrare a far parte del cluster e dovrebbero essere in stato pronto, esegui sotto i comandi per confermare lo stesso.
[[email protected] ~]# oc get nodes
Ottimo, sopra conferma che entrambi i nodi di lavoro si uniscono al cluster e sono in stato pronto.
Controlla anche lo stato del bootstrap e nell'output dovremmo ottenere quanto segue,
[[email protected] ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug
Sopra conferma che anche il processo di bootstrap è stato completato e siamo pronti a interrompere ed eliminare le risorse della VM bootstrap e le voci di bootstrap dal file haproxy.
Questo conclude l'articolo; Spero che lo trovi informativo. Si prega di condividere feedback e commenti.
Leggi anche :Come configurare il cluster OpenShift a nodo singolo su RHEL 8