Formation Architecture DevOps complète et moderne par la pratiqueGit, GitLab, Jenkins, SonarQube, Docker, Kubernetes, Ansible, Nexus, ElasticStack, Certificats, File de message, Cloud
L’évolution des architectures logicielles et des outils a été marquée par des changements nets dans la façon de développer, déployer et maintenir des applications durant tout leur cycle de vie (installation, mise à jour, évolution, etc.). Le développement logiciel est entré dans une phase d’industrialisation et les outils « DevOps » permettent aujourd’hui aux développeurs de travailler au sein d’une véritable usine logicielle.
Ce cursus Architecture DevOps complète et moderne par la pratique présente sous un angle pratique la complémentarité de ces outils et des différents services standards - utilisés en mode Cloud ou non - qui sont offerts aujourd’hui aux développeurs, qu’ils construisent une architecture simple ou plus complexe (file de messages, micro-services, etc.) en respectant des contraintes de sécurité et de scalabilité réalistes comme on en rencontre dans les projets professionnels.
L’approche pédagogique est progressive en présentant clairement en quoi chaque outil ou service proposé apporte un confort supplémentaire au développeur et vient s’intégrer dans un écosystème devenu très riche, notamment avec l’offre Cloud.
Ce cursus est composé de plusieurs modules de formation. Seules les dates du premier module apparaissent sur le site.
Savoir déployer et maintenir une application en production avec les outils DevOps modernes.
Objectifs pédagogiques :
À l'issue de cette formation Architecture DevOps Complète, vous aurez acquis les connaissances et compétences nécessaires pour :
Comprendre la problématique d’industrialisation des déploiements et du provisionnement d’infrastructures ainsi que le vocabulaire associé (devops, build, intégration/livraison et déploiement continu, monitoring, scalabilité, …)
Connaître les distinctions entre les solutions de Cloud, la virtualisation et la containerisation
Gérer les sources d’un projet avec Git
Construire un logiciel (build, dépôt, nexus, …)
Mettre en œuvre un pipeline CI/CD avec GitLab pour simplifier la mise à jour de son application
Intégrer les tests dans le déploiement (Unitaire/intégration, Fonctionnels, Sécurité, Qualité)
Créer et gérer des conteneurs Docker
Virtualiser et gérer la configuration (vagrant, terraform, chef, puppet, …)
Orchestrer ses conteneurs avec Kubernetes
Intégrer GitLab et Kubernetes
Adapter les ressources de ses applications (scalabilité)
Savoir utiliser ElasticStack pour surveiller ses applications
Comprendre les architectures modernes (micro services, API Rest, file de messages avec Kafka, etc.) et comment elles sont mises en œuvre concrètement
Utiliser des solutions Cloud pour disposer d’une infrastructure sécurisée (IaaS, firewall, certificats TLS/SSL, …)
Déployer son application dans des conteneurs sur le Cloud au sein d’un cluster Kubernetes pour une mise à l’échelle automatique en fonction des sollicitations
Déployer son application en Serverless
Aller plus loin avec Kubernetes (installation, stockage, déploiement, cloud, monitoring, helm)
Ce cursus s'adresse à des développeurs, chefs de projet et architectes.
Prérequis :
Cette formation Architecture DevOps Complète requiert une précédente activité dans un service informatique que ce soit au travers d'une expérience de développement, d'intégration, d'exploitation ou d'encadrement. Dans le cadre du passage de la certification, les participants devront notamment justifier d'une expérience professionnelle d'un an minimum en tant que technicien systèmes et réseaux ou développeur.
L’argumentaire et les principes DevOps Impacts sur les services informatiques, sur les profils recherchés Limites de l’approche et risques lors d’une transition brutale, Équilibre entre rigueur et agilité Intégration/Livraison et Déploiement continu Contraintes sur l’infrastructure DevOps : Zero-downtime, Monitoring, Scaling Chaîne de production logicielle Infrastructure as Code - Infrastructure immutable (Principes et Bénéfices) Introduction à GitOps
Gestion des sources avec Git
Mission d'un SCM. Commit, Branches et Tags Typologie des branches d'un projet. Workflows de collaboration (GitFlow) L'exemple de Git. Revue des Principales commandes Pull et Merge RequestsAtelier 1Mise en place d'un dépôt, création de branche, merge et rebase Serveur GitLab : Déploiement, utilisation et administration
Outils de build
Caractéristiques et apports d'un outil de build Artefacts et formats utilisés Build is Test. Typologie des tests. Exemples d'outils Analyse qualité et métriques. Stanard et mise en oeuvre avec SonarQubeAtelier 2Exécution de commande de construction, visualisation des rapports de test
Plateforme de CI/CD
Rôles de la plateforme Architecture Maître/Esclaves. Provisionnement des esclaves Notion de pipeline. Historique des builds Pipeline As code. L'exemple de JenkinsAtelier 3Mise au point d'un Jenkinsfile et couplage du serveur Jenkins au serveur GitLab (multibranch pipeline)
Virtualisation et gestion de configuration
Présentation des différents types de virtualisation, Cloud public, Cloud privé Automatisation du provisionning Présentation et comparaison de Vagrant, Terraform, Chef, Puppet Automatisation des déploiements applicatifs avec Ansible Automatiser la création des « templates » avec Packer Mise à jour des schémas de bases de données avec LiquibaseAtelier 4Mise au point de configuration Vagrant et Ansible, stockage sur GitLab, pilotage du déploiement par Jenkins Réalisation d’un code Ansible pour déployer un serveur Nexus OSS
Containerisation
Les avantages de la containerisation, l’outil Docker Le fichier Dockerfile Les principales commandes Docker Architecture micro-services et Docker Compose Containerd, CRI-O et norme CRI/OCIAtelier 5Définition et construction des images Docker d’une application micro-services, pilotage via Docker Compose
Intégration continue
Apports de Docker dans l’intégration continue Plugins Jenkins pour Docker Provisionnement des machines de build Plateformes d’intégration Déploiement des images Docker dans les dépôts d’entrepriseAtelier 6Intégration de la construction d’image et du déploiement d’image dans le cycle de construction d’un projet Utilisation d’esclaves Docker par Jenkins Mise en place d’une pipeline de déploiement continu avec Jenkins, NexusOSS (Registry), Docker
Mise à l’échelle, Surveillance continue et Mise à jour
Principes de Kubernetes et liens avec Docker Concepts de nœuds, de cluster. Services techniques apportés : annuaire, répartition de charge… Mise à jour progressive de cluster, Retour en arrière Centralisation et gestion des logs applicatifs, l’approche d’ElasticStack (EFK) Introduction à HELMAtelier 7Scaling de l’application avec Kubernetes, Mise à jour progressive de l’application micro-service, Démonstration de la pile ElasticStackAtelier 8Déploiement et administration d’EFK (ElastikStack avec Fluentd). Utilisation de HELM pour le déploiement de cette solution de monitoring
La solution GitLab
Fonctionnalités et versions disponibles Architecture, modèle de données Découverte de l’interface et des éléments de base Configuration client, configuration des accès et des notifications Découverte de la configuration de la plate-forme écoleAtelier 9Parcours de l’interface et des projets proposés
Fonctionnalités de base de GitLab
Notion de projet et groupe dans GitLab Gestion des droits d’accès : visibilité, rôles Le fichier README.md et les bonnes pratiques Gestion des branches et des tags Visualisation de l’historique et de l’activité Création de projets et templates de projets L’utilisation des badgesAtelier 10Manipulation des sources d'un projet
Workflows de collaboration
GitFlow et GitLab Flow Gestion des issues Configuration des notifications Branches et tags protégés Releases, Milestones Le processus de merge requestAtelier 11Travail en équipe, répartition des rôles, cycle de production d’une release
Les éléments clés de l’architecture CI/CD de Gitlab
Pipelines et workflows Les éléments clés du pipeline Runners et typologie, apports des technologies de conteneurisation Tags de runner
Rôle et fonctionnement du fichier .gitlab-ci.yml Cache et artefacts Contrôle du flow : only/except et rules Include et gabarits Environnement et déploiements Pipelines multi-projets Utiliser les spécificités de Docker dans un pipelineAtelier 12Définition d'un pipeline de déploiement continu
Utilisation avancée du pipeline
Artefacts, tests unitaires et exploitation des formats JUnit Utilisation des built-in templates de Gitlab : accessibilité, performance, qualité...Atelier 13Ajout des tests automatisés dans la pipeline
Dépôt de packages
Industrialiser la production de packages avec Gitlab : l’exemple de Python et PHP Industrialiser la production d’images Docker avec Gitlab : problématiques et mise en placeAtelier 14Automatisation de la construction d’une image Docker, mise à disposition dans la registry et utilisation
Intégration de Gitlab et Kubernetes
Apport de l’orchestrateur de conteneurs Les apports de Podman Architecture de la CI/CD avec Kubernetes
Concevoir une application moderne (dite Cloud-Native)
Découplage du stockage (Base de données, clé/valeur Redis, objet S3, systeme de files de messages type RabbitMQ ou Kafka) et du runtime (processus) Concevoir une application sans état (stateless), conforme aux 12 facteurs Découpage en micro-service et communication en API RESTAtelier 15Utiliser un IDE en ligne (ex. gitpod) Notre application se compose de trois parties : un frontend statique HTML/CSS/JS, un backend accessible en API et un stockage Le code sera fourni mais bien sûr modifiable/adaptable
Mettre en place une pipeline d’intégration continue (CI)
Créer un repo Git (sur GitHub) et “pousser” le code Créer un test unitaire Brancher des outils d’analyse de la sécurité du code Configurer un workflow CI GitHub Actions pour compiler le code à chaque modification majeure (npm install, run build, test..)
Déployer manuellement sur des serveurs au sein d’un Cloud IaaS
Utiliser un Cloud Public pour créer deux VMs (App et BdD) sur un réseau dédié (VPC) Déployer l’application manuellement sur la VM App Configurer le FW Cloud (Network security group) Configurer les record DNS pour publier l’application Mettre en place un Load-Balancer avec certificat TLS/SSL (ex Let’s encrypt)
Déployer en “Infra as Code” sur des serveurs au sein d’un cloud Cloud IaaS
Utiliser Cloud-init pour automatiser la préparation des VMs Utiliser TerraForm pour la création/mise l’échelle de l’application Mettre à l'échelle en faisant varier le nombre de VM App Déploiement sur une autre Région du Cloud Utilisation d’un CDN (ex CloudFlare) pour la présentation du certificat
Construire une image Docker et déployer l'application en container
Concevoir, écrire et tester un Dockerfile pour créer une image de l’application L’inclure dans le repo Git précédent Configurer le build de l’image et sa publication dans un Registry Déployer l'application sur les serveurs App sous forme de container
Déployer l'application sur Kubernetes (ou un CaaS) et mettre à l’échelle
Déployer l’image sur un CaaS (type Google Cloud Run,Azure ACI, Scaleway, Civo..) Créer un cluster Kubernetes et y déployer l’image au sein de Pods via kubectl Utiliser un LoadBalancer et un Ingress Controller pour la publication Web
Déployer l’application en Serverless
Déployer l’application sur un service Serverless (ex Netlify ou Cloudflare Workers) depuis son repo Git
Rappels sur Kubernetes
Présentation Kubernetes, origine du projet Comprendre comment Kubernetes va bouleverser vos pratiques IT La CNCF : la source pour Kubernetes Les différents containers supportés, plateformes utilisant Kubernetes Découverte des outils autour de Kubernetes
Architecture de Kubernetes
Le control plane : l’api Kubernetes, le scheduler, le controler manager, la BD NoSQL etc… Les Workers Kubernetes : Kubelet, proxy et docker La notion de ressources et versions d’apiAtelier 16Savoir utiliser la cli Kubernetes, kubectl Gérer les ressources dans les pods
Concepts d’orchestration des conteneurs
Comprendre l’orchestration, la haute disponibilité, la mise à l’échelle des applications Le manifest yaml La notion de ressources : pods, services réseau, services de stockage, déploiements et réplications d’applications stateful et stateless Gérer les sondes, les ressources dans les pods Exposer son pod sur l’extérieur Comprendre les applications Stateless et statefullAtelier 17Créer nos premiers pods Gérer les ressources dans les pods Gérer des sondes d’activités et disponibilités des pods Exposer le pods sur le réseau
Le déploiement d’applications
Comprendre la ressource Kubernetes « deployment » L’importance des labels : sans labels, pas de Kubernetes Réplication, principes de fonctionnement, mise en œuvre et gestion du cycle de vie des pods Comprendre et savoir gérer les mises à jour des deployment, rollout, plusieurs versions en exécution… Déploiement et partage des éléments de configuration, comprendre les configmaps et secretAtelier 18Créer des contrôleurs de réplication de pods Déployer des applications avec la ressource deployements Gérer les différentes stratégies de mise à jour de vos applications Créer et administrer des secret et configmaps
Le réseau avec Kubernetes
Comprendre la ressource « Service » Comment communiquent les applications Comprendre et savoir exposer nos applications aux utilisateurs Comprendre et savoir faire communiquer nos applications entre elles Notions de sécurité réseaux, NetworkPolicy, ...Atelier 19Exposer des applications par ports – NodePort Exposer des applications par IP – LoadBalancer Créer un réseau interne pour nos applications – Cluster IP Exposer ses applications via des url avec les ingress et gateway istio
Le stockage pour nos applications
Comprendre la gestion des volumes avec Kubernetes Les ressources PersistenVolume et PersistenVolumeClaim... Savoir fournir du stockage dynamique à nos déploiements Connecter le stockage avec les podsAtelier 20Créer une demande de stockage dynamique Associer le stockage avec ses applications
Le déploiement d’applications avec états
Comprendre la ressource Kubernetes « Statefulset » Comprendre le déploiement d’applications avec étatsAtelier 21Étude de cas de bout en bout Déploiement d’un cluster base de données SQL sur Kubernetes
Introduction à Helm
Les concepts de base (chart, dépôt, release) Les apports de Helm Rechercher des charts (helm search) Cycle de vie d’un package avec Helm (install, upgrade, unisntall) Obtenir des informations utiles (get values, list, etc.)Atelier 22Recherche de charts sur des dépôts publics et nos propres dépôts Installation des packages
Cette formation vous prépare à la certification Exploiter les méthodes et outils DevOps dans l'administration des infrastructures, comprise dans le tarif de la formation.
Cette certification repose sur deux modalités d'évaluation : un projet professionnel à partir d'un cas pratique réel ou reconstitué avec rapport de 15 à 20 pages et soutenance orale ; un cas pratique.
Projet professionnel
Contenu : À partir d'un cas d'entreprise réelle ou fictive, Le/la candidat(e) doit :
- définir un environnement de développement; sélectionner les outils et bibliothèques logicielles ; produire les fichiers de configuration et les scripts, nécessaires à l'automatisation de l'installation et au partage d'un environnement de développement, - concevoir une procédure d'intégration continue ; définir la procédure de build et d'exécution des tests ; sélectionner l'outil d'intégration continue; produire les configurations et/ou scripts nécessaires à l'automatisation de l'étape de build et de l'étape d'exécution des tests, - définir les configurations de l'infrastructure; choisir un gestionnaire de configuration ; définir les environnements et leurs caractéristiques techniques en réalisant les configurations et scripts nécessaires ; réaliser les tests automatisés de l'infrastructure définie; versionner les fichiers sources, - tester l'infrastructure; assurer l'exécution des tests lors du partage des sources, - définir une procédure de déploiement continu; choisir les outils nécessaires ; mettre en oeuvre la procédure, - définir des métriques de monitorage de l'infrastructure et des applications; installer les outils de collecte, d'agrégation et d'analyse choisis ; Configurer les outils en fonction des métriques définies.
Correction : un jury composé de 3 personnes, dont au moins un professionnel.
Rendus attendus : • à l'écrit: Un rapport de 15 à 20 pages comprenant : o une introduction : contexte du projet, résumé exécutif, etc, o une première partie sur la compréhension besoin client, la traduction technique de la réponse apportée, o une seconde partie sur les enjeux de la mise en oeuvre du projet : justification des choix et des arbitrages réalisés, problèmes rencontrés et solutions apportés, etc, o une troisième partie sur le bilan de projet et les améliorations envisagées, o une conclusion: apprentissages, perspectives pour le projet professionnel envisagé, etc.
• À l'oral: une présentation orale de 50 minutes maximum découpée en 3 parties : o Présentation du rapport (20mn), o Présentation de la démo (10mn), o Echange avec le jury (20mn).
Cas pratique
Contenu : à partir d'une thématique donnée, le/la candidat(e) doit :
- Concevoir un système de veille technologique ; réaliser un état de l'art des méthodologies et outils de la thématique donnée en explicitant le choix des sources; proposer une analyse de la fiabilité des sources utilisées ;
Correction : un jury composé de 3 personnes, dont au moins un professionnel.
Rendus attendus :
• à l'écrit : Un rapport de 2 à 5 pages, comprenant : o une première partie de présentation des documents : sources, canal, date, analyse de la pertinence de la source, etc, o une seconde partie de synthèse : les tendances du domaine, les conséquences pour la pratique professionnelle, etc.