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.
Principes du mouvement DevOps
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 à GitOpsGestion 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 administrationOutils 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 testPlateforme 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 OSSContainerisation
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 ComposeInté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), DockerMise à 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 monitoringLa 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ésFonctionnalité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 projetWorkflows 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 releaseLes é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 runnerPipelines GitLab CI/CD (GitLab Continuous Integration & Delivery)
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 continuUtilisation 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 pipelineDé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 utilisationIntégration de Gitlab et Kubernetes
Apport de l’orchestrateur de conteneurs
Les apports de Podman
Architecture de la CI/CD avec KubernetesConcevoir 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/adaptableMettre 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 certificatConstruire 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 containerDé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 WebDéployer l’application en Serverless
Déployer l’application sur un service Serverless (ex Netlify ou Cloudflare Workers) depuis son repo GitRappels 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 KubernetesArchitecture 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 podsConcepts 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éseauLe 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 configmapsLe 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 istioLe 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 applicationsLe 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 KubernetesIntroduction à 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