Installation de Openshift 4.9 sur Bare Metal (UPI)

Hello les techos, comme vous le savez, Openshift fournit une plate-forme de conteneurs et peut être installée on prem ou dans un cloud public en utilisant différentes méthodes telles que l’IPI (Installer Provisioned Installer), l’UPI (User Provisioned Infrastructure) et l’installateur Bare Metal assisté.

Dans cet article, nous montrerons comment installer Openshift 4.9 sur des machines bare metal avec l’approche UPI.

À des fins de démonstration, j’utilise des machines virtuelles KVM. Voici les détails de la configuration de ma démo,
Nombre total de machines virtuelles : 7

Machine Bastion:

  • OS – Rocky Linux 8 / CentOS 8,
  • RAM- 4GB, vPCU-4,
  • Disque- 120 GB
  • Réseau: Gestion N/w – (169.144.104.228), Réseau interne OCP n/w – (192.168.110.115)

Machine de démarrage:

  • OS : Core OS
  • RAM : 8GB
  • vCPU: 4
  • Disque: 40 GB
  • Réseau: Réseau interne OCP (192.168.110.116)

Machine Controle Plane 1:

  • OS : Core OS
  • RAM : 10GB
  • vCPU: 6
  • Disque: 60 GB
  • Réseau: réseau interne OCP (192.168.110.117)

Machine Controle Plane 2:

  • OS : Core OS
  • RAM : 10GB
  • vCPU: 6
  • Disque: 60 GB
  • Réseau: réseau interne OCP (192.168.110.118)

Machine Controle Plane 3:

  • OS : Core OS
  • RAM : 10GB
  • vCPU: 6
  • Disk: 60 GB
  • Réseau: réseau interne OCP (192.168.110.119)

Machine Worker 1:

  • OS : Core OS
  • RAM : 12GB
  • vCPU: 8
  • Disque: 60 GB
  • Réseau: réseaun interne OCP (192.168.110.120)

Machine Worker 2:

  • OS : Core OS
  • RAM : 12GB
  • vCPU: 8
  • Disque: 60 GB
  • Réseau: réseau interne OCP (192.168.110.121)

Remarque : Dans l’hyperviseur KVM, nous avons créé un réseau host only pour l’ocp-internal.

Utilisez le fichier et les commandes suivantes pour créer un réseau host only dans 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

Téléchargez le logiciel Openshift depuis le portail Red Hat

a) Connectez-vous au portail Red Hat en utilisant l’URL suivante :

https://cloud.redhat.com/openshift

b) Cliquez sur Créer un cluster

c) Choisissez l’onglet Datacenter -> Cliquez sur BareMetal

d) Sélectionnez le type d’installation comme «UPI» (infrastructure fournie par l’utilisateur).

e) Téléchargez les éléments suivants

  • OpenShift Installer
  • Pull Secret
  • Command Line Interface
  • RHCOS ISO
  • RHCOS RAW

Passons maintenant aux étapes d’installation d’OpenShift

Etape 1: Préparer la machine Bastion

Créez une machine virtuelle avec les ressources mentionnées ci-dessus pour le bastion, vous pouvez installer le système d’exploitation Rocky Linux 8 ou CentOS 8. Attribuez l’adresse IP pour la gestion et du réseau interne ocp.

De même, créez des machines virtuelles pour l’amorçage, les controle plane et les workers, et attachez le réseau OCP (hostnet) à l’interface et notez leur adresse MAC. Donc, dans mon cas, voici les adresses MAC,

  • Bootstrap:  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

Etape 2: Configurer les services sur la machine Bastion

Transférez le logiciel Openshift téléchargé, y compris le secret, vers le nœud bastion sous le dossier racine.

Extrayez le fichier client openshift tar à l’aide de la commande tar suivante,

# tar xvf openshift-client-linux.tar.gz
# mv oc kubectl /usr/local/bin

Confirmez l’installation de l’outil client openshift et sa version en exécutant

# oc version
# kubectl version

Extraire le fichier tar du programme d’installation d’Openshift

# tar xpvf openshift-install-linux.tar.gz
README.md
openshift-install
#

Configurer les zones et le masquage (SNAT)

