Figure 1
OpenShift est une plate-forme qui permet aux développeurs de construire, déployer, et exécuter des applications dans des conteneurs. Dans cet article, nous allons vous expliquer comment Openshift permet de faire tout ça et quels sont ses les concepts les plus importants.
Comme dit dans l’introduction, Openshift est un Paas
Qu’est qu’un PaaS
Figure 2
PaaS veut dire «Platform as a Service» qui est un modèle de cloud. Dans ce modèle, le développeur ne gère que la partie applicative, le reste c’est à dire la gestion des socles d’exécution, des middlewares, de l’OS, la partie du serveur, le stockage et le réseau, c’est Openshift qui s’en occupe, le développeur peut ainsi se concentrer sur le développement de son application. Quand le développeur demande par exemple un environnement PHP avec telle bibliothèque en telle version, c’est OpenShift qui va construire cet environnement et y faire tourner l’application. Sans le PaaS, le developpeur devrait s’occuper de tout : de la VM à l’installation de l’OS, des librairies, du stockage, etc. et c’est en cela qu’Openshift offre un moyen simple pour construire, déployer et exécuter des applications dans des conteneurs.
Les Composants d’Openshift
Figure 3
Maintenant, on va voir comment Openshift permet de construire, déployer et exécuter des applications dans des conteneurs.
La premier brique majeur d’Openshift est le moteur de conteneurs Docker.
Docker : permet de créer des conteneurs avec uniquement des applications et dépendances. les conteneurs docker permettent de faire tourner des environnements isolés les uns des autres en partageant le mème noyau. Le conteneur virtualise seulement l’environnement d’exécution comme le processeur, la mémoire vive ou les systèmes de fichiers.
Si vous voulez en savoir plus sur docker je vous conseille fortement de lire l’article what is docker?. Par contre il faut noter que comme un conteneur est fortement lié a l’OS, le conteneur n’a pas conscience de ce qui se passe en dehors cet OS et de la machine hôte et c’est la que Kubernetes intervient.
Kubernetes : est le deuxième élément important à retenir d’Openshift, ces fonctionnalités d’orchestration vont permettre de créer des services applicatifs et ceci sur plusieurs conteneurs mais aussi de planifier l’exécution des conteneurs dans un cluster et enfin de garantir leur intégrités. Au fil du temps, le développeur n’a plus qu’a demander à un environnement d’exécution qui est le conteneur et le travail de Kubernetes est de fournir cet environnement d’exécution.
Si vous voulez savoir plus sur kKubernetes je vous conseille fortement de lire cet article Kubernetes (wikipédia).
OpenShift utilise aussi :
ETCD ( DATA-STORE): qui est un composant stockant et partageant les fichiers de configuration du cluster, et en gros l’ETCD permet de fournir un registre commun pour les nœuds du cluster et leur permettre de partager les données de configuration.
RedHat a ajoute aussi des couches technique supplémentaire à son offre de PaaS, on peut citer entre autres des ressources supplémentaires stockées avec des configurations spécifiques pour OCP (Openshift Container Plateform) et un ensemble de services pour favoriser la démarche DevOps. OCP (Openshift Container Plateform) fournit une plate-forme qui favorise le DevOps dans le sens ou pour les devs, Openshift permet de déployer gérer les application a base de conteneurs ce qui permet d’accélérer le développement et le déploiement des applications.
L’Architecture OpenShift
Figure 4
Voyons maintenant l’architecture d’Openshift. L’OCP (Openshift Container Plateform) s’installe sur des machines virtuelles ou physiques sur lesquelles on va installer des nœuds. On a un master qui est la machine contrôlant les nœuds et dans un nœud, les conteneurs docker tournent au sein d’un pod. Le pod est un environnement d’exécution d’un ou de plusieurs conteneurs. Tous les conteneurs d’un pod partagent les ressources du pod, les mème adresse IP celle du pod et les mèmes ports réseaux. Le master quant a lui fait tourner les services d’orchestration et de gestion des clusters. Comme le figure 4, tous les demandes passent par le master qui s’occupe de leur transfert auprès du bon composant. Le master reçoit les commandes de la part d’une équipe DevOps et relaie ses instructions aux nœuds. ce systèmes de transfert choisi automatiquement le nœud le plus adapté pour chaque tâches, il alloue ensuite les ressources au pod désigné par ce nœud pour qu’il effectue la tache requise, et c’est la aussi qu’on trouve le datastore (ETCD) pour stocker les configurations et les états des clusters. En gros, c’est la définition de ce qui a été déployer ou ce qui est déployable sur OCP (Openshift Container Plateform).
Le master s’occupe de aussi de planifier l’exécution de de ces conteneurs dans un cluster et garantir leur intégrité au fil du temps, c’est le master qui va dire quel nœud va tourner un pod en se basent sur la disponibilité des ressources, le master gère l’utilisation des ressources sur chaque node afin de s’assurer que la charge de travail n’est pas en excés par rapport aux ressources disponible. c’est le master aussi qui ordonne ensuite à docker de lancer les conteneurs spécifies et docker qui démarre et arrête les conteneurs.
Le master gére aussi la résillence des pods par exemple, un modéle de pod a été defini dans le master comme devant étre presents en double dans un cluster, si un noeud qui héberge un des deux pods tombent, Kubernetes exécute ce pod dans un autre noeud disponible pour toujours avoir deux version de ce pod.
Pour conclure,
Openshift est basé sur les conteneurs Docker et le gestionnaire de cluster kubernetes, avec des outils centrés sur le développement et les opérations comme l’ETCD qui permettent le développement rapide d’applications, le déploiement et la gestion du cycle de vie, et ce qui le rend aussi l’un des meilleur outil de DEVOPS!
Références :
- https://en.wikipedia.org/wiki/OpenShift
- https://www.openshift.com/learn/what-is-openshift
- https://fr.wikipedia.org/wiki/Plate-forme_en_tant_que_service
- https://www.redhat.com/fr/topics/containers/what-is-docker
- https://en.wikipedia.org/wiki/Kubernetes