By Lionel Gurret.
Grâce à la plateforme Openshift (OCP), des milliers d’entreprises permettent à leurs développeurs de construire, déployer, et exécuter des applications dans des conteneurs.
Cette plateforme propose en outre des fonctionnalités poussées comme :
Cette plateforme peut être hébergée aussi bien sur un cloud privé (on-premise) que sur un cloud public.
Il est possible d’installer Openshift de deux façons différentes :
Dans ce blog post, nous allons dans un premier temps détailler les différentes étapes relatives au processus d’installation d’Openshift dans un contexte UPI. Ensuite, nous listerons les prérequis nécessaires et les configurations associées pour installer Openshift sur AWS avec Terraform (IaC.) Les spécificités propres au cloud public AWS seront abordées.
L’installation UPI va se baser sur des fichiers ignitions (amorçages en français).
Ces fichiers ignitions seront utilisés par les instances EC2 (master et worker nodes) pour configurer au démarrage le système d’exploitation RH CoreOS.
Afin de générer ces fichiers ignitions, il faudra fournir à l’installeur OCP, la configuration de notre cluster via un fichier install-config.yaml. L’installeur va ensuite générer dans un premier temps les manifests puis les fichiers ignitions.
Nous hébergerons ces fichiers dans un bucket S3 et nos instances utiliseront ces fichiers pour procéder à leurs configurations. Une instance supplémentaire de boostrap sera également à provisionner pour lancer le processus d’installation et de configuration du cluster.
Certes, il n’est pas nécessaire de comprendre le processus en détails pour administrer un cluster Openshift. Cependant, cela peut être utile dans le cas où vous devriez debugger un problème lors de l’installation.
Le processus peut être divisé en 5 étapes.
Dans un premier temps, les fichiers ignitions générés par l’installeur OCP vont être récupérés par la machine de bootstrap. Un ETCD dédié va être provisionné. Il sera notamment utilisé pour stocker la configuration du cluster
Ensuite, les master nodes vont récupérer leurs configurations et la machine de boostrap va déployer un control plane temporaire sur le port 22623.
Via ce control plane temporaire, un cluster ETCD sera provisionné sur les 3 masters nodes et un control plane de production sera accessible sur le port 6443.
A partir de ce stade, le serveur de bootstrap devient inutile et pourra être supprimé après la fin de l’installation. La suppression étant automatique dans le cas d’une installation IPI.
Pour terminer, les workers nodes sont configurés et le cluster OCP installé.
Ici, un exemple d’architecture possible pour notre cluster OCP sur le cloud AWS.
Nous pouvons observer :
Pour provisionner ces ressources, l’utilisation de Terraformpeut être judicieuse afin de rester dans un contexte d’IaC.
Il est intéressant de provisionner dans un premier temps l’infrastructure AWS à l’exception des noeuds du cluster. Dans un second temps, nos instances EC2 workers et masters, une fois que toutes les entrées DNS sont provisionnées.
Afin de provisionner notre infrastructure, certaines considérations sont à prendre en compte.
Pour commencer, le type d’instance EC2 doit répondre à certains prérequis hardware :
Ensuite, il est important de noter que les AMI sont dépendantes de la région AWS utilisée :
En outre, les prérequis suivants seront nécessaires :
Afin de lancer la création des fichiers ignitions, la création de l’infrastructure et du cluster OCP, les prérequis suivants seront à remplir sur votre environnement de travail :
Sur votre laptop, créer un fichier install-config.yaml dans un dossier spécifique (exemple : installation_dir) depuis le template suivant fourni par la documentation Openshift :
apiVersion: v1
baseDomain: example.com
credentialsMode: Mint
controlPlane:
hyperthreading: Enabled
name: master
platform:
aws:
zones:
- us-west-2a
- us-west-2b
rootVolume:
iops: 4000
size: 500
type: io1
type: m5.xlarge
replicas: 3
compute:
- hyperthreading: Enabled
name: worker
platform:
aws:
rootVolume:
iops: 2000
size: 500
type: io1
type: c5.4xlarge
zones:
- us-west-2c
replicas: 3
metadata:
name: test-cluster
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineNetwork:
- cidr: 10.0.0.0/16
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
aws:
region: us-west-2
userTags:
adminContact: jdoe
costCenter: 7536
amiID: ami-96c6f8f7
serviceEndpoints:
- name: ec2
url: https://vpce-id.ec2.us-west-2.vpce.amazonaws.com
fips: false
sshKey: ssh-ed25519 AAAA...
pullSecret: '{"auths": ...}'
Modifier et compléter ce fichier suivant la configuration désirée puis lancer la commande :
openshift-install create manifests --dir=installation_dir/
Vous constaterez que votre fichier install-config.yml a été remplacé par des manifests Openshift.
Ensuite, lancer la commande suivante pour créer les ignitions files :
openshift-install ignition-configs --dir=installation_dir/
Votre dossier d’installation doit à présent contenir les fichiers suivants :
Ce fichier metadata.json contient des informations importantes pour votre infrastructure.
En effet, le clusterID et l’infraID doivent notamment être utilisés pour tagger vos ressources pour le bon déroulement de l’installation.
Le code Terraform ne sera pas abordé en détails dans ce blog post mais voici les principaux points clefs :
Une fois vos fichiers ignitions hébergés sur le bucket S3 et la préparation des vos manifests Terraform réalisée, vous pouvez lancer le provisionnement de l’infrastructure puis du cluster avec Terrraform (terraform plan, terraform apply).
Pour suivre l’installation de votre cluster, se connecter sur le serveur bastion puis sur le serveur bootstrap et lancer la commande suivante :
journalctl --unit=bootkube.service
Cette documentation vous permettra de debugger facilement tout problème éventuel.
L’installation terminée, il reste cependant deux étapes pour accéder à votre cluster de manière sécurisée.
oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"n"}}{{end}}{{end}}' | xargs oc adm certificate approve
watch oc get nodes
oc create configmap custom-ca
--from-file=ca-bundle.crt=/home/ec2-user/certificates/mycluster/mycluster.crt
-n openshift-config
oc get configmap custom-ca -n openshift-config -oyaml
oc create secret tls certificate
--cert=/home/ec2-user/certificates/mycluster/mycluster.crt
--key=/home/ec2-user/certificates/mycluster/mycluster.key
-n openshift-ingress
oc patch ingresscontroller.operator default
--type=merge -p
'{"spec":{"defaultCertificate": {"name": "certificate"}}}'
-n openshift-ingress-operator
watch oc -n openshift-ingress get pods
Vous devriez à présent pouvoir joindre votre console et vous connecter avec le compte kubeadmin !