Dans ma machine bastion, j’ai deux cartes réseau LAN: ens3 et ens8. Sur ens3 , le réseau externe ou de gestion est configuré et sur ens8, le réseau interne ocp est configuré. Définissez donc les zones suivantes et activez le masquage sur les deux zones.

# 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

Vérifiez les paramètres de la zone en exécutant les commandes firewall-cmd suivantes

# firewall-cmd --list-all --zone=internal
# firewall-cmd --list-all --zone=external

Configurons maintenant les services DNS, DHCP, Apache, HAProxy et NFS.

Remarque : à des fins de démonstration, j’utilise « linuxtechi.lan » comme domaine de base.

Configuration du serveur DNS

Pour installer le serveur DNS et ses dépendances, exécutez la commande dnf suivante

# dnf install bind bind-utils -y

Modifiez /etc/named.conf et assurez-vous que le fichier a le contenu suivant

vi /etc/named.conf

Maintenant creer le fichier forward et le reverse de zone

# mkdir /etc/named/zones
# vi /etc/named/zones/db.linuxtechi.lan

Enregistrez et quittez le fichier.

Créez un fichier de zone inversée avec les entrées suivantes,

# vi /etc/named/zones/db.reverse

Enregistrez et fermez le fichier, puis démarrez et activez le service DNS

# systemctl start named
# systemctl enable named

Autorisez le port DNS dans le pare-feu, exécutez

# firewall-cmd --add-port=53/udp --zone=internal --permanent
# firewall-cmd --reload

Configuration d’un serveur DHCP

Installez et configurez le serveur DHCP, liez l’adresse MAC du bootstrap, des plans de contrôle et des nœuds de travail à leurs adresses IP respectives. Exécutez la commande ci-dessous pour installer le package DHCP

# dnf install -y dhcp-server

Modifiez le fichier /etc/dhcp/dhcpd.conf et ajoutez le contenu suivant, utilisez les adresses MAC que nous avons collectées à l’étape 1 et spécifiez l’adresse IP des nœuds en fonction des entrées DNS. Donc dans mon cas, le contenu du fichier ressemblera à ci-dessous :

[root@ocp-svc ~]# 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;
}

Enregistrez et fermez le fichier.

Démarrez le service DHCP et autorisez le service DHCP pour la zone interne du pare-feu, exécutez

[root@ocp-svc ~]# systemctl start dhcpd
[root@ocp-svc ~]# systemctl enable dhcpd
[root@ocp-svc ~]# firewall-cmd --add-service=dhcp --zone=internal --permanent
success
[root@ocp-svc ~]# firewall-cmd --reload
success
[root@ocp-svc ~]#

Configuration du serveur Apache

Nous avons besoin d’Apache pour servir les fichiers d’allumage et rhcos, alors installons-le d’abord à l’aide de la commande ci-dessous

[root@ocp-svc ~]# dnf install -y  httpd

Modifiez le port d’écoute Apache par défaut de 80 à 8080 en exécutant la commande sed

[root@ocp-svc ~]# sed -i 's/Listen 80/Listen 0.0.0.0:8080/' /etc/httpd/conf/httpd.conf

Démarrez et activez le service Apache via la commande ci-dessous

[root@ocp-svc ~]# systemctl start httpd
[root@ocp-svc ~]# systemctl enable httpd

Autoriser le port du service Apache (8080) pour la zone interne,

[root@ocp-svc ~]# firewall-cmd --add-port=8080/tcp --zone=internal --permanent
[root@ocp-svc ~]# firewall-cmd --reload

Configuration du HAProxy

Nous utiliserons haproxy pour équilibrer la charge des services Openshift comme ectd, ingress http & ingress https et des applications comme la console openshift.

Alors, installons d’abord haproxy en exécutant la commande dnf suivante

[root@ocp-svc ~]#  dnf install -y haproxy

Modifiez le fichier haproxy et ajoutez-y le contenu suivant

[root@ocp-svc ~]# 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

Enregistrez et quittez le fichier.

Démarrez et activez haproxy pour activer les modifications ci-dessus

[root@ocp-svc ~]# setsebool -P haproxy_connect_any 1
[root@ocp-svc ~]# systemctl start haproxy
[root@ocp-svc ~]# systemctl enable haproxy

