Il existe de très nombreux outils DevOps, chacun permettant de réaliser certaines tâches particulières. Il peut être difficile de s’y retrouver, et de savoir par où commencer quand on veut mettre en place DevOps. Cet article décrit les principaux outils DevOps à connaître, et explique ce qu’ils sont susceptibles d’apporter une fois mis en place.
Docker – La conteneurisation
Docker est le principal outil utilisé pour la conteneurisation. Comme son nom l’indique, la conteneurisation permet d’isoler une application dans un conteneur. Le conteneur regroupe tous les éléments nécessaires à l’exécution du processus, que ce soit un service web, une base de données ou autre. Le tout est packagé dans une image, à partir de laquelle un conteneur peut être créé sur n’importe quel environnement supportant docker.
Il n’est donc pas nécessaire d’installer autre chose que docker sur la machine exécutant le service, tous les éléments nécessaires au programme étant déjà embarqués dans le conteneur.
La logique docker est « un service, un conteneur ». Cette logique permet de bien penser l’application en termes de microservices, et l’isolation des différentes parties de l’application permet, dans une logique DevOps, de faire évoluer l’application brique par brique à l’inverse d’une architecture monolithique où toute l’application doit être redéployée à chaque mise à jour.
Docker a vraiment permis l’élan du DevOps, et est la brique centrale de l’automatisation des processus de déploiement à notre époque.
— Avantages de l’outil
- Couches et contrôle des versions d’image
- Restauration : il est possible de rollback sur une image précédente
- Architectures micro services : docker facilite la mise en place d’architectures microservices (un conteneur = un service)
- Facilité d’installation : rien n’est à installer sur la machine
- Réutilisabilité : rien n’est installé sur la machine
- Isolation : les services lancés dans un conteneur ne peuvent pas affecter les services d’un autre conteneur
Kubernetes – L’orchestration de conteneurs
L’orchestration de conteneurs regroupe un ensemble d’outils permettant de manager ses conteneurs. Les fonctionnalités supplémentaires apportées par un outil d’orchestration de conteneurs peuvent aller du déploiement à la mise à l’échelle de l’application (scaling), en passant par la configuration réseau des conteneurs.
L’outil principalement utilisé à l’heure actuelle (même s’ il en existe d’autres) est Kubernetes. Kubernetes fournit tout un panel d’outils et de commandes permettant de gérer finement ses conteneurs. Il est ainsi possible, par exemple, de déployer rapidement une mise à jour de l’application en poussant une nouvelle version d’un conteneur en particulier, tout en assurant un système de roll-back en cas d’échec.
Kubernetes assure aussi toute la partie configuration des conteneurs (au moyen de variables d’environnement), permet de mettre en place un load-balancer et de déclarer plusieurs instances en même temps de l’application au moyen de réplicas (scaling).
— Avantages de l’outil
- Approvisionnement et déploiement
- Allocation des ressources
- Mise à disposition des conteneurs
- Mise à l’échelle ou suppression de conteneurs en fonction des charges de travail dans l’infrastructure (scaling)
- Équilibrage de la charge et routage du trafic (load balancing)
- Surveillance de l’intégrité des conteneurs
- Sécurisation des interactions entre les conteneurs
> A lire également : Terraform / Kubernetes : de + en + d’usage en production ?
L’intégration continue
L’intégration continue a très rapidement été mise en place par les développeurs étant soucieux d’automatiser un maximum de tâches à chaque mise à jour de l’application. L’objectif est de dérouler une série de tâches automatiques à chaque fois qu’une modification est faite dans l’application. La plupart du temps ses tâches sont les suivantes : lancement d’une série de tests, exécution d’un linter (analyse statique du code), vérification des failles de sécurité, build de l’application (le plus souvent dans un conteneur), puis déploiement de l’application.
L’intégration continue peut même intégrer une phase de tests d’intégration, permettant de tester l’interaction de l’application avec d’autres composants (base de données, API tierce…)
Il existe de nombreux outils d’intégration continue, tels que Jenkins, Gitlab-CI, CircleCI… La plupart du temps, ils sont faciles à prendre en main, et décrivent simplement une liste de tâches à exécuter.
La chaîne d’intégration continue remonte des alertes par mail à l’équipe, leur permettant d’avoir un retour rapide sur l’état de ce qui a été livré, permettant ainsi de corriger les problèmes avant qu’ils n’arrivent en production.
— Avantages de l’outil
- Garantir en production un code de qualité
- Automatisation des tests à chaque ajout/modification de fonctionnalité
- Retour rapide sur les développements
- L’objectif est le déploiement continu, qui permet de recevoir du feedback instantanément via des déploiements automatisés dans la chaîne de CI
Ansible / Puppet – L’automatisation du provisionnement et du déploiement
Provisionner un environnement de production peut être long et fastidieux. L’automatisation de cette tâche est possible grâce à des outils comme Ansible/Puppet.
Une série de tâches est définie dans un script, pouvant contenir des variables et autres templates de fichiers. Ces scripts peuvent être exécutés sur n’importe quelle plateforme pour configurer automatiquement un serveur (installation de la base de données, mise en place du serveur web, configuration du HTTPS…) sans avoir à refaire l’action manuellement à chaque infrastructure qu’on veut mettre en place.
Cela garantit aussi que toutes les plateformes provisionnées soient iso, ce qui évite d’avoir des environnements différents et donc difficiles à maintenir.
L’automatisation de la configuration permet aussi de configurer très rapidement de nouvelles machines, par exemple quand on veut ajouter un nouveau serveur de préproduction à mi-chemin entre la production et l’environnement de test.
Ces outils permettent aussi d’automatiser la phase de déploiement. Une liste d’actions permettant de mettre à jour l’application (sur l’environnement de production ou autre) peuvent être décrites dans un rôle, qui sera exécuté par exemple à la dernière étape de la chaîne d’intégration continue.
— Avantages de l’outil (Ansible)
- Modules : pour une tâche, un module Ansible existe déjà (Exemple: copier un fichier).
- Roles : liste d’instructions dans le but d’effectuer une action (exemple : déployer une version de l’application)
- Inventaire : liste de machines sur lesquelles exécuter des tâches
- Playbook : listes de rôles à exécuter sur l’inventaire
- Templating
Le cloud et les cloud providers
Un Cloud est constitué de serveurs situés à distance et accessibles de n’importe où et à n’importe quel moment via une connexion Internet sécurisée et protégée.
De nombreux Cloud-Providers fournissent des services cloud, et permettent de monter en quelques clics un serveur clé en main ou une base de données managée.
Parmi eux : Amazon Web Service, Scaleway, Azure, Google Cloud Platform …
Couplé à l’Infrastructure As Code (voir point suivant), le cloud permet de générer et de détruire des environnements à la volée de manière totalement automatisée.
— Avantages de l’outil
- Plus de machine physique à gérer soi même
- Rapidité de mise en place (quelques clics pour un serveur)
- Flexibilité
- Facilité de prise en main
- Maintenance prise en charge
- Services d’analytics
Terraform – L’Infrastructure As Code
L’Infrastructure As Code permet, via des fichiers descripteurs ou des scripts, de créer, gérer et détruire des infrastructures à la volée.
L’outil open source Terraform permet d’utiliser des providers pour décrire les ressources que l’on souhaite mettre en place. Via un système de ressources (une ressource étant par exemple une machine, une IP, un volume de stockage…), il est possible de créer une infrastructure complète dans le cloud en quelques lignes de commande.
Des scripts Terraform peuvent être par exemple lancés dans une chaîne d’intégration continue pour mettre sur pied des serveurs de tests d’intégration à la volée. Ils peuvent ensuite être détruits à la fin de la phase de test, pour réduire les coûts d’infrastructure.
— Avantages de l’outil
- Déploiement rapide et transparent
- Sans défaillance humaine possible
- Rapidité d’exécution
- Déployer et détruire à la volée les ressources (coûts)
- Partage de connaissance facile : toutes l’infra est décrite dans un fichier.
> Revoir notre session découverte : Webinar : Formation Terraform – Session découverte
Aujourd’hui, il est de plus en plus nécessaire de maîtriser ou du moins de connaître les principaux outils DevOps du marché. Pour les développeurs, c’est l’assurance d’avoir une meilleure maîtrise de ses services, d’automatiser certaines tâches redondantes et de pouvoir déployer des infrastructures sans avoir besoin du soutien d’une équipe d’Ops.
Pour les entreprises, c’est la condition première pour prétendre à fournir des services de qualités, scalables et robustes, et pour optimiser les processus de livraison tout en réduisant les erreurs. L’automatisation est au cœur des enjeux DevOps, et permet d’écarter l’erreur humaine des actions.
Il existe bien évidemment de nombreux autres outils, notamment pour mettre en place du monitoring, mais ceux présentés dans cet article forment la base des technos à connaître en 2021.