top of page

Conteneurisation Docker/Kubernetes

En premier lieu j'ai commencé par la mise en place d'un docker.

L'objectif était de transférer grafana sur docker, pour cela j'ai créé une vm sous centOS8 avec 4go de mémoire vive et 4 coeur cpu.

J'ai configuré le réseau avec "nmtui edit 'périphérique' " puis on restart le réseau "systemctl restart NetworkManager"


 

docker-réseau.PNG

Comme pour dans les autres projets il faut changer les dépôts

après cela on peut installer docker-ce dans la liste des version disponible

dockerversion.PNG

Donc après l'avoir installer: yum install docker-ce
on le lance: systemctl start docker
Et puis on peut lancer/pull grafana, ce qui va créer un conteneur contenant docker: docker run -d --name=grafana -p 3000:3000 grafana/grafana
3000 correspond au port utiliser par docker

dockerps.PNG
grafana1.PNG

Docker-compose

En second lieu j'ai installé l'outil Docker Compose pour optimiser les conteneurs dans un fichier de configuration YAML pour pouvoir lancer plusieurs service dépendant en même temps.

On créer un répertoire grafana-server dans /home, dans ce répertoire on y installe docker-compose qu'on rend exécutable.


curl -SL https://github.com/docker/compose/releases/download/v2.3.4/docker-compose-linux-x86_64 -o ./grafana-server

chmod +x /home/grafana-server/docker-compose

en cas de questionnement sur la version de docker-compose, la commande './docker-compose version marche


 

docker-compose-version.PNG

Si dans la racine il n'y a pas de fichier docker-compose.yml, il faudra le créer et le remplir car c'est le fichier qui va contenir tout les conteneurs:

touch docker-compose.yml 
vi docker-compose.yml

 

docker-compose-grafana-traefik.PNG

En premier on y voit la configuration du service traefik qui fera office de reverse proxy et en second la configuration du service grafana avec son image, son volume, ses variables d'environnements ainsi que les règles traefik.

Ensuite on doit transférer les fichiers de l'ancien grafana à celui-ci, pour cela on archive tout à la racine puis on l'envoie via sftp.

tar -cvf grafana.tar ./
get grafana.tar

sur le serveur docker-compose on le récupère, le dezip dans le volume grafana, on remonte les dossiers et on supprime l'archive

put grafana.tar
tar xvf grafana.tar /home/grafana-server/grafana-volume
cd grafana
mv * ../
rmdir grafana

 

grafana-volume.PNG

Pour ce qui est de la configuration de traefik on doit créer un fichier traefik.toml qu'il utilisera pour sa configuration puis on doit donner les droits pour utiliser le dossier volume lors du lancement de docker-compose:

/home/docker-compose/docker-volume chown -R 472:root *
472 = id de grafana

 

traefik.toml.PNG

Il ne reste plus qu'a rajouter des Healthcheck pour vérifier si les services sont toujours en cours.

pour faire un healthcheck de grafana on a vu  que si on rajoute /api/health à la suite de la page web grafana on se retrouvé sur une page avec un code 200 ok ainsi que sa version

HealthCheckgrafana.PNG

pour vérifier cela on rentre dans le conteneur docker de grafana avec son id propre

 

docker exec -it “id du conteneur” /bin/bash

ensuite dans le bash on test de wget la page

wget --spider 127.0.0.1:3000/api/health

l’option --spider permet de ne pas télécharger la page web, comme la page apparaît bien sans erreur

wget.PNG

Donc on le rajoute dans la configuration du conteneur grafana en y ajoutant des intervales de temps de test.

Kubernetes

Après cette entrée en matière en conteneurisation avec docker et docker-compose, on passe sur kubernetes qui est une solution open-source d'optimisation de déploiement, de montée en charge et de la mise en oeuvre de conteneurs d'application sur des clusters de serveurs.

Sur un serveur déjà existant dans mon répertoire racine j'ai créé trois fichiers mais avant cela on doit setup la config avec le namespace 'hugo'

kubectl api-resources  --namespaced=true pour activer le namespace
kubectl config set-context --current --namespace=hugo
puis on y crée ces trois fichiers, 
dans chaque fichier on met la configuration, service, déploiement, connexion.

le fichier de déploiement wordpress

touch wordpress.yaml

vi wordpress.yaml

le fichier de déploiement de mysql

touch mysql.yaml

vi mysql.yaml

ainsi que le fichier  du volume persistent

touch pvc.yaml

Pour mettre en place ces pods il faut les appliquer

kubectl apply -f ‘nom du fichier de déploiement.yaml’ -n ‘nom du namespace’

pour vérifier: kubectl get pod

getpod.PNG

Résultat

configuration de Kubernetes pour test de charge

En reprenant la configuration d'avant on va faire des tests de charge sur cette infrastructure.

On créer un fichier de volume persistent a la racine /root pour wordpress qui sera lié au repertoire /mnt/data

le fichier de déploiement de wordpress

touch wordpress.yaml

vi wordpress.yaml

ainsi que les fichier du password "secret" et le volume persistent pour mysql

touch mysql-secret.yaml

vi mysql-secret.yaml

touch mysql-volume.yaml et mysql-volumeclaim.yaml

puis on les remplit vi mysql-volume.yaml puis mysql-volumeclaim.yaml

Puis le déploiement de mysql

touch mysql.yaml

vi mysql.yaml

mydp.PNG

Pour ce qui est des volumes persistent on peut utiliser une autre façon qui créer automatiquement des volumes persistent.

touch pvc.yaml

vi pvc.yaml

Resultat des scénario de test

Compétences

Gérer le patrimoine informatique

  • Recenser et identifier les ressources numériques 

  • Exploiter des référentiels, normes et standards adoptés par le prestataire informatique

Mettre à disposition des utilisateurs un service informatique

  • Déployer un service

  • Accompagner les utilisateurs dans la mise en place d’un service

bottom of page