Autorisez les ports HAProxy que nous avons définis dans son fichier de configuration dans le pare-feu du système d’exploitation. Exécuter sous les commandes

[root@ocp-svc ~]# firewall-cmd --add-port=6443/tcp --zone=internal --permanent
[root@ocp-svc ~]# firewall-cmd --add-port=6443/tcp --zone=external --permanent
[root@ocp-svc ~]# firewall-cmd --add-port=22623/tcp --zone=internal --permanent
[root@ocp-svc ~]# firewall-cmd --add-service=http --zone=internal --permanent
[root@ocp-svc ~]# firewall-cmd --add-service=http --zone=external --permanent
[root@ocp-svc ~]# firewall-cmd --add-service=https --zone=internal --permanent
[root@ocp-svc ~]# firewall-cmd --add-service=https --zone=external --permanent
[root@ocp-svc ~]# firewall-cmd --add-port=9000/tcp --zone=external --permanent
[root@ocp-svc ~]# firewall-cmd --reload
[root@ocp-svc ~]#

Configuration du serveur NFS

Nous avons besoin d’un serveur NFS pour fournir le stockage persistant au registre OpenShift.

Exécutez la commande suivante pour installer le serveur nfs

[root@ocp-svc ~]# dnf install nfs-utils -y

Créez le répertoire suivant et définissez les autorisations requises. Ce répertoire sera exporté en partage NFS

[root@ocp-svc ~]# mkdir -p /shares/registry
[root@ocp-svc ~]# chown -R nobody:nobody /shares/registry
[root@ocp-svc ~]# chmod -R 777 /shares/registry

Exportez maintenant le partage en ajoutant la ligne suivante au fichier /etc/exports.

[root@ocp-svc ~]# vi /etc/exports
/shares/registry  192.168.110.0/24(rw,sync,root_squash,no_subtree_check,no_wdelay)

Enregistrez et fermez le fichier et exécutez « exportfs -rv » pour exporter le répertoire

[root@ocp-svc ~]# exportfs -rv
exporting 192.168.110.0/24:/shares/registry
[root@ocp-svc ~]#

Démarrer et activer le service NFS

[root@ocp-svc ~]# systemctl start nfs-server rpcbind nfs-mountd
[root@ocp-svc ~]# systemctl enable nfs-server rpcbind

Autorisez le service NFS dans le pare-feu du système d’exploitation, exécutez les commandes suivantes

[root@ocp-svc ~]# firewall-cmd --zone=internal --add-service mountd --permanent
[root@ocp-svc ~]# firewall-cmd --zone=internal --add-service rpc-bind --permanent
[root@ocp-svc ~]# firewall-cmd --zone=internal --add-service nfs --permanent
[root@ocp-svc ~]# firewall-cmd --reload

Etape 3: Génération des manifests et fichiers de demarrage

Pour générer des fichiers d’allumage pour le bootstrap, le plan de contrôle et les nœuds de travail, reportez-vous aux étapes suivantes

a) Générer des clés SSH

[root@ocp-svc ~]# ssh-keygen

Ces clés ssh seront utilisées pour accéder à distance au bootstrap, au plan de contrôle et aux nœuds de travail.

b) Créez le fichier install-config.yaml avec le contenu suivant

[root@ocp-svc ~]# 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

Aux lignes 23 et 24, copiez le contenu du secret d’extraction et de la clé publique que nous avons générés ci-dessus.

Après avoir effectué les modifications, le fichier est comme ci-dessous :

c) Générer un fichier manifeste

Exécutez la commande openshift-install suivante

[root@ocp-svc ~]# ~/openshift-install create manifests --dir ~/ocp-install

Le message d’avertissement ci-dessus indique que les nœuds maîtres sont planifiables, cela signifie que nous pouvons avoir une charge de travail sur les plans de contrôle (les plans de contrôle fonctionneront également comme nœuds de travail). Si vous souhaitez désactiver cela, exécutez la commande sed suivante

# sed -i 's/mastersSchedulable: true/mastersSchedulable: false/' ~/ocp-install/manifests/cluster-scheduler-02-config.yml

Remarque : dans mon cas, je ne le désactive pas.

