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.