DevOps
Module : Déploiement et sécurité des applications
1. Modèles de Déploiement
Environnements :
Développement : codage, configuration initiale, conteneurisation
Test : vérification fonctionnelle
Préproduction (planification) : acceptation finale dans un environnement
realiste
Production : environnement réel, optimisé pour le trafic
Modèles :
Bare Metal : accès direct au matériel, haute performance (High
performance computing) | utilisé pour les infra d’hebergement des infra de
visualisation et cloud
VM (Machine virtuelle) : isolation via hyperviseur, partage les ressources
de l’hôte
DevOps 1
Conteneurs : légers, rapides, partagent les ressources de l’hote y compris
le noyau
Serverless : exécution à la demande, paiement à l’usage, pay-as-you-go
DevOps 2
2. Types d’Infrastructures
On-Premises : sur site, contrôle total, gestion complexe
Cloud Privé : contrôlé par l'organisation
DevOps 3
Cloud Public : géré par un fournisseur externe
Cloud Hybride : combinaison privé/public
DevOps 4
Cloud Edge : proche de l’utilisateur pour une reponse plus rapide, utile pour
l’IoT
DevOps 5
3. Docker : Création et Déploiement
Docker est un format qui enveloppe un certain nombre de technologies
différentes pour créer des
conteneurs. Ces technologies sont les suivantes :
• Espaces de noms - Ces espaces isolent différentes parties du conteneur en
cours d'exécution.
• Groupes de contrôle – Ces
cgroups sont un concept Linux standard qui permet au système de limiter
les ressources utilisées par une application.
• Systèmes de fichiers Union – Ces
UnionFS sont des systèmes de fichiers qui sont construits couche
par couche, combinant des ressources.
Concepts Docker :
Image = modèle
Conteneur = instance exécutable
Dockerfile = script de création d’image
Commandes clés :
docker build , docker run , docker images , docker commit , docker tag , docker push , docker
stop , docker rm , docker login,
Ports : P (aléatoire) ou p (spécifique)
docker run : crée et exécute un conteneur à partir d'une image
Exemple : docker run -d -p 8080:80 nginx
docker build : construit une image Docker à partir d’un Dockerfile
Exemple : docker build -t monimage:1.0 .
docker pull : télécharge une image depuis un registre comme Docker Hub
Exemple : docker pull ubuntu
docker push : envoie une image vers un registre distant
Exemple : docker push monuser/monimage:1.0
docker commit : crée une image à partir d’un conteneur en cours d’exécution
Exemple : docker commit monconteneur monimage:latest
DevOps 6
docker tag : donne un nom et un tag à une image existante
Exemple : docker tag monimage:latest monuser/monimage:1.0
docker ps : affiche les conteneurs en cours d'exécution
Exemple : docker ps
docker ps -a : affiche tous les conteneurs, même arrêtés
Exemple : docker ps -a
docker images : liste toutes les images locales disponibles
Exemple : docker images
docker exec : exécute une commande dans un conteneur actif
Exemple : docker exec -it monconteneur bash
docker stop : arrête un conteneur en cours d’exécution
Exemple : docker stop monconteneur
docker rm : supprime un ou plusieurs conteneurs
Exemple : docker rm monconteneur
docker rmi : supprime une ou plusieurs images
Exemple : docker rmi monimage:1.0
docker login : connecte l’utilisateur à un registre Docker
Exemple : docker login
docker logout : déconnecte l’utilisateur du registre Docker
Exemple : docker logout
d : exécute le conteneur en arrière-plan (mode détaché)
Exemple : docker run -d nginx
p : publie un port de l'hôte vers le conteneur (port_hôte:port_conteneur)
Exemple : docker run -p 8080:80 nginx
DevOps 7
P (majuscule) : publie automatiquement un port aléatoire de l'hôte vers le
port exposé du conteneur
Exemple : docker run -P nginx
-name : donne un nom personnalisé au conteneur
Exemple : docker run --name monconteneur nginx
it : combine i (mode interactif) et t (allocation de pseudo-TTY) pour une
interaction avec le terminal
Exemple : docker run -it ubuntu bash
-rm : supprime automatiquement le conteneur à la fin de son exécution
Exemple : docker run --rm ubuntu echo "Bonjour"
v : monte un volume (liens entre dossier hôte et conteneur)
Exemple : docker run -v /host/data:/app/data ubuntu
-env ou e : définit une variable d’environnement dans le conteneur
Exemple : docker run -e APP_ENV=production nginx
-network : connecte le conteneur à un réseau Docker spécifique
Exemple : docker run --network monreseau nginx
-detach (équivalent à d ) : exécute le conteneur en arrière-plan
Exemple : docker run --detach nginx
-restart : définit la politique de redémarrage automatique du conteneur
Exemple : docker run --restart=always nginx
4. CI/CD (Intégration et Déploiement Continus)
CI (Continuous Integration) :
Tests automatiques
Packaging
Détection rapide des bugs
Compilation code
DevOps 8
Tests d’integration
gestion de versions
CD (Delivery & Deployment) :
Delivery : prêt à être déployé
Deployment : déploiement automatique
Stratégies de déploiement :
Rolling Upgrade : les modifications sont régulièrement déployées de
manière à ne pas avoir d'impact sur les utilisateurs actuels, et personne ne
devrait avoir à réinstaller le logiciel.
Canary Pipeline : La nouvelle version est déployée à un sous-ensemble
d'utilisateurs. Si ces
utilisateurs rencontrent des problèmes, les modifications peuvent être
facilement annulées. Sinon seront depoloyées
Blue/Green deployment :un environnement entièrement nouveau (bleu) est
créé avec le nouveau code, mais l'ancien environnement (vert) est
conservé en réserve.
Avantages CI/CD:
Intégration avec des méthodologies agiles
MTTR (Shorter Mean Time To Resolution)
Déploiement automatisé
Libérations de fonctionnalités moins perturbatrices
DevOps 9
Amélioration de la qualité
Temps de mise sur le marché amélioré
5. Réseaux et Sécurité
Pare-feu :
Filtrage IP/ports
Jump box pour l’accès sécurisé
Équilibreur de charge : LoadBalancer
Répartition du trafic
Méthodes : Round robin, session persistante, Hash IP
DevOps 10
DevOps 11
DNS :
Traduction nom <-> IP
Reverse Proxy :
[Link]
Centralise les réponses serveur
Peut faire pare-feu ou load balancer
Chapitre 4 : Infrastructure et
automatisation
DevOps 12
1. Objectifs du Module
Comprendre les méthodes de test et déploiement dans des environnements
automatisés.
Utiliser des outils comme Ansible, Puppet, Chef.
Appliquer les concepts de DevOps, Infrastructure as Code, CI/CD,
automatisation des tests et simulation réseau.
Réaliser plusieurs TPs comme : installation d’un serveur Web avec Ansible,
sauvegarde de configurations réseau, ou test réseau avec PyATS.
2. Automatisation de l’infrastructure avec Cisco
Définition
L'automatisation utilise du code pour configurer, déployer et gérer applications
et infrastructure (réseau, stockage, calcul).
Niveaux d’automatisation (Cisco)
Walk : lecture seule, collecte d’infos, audit de configuration, Automation
Exchange pour progression de vol a pied.
Run : activation et application de politiques, libre-service réseau sécurisé.
Fly : automatisation avancée avec CI/CD, télémétrie, surveillance proactive,
gestion proactive des applications.
Raisons d’adopter l'automatisation
Réduction des erreurs humaines.
Rapidité et agilité.
Réduction des coûts d’exploitation.
Écosystèmes complexes : microservices, APIs, cloud.
Risques de dependances
Automatisation Full Stack
Avantages :
DevOps 13
Self-service: Automatisation fournit des structures en libre-service qui
permettent aux utilisateurs de demander une infrastructure à la demande.
Scalabilité dynamique: Les applications et les plateformes doivent pouvoir
évoluer vers le haut et vers le bas en fonction des besoins de trafic et de
charge de travail et utiliser une capacité hétérogène
Observabilité (inférer l’état du système).
Automated problem mitigation: les applications et les plateformes doivent
être conçues de manière à minimiser les effets des problèmes, à s'auto-
soigner et à surveiller les événements.
DevOps 14
3. DevOps et SRE (Site Reliability Engineering)
Origine
Collaboration renforcée entre Développement (Dev) et Exploitation (Ops).
SRE : introduit chez Google (2003), concepts : SLO/SLI, tolérance à l’échec.
Comparaison Dev / Ops
Concepts clés
SLA (service level agreement)
DevOps 15
SLI (service level indicator): indicateurs (e.g. taux d’erreur, latence) calculer
la conformité avec le SLO
SLO (service level objective): objectifs (e.g. 99.9% disponibilité) c’est
comme un promis que tu fais au client
⇒ So, for example, if your SLA specifies that your systems will be available
99.95% of the time, your SLO is likely 99.95% uptime and your SLI is the actual
measurement of your uptime. Maybe it’s 99.96%. Maybe 99.99%. To stay in
compliance with your SLA, the SLI will need to meet or exceed the promises
made in that document.
Budget d'erreurs : seuil d’échecs tolérés dans une période donnée
4. Scripts d’automatisation de base
Outils :
Shell/Bash : script historique, exécution simple, le bash est un shell Unix.
Python : structuration, gestion d’API, JSON, erreurs, parallélisme.
DevOps 16
Exécution locale ou distante
Méthodes :
scp + ssh pour transférer et exécuter
cat [Link] | ssh user@ip pour exécution directe
Récupération via wget / curl ou dépôt Git
Interface Web, VNC, NoMachine pour GUI
Injection via infrastructure cloud CLI
Idempotence
Capacité d’un script à être exécuté plusieurs fois sans effets secondaires :
Vérifie si l’état voulu est déjà atteint
Implémenté dans Ansible, Chef, Puppet
5. Automatisation du cloud
Capacité :
Provisionner VMs, réseaux virtuels
Déployer apps automatiquement
Scripts bash/python avec SDKs ou CLI
DevOps 17
Exemples d’outils:
6. Outils d’automatisation
Objectifs :
Simplification et standardisation
Réutilisabilité
Gestion d’inventaire, découverte
Gestion du scale
Séparation des rôles
Concepts fondamentaux
Idempotence: Un logiciel Idempotent produit le même résultat
souhaitable chaque fois qu'il est exécuté.
Procédural vs Déclaratif
Procédural : script qui décrit comment faire
Déclaratif : décrit l’état final souhaité, l’outil adapte les actions
Statelessness : pas de dépendance à l’état local (ex: base distante)
DevOps 18
Provisioning, Configuration, Déploiement, Orchestration
DevOps 19
Comparatif des outils
Ansible
Langage : YAML (fichiers .yml qui contiennent une sequence de taches)
Exécution : SSH, pas besoin d’agent
Playbook: peut être écrit comme un document monolithique avec une
série de tâches nommées et modulaires.
Les projets ansibles sont organisés dans une structure de répertoire imbriquée.
La hiérarchie est facilement placée sous contrôle de version et utilisée pour
l'infrastructure de style GITOPS en tant que code
Il existe des défis de taille pour les grandes entreprises, tels que la gestion et le
contrôle de l'accès à de nombreux nœuds Ansible de manière flexible et
sécurisée. Cela inclut également la mise en place de contrôleurs à distance en
toute transparence et en toute sécurité sous le contrôle de 'automatisation
centralisée de l'entreprise.
• Pour cela, il existe deux solutions de plan de contrôle : Red Hat Ansible Tower
et AWX projet.
Cisco Ansible:
Un très grand ensemble de modules intégrés pour configurer les structures
d'infrastructure Cisco orientée application via le contrôleur APIC
(Application Policy Infrastructure Controller).
Contrôle à distance des périphériques réseau Cisco exécutant IOS-XR, ainsi
que des modules pour l'envoi de commandes et la récupération des
résultats de ces périphériques via l'interface CLI ou via l'interface REST
standard de NETCONF.
Modules ansibles pour configurer l'infrastructure Cisco UCS via l'interface
REST Intersight.
DevOps 20
Installation :
sudo apt install ansible
Fichier d’inventaire :
[webservers]
[Link]
Exécution :
ansible-playbook -i inventory [Link] -u utilisateur -K
DevOps 21
DevOps 22
DevOps 23
Puppet
Introduit en 2005
Architecture : serveur maître + agents
Fonctionne avec DSL déclaratif
DevOps 24
Chef
Moins de 25 nœuds gratuits
Chef Workstation, Chef Infra Server
Communication via recettes, cookbooks, ressources
Caracteristiques:
Facile a apprendre
disponible en open source
Les plugins et les adaptateurs leur permettent de contrôler directement ou
indirectement de
nombreux types de ressources
DevOps 25
7. Infrastructure as Code (IaC)
GitOps
L’infrastructure est décrite et versionnée comme du code (Git)
Branches : dev, test, prod
Déploiements bleu/vert :
Deux environnements
Redirection de trafic
Possibilité de rollback rapide
Tests canaris :
Déploiement progressif par utilisateur
Réduction des risques
DevOps 26
8. Automatisation des tests
Tests unitaires (TDD)
Exemple : pytest pour Python
Intégrés au CI/CD (ex : Jenkins)
Tester les réseaux définis par logiciel (SDN)
Cisco a réalisé d'énormes progrès dans le développement de réseaux définis
par logiciel (SDN) et de middleware qui permettent aux ingénieurs d'aborder un
réseau physique en tant qu'entité programmable unique. Dans le cas de Cisco,
cela inclut :
• Infrastructure centrée sur les applications (ACI)
• Centre d'architecture de réseau numérique (Cisco DNA Center)
• L'API REST et les kits SDK permettent l'intégration avec des outils
d'automatisation comme Ansible, Puppet et Chef
pyATS & Genie (Cisco)
pyATS
Python Automated Test System (PyATS) est une solution de test et de validation
de périphériques réseau basée sur Python.
• PYATS est né comme base Python de bas niveau pour le système de test
dans son ensemble.
• Son système de bibliothèque de niveau supérieur, Génie, fournit les API et les
bibliothèques nécessaires qui pilotent et
interagissent avec les périphériques réseau, et effectuent les tests réels.
Le framework et les bibliothèques PyATS peuvent être exploités dans n'importe
quel code Python.
• Il est modulaire et comprend des composants tels que AETest et Easypy.
• Une CLI permet d'interroger rapidement les réseaux en direct, d'extraire les
faits et d'automatiser l'exécution des scripts de test et d'autres analyses
médico-légales.
• PYATS fournit une énorme bibliothèque d'interfaces à Cisco et à d'autres
DevOps 27
infrastructures via une gamme d'interfaces.
• PyATS peut consommer, analyser et implémenter des topologies décrites
dans JSON, en tant que modèles YANG et à partir d'autres sources.
• PYATS peut également être intégré avec des outils d'automatisation pour la
construction, le provisionnement et le démontage.
Commandes utiles :
Création venv :
python3 -m venv monenv
source monenv/bin/activate
Installation :
pip install pyats genie
Exemple de fichier [Link] :
devices:
csr1:
os: iosxe
type: router
connections:
cli:
protocol: ssh
ip: [Link]
Genie :
Surcouche pour pyATS
Fournit des outils pour interrogation réseau, comparaison de configs
9. Travaux Pratiques (TPs)
TP8 (obligatoire) : Automatiser l'installation d'un serveur Web avec Ansible
DevOps 28
Autres TPs :
Sauvegarde et config de périphériques avec Ansible
Tests automatisés avec pyATS et Genie
Installer CSR1000v
Conclusion
Ce module insiste sur l’importance de l’automatisation dans les
environnements modernes. Il met en avant :
L’intégration d’outils open source (Ansible, Puppet, Chef)
La structuration de l’infrastructure comme du code
L’usage d’API, tests automatisés, et d’approches DevOps/SRE
L'importance des scripts fiables, idempotents, versionnés
IMPORTANT:
LIRE LES TPs 6 ET 7 ET 9
docker + jenkins + ansible
DevOps 29