Avant la sortie d'OpenShift 4.5.1, il était possible d'installer un cluster sur la plate-forme vSphere uniquement dans la version UPI (User Provider Infrastructure). L'utilisateur devait préparer indépendamment l'infrastructure nécessaire à l'installation, à savoir préparer:
- des équilibreurs de réseau externes (l'un pour l'équilibrage du trafic du cluster, l'autre pour l'équilibrage du trafic des applications);
- un certain nombre d'enregistrements DNS, y compris l'enregistrement SRV;
- Serveur DHCP pour délivrer des adresses aux nœuds du cluster (enfin, ou décider d'une méthode pour définir l'adressage statique);
- Serveur HTTP pour le transfert de la configuration d'ingnition lors de l'installation de RHCOS.
Dans le même temps, toute erreur (et comme vous le savez - "errare humanum est") dans la préparation de l'environnement conduit à un échec lors de l'installation du cluster. Pour faciliter en quelque sorte cette tâche, des projets tiers ont commencé à apparaître pour accélérer la préparation de l'environnement et réduire l'influence du «facteur humain» dans ce processus. L'un des plus connus est le projet OCP Helper Node , qui prépare toute la configuration nécessaire à l'installation d'OpenShift sur un serveur via Ansible. Il y avait également des options pour installer un cluster avec la préparation de l'infrastructure via Terraform.
Mais ces projets n'ont pas résolu tous les problèmes liés au déploiement d'un cluster dans vSphere. Il est souvent nécessaire de fournir un cluster OpenShift en tant que service («kubernetes as service»), et dans ce cas, l'automatisation de l'installation d'OpenShift n'a pas été une tâche facile - une intervention manuelle était nécessaire: respect de l'ordre d'installation du système d'exploitation sur les nœuds du cluster, confirmation des certificats dans le cluster, attente de l'installation des opérateurs de cluster, et etc. Si nécessaire, vous pouvez automatiser ce processus, mais cela prend également du temps et des ressources pour créer et maintenir de telles solutions.
Depuis la version 4.5.1. publié le 13 juillet 2020, OpenShift prend en charge l'installation dans vSphere à l'aide d'IPI (Installer Provided Infrastructure). Cela signifie que le programme d'installation peut désormais:
- préparer indépendamment toutes les ressources nécessaires dans vSphere;
- créer un cluster OpenShift avec une seule commande;
- supprimez le cluster OpenShift précédemment créé avec une commande.
De plus, après une telle installation, l'administrateur peut ajouter ou supprimer des nœuds de cluster avec une commande dans OpenShift. Ou activez complètement l'autoscaling, ce qui donne au cluster la possibilité de répondre indépendamment aux changements de charge.
Mais la nouvelle méthode d'installation a une limitation: tous les nœuds de cluster, ainsi que le serveur à partir duquel l'installation est effectuée, doivent avoir un accès direct à Internet. Si l'administrateur se trouve derrière un serveur proxy d'entreprise ou si Internet n'est pas disponible pour le cluster, le cluster devra être installé comme auparavant, dans la version UPI.
Préparer l'infrastructure environnante
Lors de l'installation d'OpenShift, vous ne pouvez pas vous passer de préparer l'infrastructure, mais la liste des tâches est devenue plus modeste:
- Un serveur DHCP est nécessaire (pour émettre des adresses aux nœuds OpenShift);
- Deux enregistrements DNS sont requis (VIP pour l'API du cluster et VIP pour le trafic Ingress);
- Vous aurez besoin d'un compte dans vSphere avec un ensemble de privilèges décrits dans la documentation pour installer OpenShift .
Dans notre cas, pour installer OpenShift et exécuter tous les services requis, nous avons utilisé le serveur shift-is01 exécutant CentOS 7.
Configuration DHCPD
Il n'y a rien de spécifique ici, nous sélectionnons le pool d'adresses (192.168.111.100 -192.168.111.150) pour les serveurs OpenShift:
[ocp@shift-is01 ~]$ sudo cat /etc/dhcp/dhcpd.conf
authoritative;
ddns-update-style interim;
default-lease-time 14400;
max-lease-time 14400;
option routers 192.168.111.1;
option broadcast-address 192.168.111.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.111.10;
option domain-name «ocp45.demo.local»;
subnet 192.168.111.0 netmask 255.255.255.0 {
interface ens192;
pool {
range 192.168.111.100 192.168.111.150;
# this is PXE specific
filename «pxelinux.0»;
next-server 192.168.111.10;
}
}
Configuration DNS
Pour notre cluster, la zone ocp45.demo.local a été créée et les enregistrements A et PTR pour la plage DHCP ont été créés. Créez les entrées OpenShift requises pour l'API et Ingress:
Un morceau de la zone BIND ocp45.demo.local:
api IN A 192.168.111.190
*.apps IN A 192.168.111.191
Après cela, nous téléchargeons les certificats depuis notre vCenter et les installons comme approuvés sur notre serveur.
Installez les certificats vCenter:
[ocp@shift-is01 ~]$ mkdir certs; cd certs; curl -kO https://vc01.demo.local/certs/download.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5795 100 5795 0 0 15500 0 --:--:-- --:--:-- --:--:-- 15536
[ocp@shift-is01 certs]$ unzip ./download.zip
Archive: ./download.zip
inflating: certs/lin/e01a85a3.r1
inflating: certs/mac/e01a85a3.r1
inflating: certs/win/e01a85a3.r1.crl
inflating: certs/lin/e01a85a3.0
inflating: certs/mac/e01a85a3.0
inflating: certs/win/e01a85a3.0.crt
[ocp@shift-is01 certs]$ sudo cp ./certs/lin/e01a85a3.* /etc/pki/ca-trust/source/anchors
[ocp@shift-is01 certs]$ sudo update-ca-trust extract
Installation d'un cluster OpenShift
La procédure d'installation elle-même est désormais aussi simple que possible:
- obtenir le programme d'installation et les clés (Pull Secret) sur le site Web de Red Hat ;
- préparer un fichier yaml avec install-config.yaml avec la configuration de cluster prévue;
- installez le cluster.
Nous obtenons l'installateur et les clés
Téléchargez le programme d'installation et PullSecret depuis RedHat, cette procédure est décrite dans le Guide d'installation . Dans notre exemple, tous les binaires nécessaires au travail se trouvent dans le répertoire bin du répertoire personnel de l'utilisateur ocp.
[ocp@shift-is01 bin]$ ll
total 499036
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 kubectl
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 oc
-rwxr-xr-x 1 ocp ocp 353804288 Jul 16 11:53 openshift-install
-rw-r--r-- 1 ocp ocp 954 Jul 16 11:53 README.md
Préparation de install-config.yaml
[ocp@shift-is01 ~]$ cat ./install-config.yaml
apiVersion: v1
baseDomain: demo.local
compute:
- hyperthreading: Enabled
architecture: amd64
name: worker
replicas: 3
platform:
vsphere:
cpus: 2
coresPerSocket: 1
memoryMB: 8192
osDisk:
diskSizeGB: 120
controlPlane:
hyperthreading: Enabled
architecture: amd64
name: master
replicas: 3
platform:
vsphere:
cpus: 4
coresPerSocket: 1
memoryMB: 16384
osDisk:
diskSizeGB: 120
metadata:
name: ocp45
networking:
networkType: OpenShiftSDN
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
vcenter: _vCenter
username: __vCenter
password: _
datacenter: _Datacenter
defaultDatastore: _Datastre
network: _Network
cluster: _Cluster
apiVIP: 192.168.111.190
ingressVIP: 192.168.111.191
fips: false
pullSecret: '_PullSecret'
sshKey: '_SSH_Public_Key'
Lors de la préparation de ce fichier avec la future configuration du cluster, il y a trois choses à noter.
Tout d'abord, le cluster se souviendra de la configuration des nœuds de travail définis dans install-config. Et tous les nœuds suivants que vous créerez lors de la mise à l'échelle du cluster auront exactement la même configuration. Par conséquent, il est nécessaire de déterminer immédiatement la configuration optimale du nœud de travail.
Deuxièmement, il est souhaitable que l'adressage interne du cluster (réseau de cluster et réseau de service) ne soit pas interféré avec votre adressage interne. Sinon, il est possible que le POD à l'intérieur du cluster ne puisse pas ouvrir une connexion à des ressources externes (par exemple, accéder à une base de données externe).
Troisièmement, le nom du cluster (champ de métadonnées) doit correspondre à votre domaine pour ce cluster. Dans notre cas, le nom du cluster est ocp45 et ses adresses se trouvent dans le domaine ocp45.demo.local.
Vous pouvez également préparer install-config.yaml via le programme d'installation openshift-install, mais vous ne pourrez alors pas déterminer la configuration du nœud de travail et l'adressage interne. Dans tous les cas, il est logique de créer install-config.yaml via le programme d'installation, puis de le réparer.
Installation du cluster
La procédure même d'installation d'un cluster n'a pas fondamentalement changé. Après le démarrage du programme d'installation:
- le programme d'installation crée un nœud d'amorçage avec des ressources pour initialiser le nœud maître;
- l'installateur crée trois nœuds maîtres;
- le nœud d'amorçage et trois nœuds maîtres forment un plan de contrôle de cluster;
- le programme d'installation désactive et supprime le nœud d'amorçage;
- Le plan de contrôle déploie les nœuds de calcul et configure les services de cluster nécessaires.
Processus de configuration du cluster.
Nous commençons l'installation du cluster et attendons. Le processus d'installation prend généralement 30 à 40 minutes:
Installation de cluster
[ocp@shift-is01 ~]$ mkdir ocp45; cp ./install-config.yaml ./ocp45
[ocp@shift-is01 ~]$ ./bin/openshift-install create cluster --dir=ocp45 --log-level=info
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.5/45.82.202007062333-0/x86_64/rhcos-45.82.202007062333-0-vmware.x86_64.ova?sha256=4189881eadb0b0cfd85c2f2ab1c32f6a320b71713cac3bd4179dba746ad4070a'
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp45.demo.local:6443...
INFO API v1.18.3+8b0a82f up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.ocp45.demo.local:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp45.demo.local
INFO Login to the console with user: «kubeadmin», and password: «xxxxxxxxxxxxxxx»
INFO Time elapsed: 41m56s
Problèmes de démarrage RHCOS
Si la connexion Internet est lente, l'installation peut ne pas fonctionner: le programme d'installation n'attendra pas le chargement de l'image RHCOS. Vous pouvez télécharger l'image RHCOS à l'avance à partir du lien affiché par le programme d'installation. Le fichier résultant doit être placé dans le répertoire ~ / .cache / openshift-installer / image_cache avec le nom 5dad1f50634794b0e1ff8a830cad4b98 et redémarrer l'installation. Cette fois, openshift-install le prendra du système de fichiers:
INFO The file was found in cache: /home/ocp/.cache/openshift-installer/image_cache/5dad1f50634794b0e1ff8a830cad4b98. Reusing...
c'est tout, le cluster est prêt:
[ocp@shift-is01 ~]$ export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 33m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 15m v1.18.3+6025c28
Mise à l'échelle et suppression d'un cluster OpenShift
Les avantages de la nouvelle méthode ne sont pas seulement que l'installation est désormais plus facile et nécessite moins d'efforts de préparation. Un cluster OpenShift installé dans vSphere via IPI perçoit vShpere comme une plate-forme cloud à part entière et peut tirer parti de ses avantages «d'élasticité».
Désormais, un cluster sur la plate-forme vSphere (comme les grandes plates-formes cloud comme Amazon AWS ou Google GCP) dispose d'un ensemble de machines qui est automatiquement généré par le programme d'installation:
OpenShift machineset
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 3 3 3 3 50m
Cela vous permet de réduire la mise à l'échelle du cluster à l'exécution d'une seule commande. OpenShift créera indépendamment un nœud et l'ajoutera au cluster ou le supprimera.
Ajout d'un nœud à un cluster
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=4 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 4 4 3 3 61m
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 75m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 9m27s v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 57m v1.18.3+6025c28
Suppression d'un nœud d'un cluster
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=3 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 97m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 98m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 98m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 32m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 79m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 79m v1.18.3+6025c28
La capacité du cluster à auto-créer et supprimer des nœuds peut être utilisée pour configurer la mise à l'échelle automatique d'un cluster OpenShfit .
En général, avec l'installation de vSphere IPI, toute la gestion de la plate-forme d'orchestration de conteneurs OpenShift est transférée du côté de kubernetes:
- la création et la suppression des ressources pour le cluster sont gérées par l'administrateur OpenShift via la machine;
- la configuration des paramètres OS sur les nœuds du cluster est également gérée par l'administrateur OpenShift via macheneconfig.
Cela correspond bien à l'approche d'administration zéro déclarée de RedHat pour l'infrastructure sous-jacente du cluster.
En plus d'automatiser la création de clusters, le nouveau programme d'installation peut les supprimer lui-même. «Sous le capot» du programme d'installation de Terraform et dans le répertoire contenant les fichiers de configuration d'installation, le fichier d'état de Terraform (terraform.tfstate) reste. Cela vous permet de supprimer un cluster précédemment créé sans craindre de "toucher" accidentellement les ressources d'autres personnes:
[ocp@shift-is01 ~]$./bin/openshift-install destroy cluster --dir=ocp45 --log-level=info
Si vous créez et supprimez constamment des clusters, par exemple pour des tests ou des environnements d'apprentissage, cette fonctionnalité permet également d'automatiser ce processus et d'éviter d'éventuelles erreurs humaines dans le processus.
Conclusion
L'installation d'OpenShift sur VMware vSphere est l'option d'installation la plus courante. Et la capacité d'OpenShift à fonctionner avec vSphere en tant que plate-forme cloud, apparue dans la version 4.5.1, simplifie considérablement son administration, en fournissant une solution clé en main pour automatiser les processus du cycle de vie depuis la création, la mise à l'échelle et la suppression de la plate-forme.
Désormais, l'approche Infrastructure as Code pour servir des solutions sur site basées sur Red Hat OpenShift et VMware vSphere devient beaucoup plus abordable à mettre en œuvre.
Auteur: Sergey Artemov, architecte du département DevOps Solutions , Jet Infosystems
PS Rejoignez la communauté Telegram DevSecOps Talks .