27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
FIL ROUGE DEVOPS
Introduction
L’objectif de ce TP est de faire la démonstration pratique de la plupart des éléments
techniques appris durant le cursus DevOps.
L’activité de DevOps dans une équipe est une activité de support au développement et
d’automatisation des divers éléments pratiques nécessaire au bon fonctionnement d’une
application. Elle est par nature intégrative.
Ce TP consiste donc logiquement à rassembler les aspects pratiques (éléments vus en TP)
découverts dans les modules du cursus et de les combiner autour d’une infrastrure
Kubernetes pour réaliser en particulier une CI/CD de notre application utilisant Jenkins.
Attention :
Toutes les parties ne sont pas forcément obligatoire. L’appréciation sera globale. Les
bonus sont des idées de personnalisation à réaliser si vous avez le temps et le
courage.
Ce sujet de TP est loin d’être simple :
N’hésitez pas à demander de l’aide aux formateurs.
Collaborez et partagez la compréhension des enjeux dans le groupe.
Le sujet est succeptible d’évoluer au fur et à mesure en fonction de vos retours et
demandes d’information.
Les parties de la fin du cursus (Jenkins et peut-être le Monitoring et/ou AWS et/ou
Ansible) seront ajoutées par la suite.
N’oubliez pas de vous reposer pendant les vacances !!
Rendu
[Link] 1/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
Le rendu du TP est à effectuer par groupe.
Pour chaque groupe les éléments suivant devront être présentés lors de la présentation
finale du cursus:
Une présentation décrivant les différents élements de l’infrastructure et leurs objectifs
ainsi que les choix réalisés lors de la réalisation.
On peut se servir de diapositives afin d’avoir un support oral. L’idée est de voir la
gestion du temps, l’expression orale et évidemment le côté technique. Et attention, à
la répartition de parole dans le groupe, chacun doit occuper sa place.
La qualité des diapositives est notée également.
La présentation dure 20mn, 10mn de plus de questions du jury, 5 mn de délibération
du jury sans les stagiaires et 5 mn de compte rendu au groupe de la part du jury.
Pas de rapport écrit à part les diapositives.
Objectifs
Mettre en œuvre un système d’intégration continue et de déploiement DevOps
Construire une image capable de servir à l’application
Automatiser la construction d’images
Mettre à jour et déployer automatiquement des images
Une installation fonctionnelle de l’infrastructure et de l’application du TP installé sur
cette infrastructure telle que décrite dans l’énoncé suivant.
Deux dépots de code sur Github ou Gitlab contenant pour le premier le code
d’infrastructure et pour le second l’application à déployer sur l’infrastructure.
0 - Vagrant et Virtualbox: créer une
machine virtuelle avec du code
Une infrastructure est généralement composée de machines virtuelles pour la flexibilité,
qu’elles soient louées chez un provider de cloud comme Amazon Web Service ou créées à
l’aide d’un hyperviseur comme Virtualbox (ou VMWare ou Proxmox etc).
[Link] 2/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
Dans ce TP nous allons utiliser Virtualbox pour créer un ou plusieurs serveurs (selon vos
préférences, voir bonus kubernetes installation dans la suite). Pour respecter les bonnes
pratiques de l’infrastructure as code et pouvoir partager et reproduire l’installation nous
aimerions créer ces machines virtuelles à l’aide de code descriptif. L’outil adapté pour cela
s’appelle Vagrant .
Installez Vagrant en ajoutant le dépôt ubuntu et utilisant apt (voir
[Link] pour d’autres installation):
curl -fsSL [Link] | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] [Link]
$(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vagrant
Créez un dossier pour votre code d’infrastructure par exemple tp_fil_rouge_infra
et ajoutez à l’intérieur un fichier Vagrantfile contenant le code suivant:
[Link]("2") do |config|
[Link] :virtualbox do |v|
[Link] = 2048
[Link] = 2
end
[Link] :master do |master|
# Vagrant va récupérer une machine de base ubuntu 20.04 (focal) depuis
cette plateforme [Link]
[Link] = "ubuntu/focal64"
[Link] = "master"
[Link] :private_network, ip: "[Link]"
end
end
Entrainez vous à allumer, éteindre, détruire la machine et vous y connecter en ssh en
suivant ce tutoriel: [Link]
(pensez également à utiliser vagrant --help ou vagrant <commande> --help
pour découvrir les possibilités de la ligne de commande vagrant).
Remarques pratiques sur Vagrant :
Toutes les machines vagrant ont automatiquement un utilisateur vagrant.
Vagrant partage automatiquement le dossier dans lequel est le Vagrantfile à
l’intérieur de la VM dans le dossier /vagrant . Les scripts et autres fichiers sont
[Link] 3/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
donc directement accessibles dans la VM.
1 - Application Web Python et Linux
En vous aidant du tutorial suivant (jusqu’à la partie 5, avant la partie certbot):
[Link]
gunicorn-and-nginx-on-ubuntu-20-04-fr
Installez dans la machine virtuelle Vagrant précédente une application web flask (par
exemple celle proposée dans le tutoriel).
Rassemblez les étapes d’installation dans un script shell (à ajouter dans le dossier
d’infra).
Vérifiez que votre script d’installation fonctionne en détruisant et recréant la machine
virtuelle ( vagrant destroy ) puis en lançant le script en ssh.
(facultatif) Vous pouvez même ajouter le script directement au Vagrantfile , après
la ligne [Link] :private_network, ip: "[Link]" avec la syntaxe
suivante (cf. la documentation):
[Link] :shell, privileged: false, inline: <<-SHELL
commande1
commande2
etc
SHELL
Idée de bonus
Sur votre serveur, installez/scriptez en plus de la précédente, l’application flask
microblog du Flask Mega Tutorial avec une base de donnée MySQL. Voir ce lien
tutoriel :
[Link]
on-linux
.
Personnalisez votre application Flask / Python avec une ou des pages en plus ou une
fonctionnalité en plus
2 - Git
[Link] 4/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
Versionner le code de l’application précédente avec Git. Créer un dépôt sur Github ou
Gitlab.
Un-e membre du groupe crée le dépôt et ajoute ses collègues à l’application en leur
donnant le status de maintainer .
Poussez le code avec une branche develop , une branche main (production).
Chaque membre du groupe créé une branche à son nom et s’efforce de ne plus
pousser sur develop ou main dans le futur mais en utilisant sa branche.
Le code sera ensuite mergé dans la branche develop et/ou main .
Répétez les étapes précédentes en créant un dépôt pour le code d’infrastructure.
Ces deux dépôts serviront pour la présentation finale de votre code.
Idées de bonus
Écrire à l’avance des issues (au fur et a mesure plutôt que toutes au départ) pour
décrire les prochaines étapes à réaliser.
Utilisez pour la suite du TP des branches pour les issues.
Les merger dans main sans passer par develop (les feature branches
remplacent la branche develop ) en effectuant des pull request Github ou
merge requests Gitlab.
Utilisez le wiki Github ou Gitlab du dépôt d’infrastructure pour documenter votre
infrastructure et servir de support à la présentation finale.
3 - Docker
En s’aidant du TP2 et TP4 du module Docker, et de votre script d’installation existant :
Dockeriser une application flask simple (par exemple celle de la partie précédent ou
celle du TP Docker à la place) en écrivant un Dockerfile.
(facultatif) Ajoutez un fichier [Link] . pour lancer l’application.
Ajoutez les fichiers créées à votre dépôt d’application.
Idée de bonus
[Link] 5/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
Dockeriser l’application microblog avec une base de données MySQL à mettre dans un
conteneur à part (voir le chapitre 19 du Flask Mega Tutorial et les différentes branches
du dépôt [Link]
(facultatif) Comme vu dans les TP, rajoutez une instruction HEALTHCHECK au
Dockerfile pour tester si votre app va bien.
4 - Kubernetes installation
En suivant/vous inspirant des TP kubernetes et de la partie 0.
En repartant du Vagrantfile de la partie 0 : utilisez la commande [Link]
comme indiqué dans la partie 0 ci-dessus pour installer k3s avec la commande
curl -sfL [Link] | sh - .
(facultatif) Trouvez comment supprimer l’ingress Traefik de k3s et installez à la place
un ingress nginx plus classique (pour pouvoir exposer l’application web à l’extérieur).
(facultatif) Installez cert-manager comme dans le TP avec un générateur de certificat
auto-signé : [Link]
Versionnez le Vagrantfile et les fichiers d’installation Kubernetes dans le dépôt
d’infrastructure.
Idées de bonus
Installez un repository d’image docker simple en vous aidant de tutoriels sur Internet
et de l’image registry:2, ou bien de solutions plus avancées
Créez un cluster de 3 noeuds k3s avec Vagrant et k3sup.
5 - Kubernetes déploiement de
l’application
Déployez une application flask dans le cluster en vous inspirant du TP déployer une
application de A à Z.
Versionnez les fichiers d’installation dans un dossier k8s du dépôt d’application.
Idée de bonus
[Link] 6/7
27/07/2024 11:28 Fil rouge DevOps :: Formations Uptime
Déployer en plus l’application flask avec une base de donnée externe (voir
chapitre 19 du mega tutorial). Installez MySQL à l’aide d’un chart Helm.
[Link] 7/7