d) Générer le fichier de demarrage et d’authentification

Exécuter la commande openshift-install

[root@ocp-svc ~]# ~/openshift-install create ignition-configs --dir ~/ocp-install/
Sortie:

e) Servir les manifestes, ficher de demarrage et celui de l’image de l’ OS core via le serveur Web

Créez le répertoire /var/www/html/ocp4 et copiez tous les fichiers de « /root/ocp-install » vers ocp4.

[root@ocp-svc ~]# mkdir /var/www/html/ocp4
[root@ocp-svc ~]# cp -R ~/ocp-install/* /var/www/html/ocp4
[root@ocp-svc ~]# mv ~/rhcos-metal.x86_64.raw.gz /var/www/html/ocp4/rhcos

Définir les autorisations requises sur le répertoire ocp4

[root@ocp-svc ~]# chcon -R -t httpd_sys_content_t /var/www/html/ocp4/
[root@ocp-svc ~]# chown -R apache: /var/www/html/ocp4/
[root@ocp-svc ~]# chmod 755 /var/www/html/ocp4/

Vérifiez si ces fichiers sont accessibles ou non via la commande curl

[root@ocp-svc ~]# curl 192.168.110.215:8080/ocp4/

Le résultat devrait ressembler à ci-dessous:

Parfait, nous sommes maintenant prêts à commencer le déploiement.

Etape 4: Déploiement Openshift

Démarrez la VM d’amorçage avec le fichier ISO rhcos-live. Nous obtiendrons l’écran suivant

Lorsqu’il démarre avec le fichier ISO, nous obtiendrons l’écran suivant

Tapez la commande coreos-installer et appuyez sur Entrée

$ 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

Une fois l’installation terminée, nous obtiendrons l’écran suivant

Redémarrez le nœud d’amorçage pour qu’il démarre cette fois avec le disque dur.

$ sudo reboot

De même, démarrez tous les nœuds des trois plans de contrôle avec le fichier ISO RHEL Core OS (rhcos). Une fois les nœuds de contrôle démarrés, exécutez la commande suivante et appuyez sur Entrée

$ 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

Redémarrez le plan de contrôle et démarrez-le avec le disque dur.

Répétez cette procédure pour le reste des plans de contrôle et surveillez le processus d’amorçage à l’aide de la commande suivante.

[root@ocp-svc ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug

Maintenant, démarrez les deux nœuds de travail avec le fichier ISO Core OS et une fois qu'il démarre, exécutez la commande suivante sur les nœuds.
$ 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

Le processus d’amorçage pour les plans de contrôle et les nœuds de travail peut prendre 10 à 15 minutes en fonction de votre infrastructure. Vérifiez l’état des nœuds à l’aide des commandes suivantes

[root@ocp-svc ~]# export KUBECONFIG=~/ocp-install/auth/kubeconfig
[root@ocp-svc ~]# 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
[root@ocp-svc ~]#

Approuvez maintenant toutes les CSR en attente pour les nœuds de travail afin qu’ils puissent rejoindre le cluster et être prêts. Exécutez la commande oc suivante pour afficher le CSR en attente

[root@ocp-svc ~]# oc get csr

Exécutez la commande oc suivante pour approuver les CSR en attente

[root@ocp-svc ~]# oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve

La sortie des deux commandes ci-dessus ressemblerait à ci-dessous :

Après quelques minutes, les nœuds de travail devraient rejoindre le cluster et devraient être dans un état prêt, exécutez sous les commandes pour confirmer la même chose.

[root@ocp-svc ~]# oc get nodes

Très bien, ci-dessus confirme que les deux nœuds de travail rejoignent le cluster et sont dans un état prêt.

Vérifiez également l’état du bootstrap et dans la sortie, nous devrions obtenir ce qui suit :

[root@ocp-svc ~]# ~/openshift-install --dir ~/ocp-install wait-for bootstrap-complete --log-level=debug

Ce qui précède confirme que le processus d’amorçage est également terminé et que nous sommes prêts à arrêter et à supprimer les ressources de la machine virtuelle d’amorçage et les entrées d’amorçage du fichier haproxy.

Ceci conclut l’article ; J’espère que vous le trouverez instructif.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *