Description de la formation Architecture Devops
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.
Objectifs
Objectif opérationnel :
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)
À qui s’adresse cette formation ?
Public :
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.
Contenu du cours Architecture Devops
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 à 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 Requests
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.
Analyse qualité et métriques.
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 Jenkins
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 Liquibase
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/OCI
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’entreprise
Utilisation d’esclaves Docker par Jenkins
Mise en place d’une pipeline de déploiement continu avec Jenkins,
Mise à l’échelle, Surveillance continue et Mise à jour
Principes de Kubernetes et liens avec Docker
Concepts de nœuds, de cluster.
Mise à jour progressive de cluster, Retour en arrière
Centralisation et gestion des logs applicatifs, l’approche d’ElasticStack (EFK)
Introduction à HELM
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 école
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 badges
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 request
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
Pipelines 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 pipeline
Utilisation avancée du pipeline
Artefacts, tests unitaires et exploitation des formats JUnit
Utilisation des built-in templates de Gitlab : accessibilité, performance, qualité…
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 place
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 REST
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’api
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 statefull
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 secret
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, …
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 pods
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 états
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.)
Installation des packages