Pourquoi apprendre Ansible en 2024 ?

Qu'est-ce que le DevOps ?

"Devops" est la concaténation des trois premières lettres du mot anglais development (développement) et de l'abréviation ops du mot anglais operations (exploitation).

C'est un terme qui a été inventé par le belge Patrick Debois en 2007.

Le DevOps est un ensemble de pratiques qui visent à réduire le fossé entre le développement logiciel (Dev) et les opérations informatiques (Ops), d'où le terme.

L'idée est de favoriser une collaboration plus étroite et une meilleure communication entre ces deux entités qui, dans les modèles traditionnels, opèrent souvent de manière isolée.

Les principes clés du DevOps comprennent aujourd'hui :

  • l'intégration continue (CI pour continuous integration en anglais - le code est régulièrement fusionné et testé), 
  • la livraison continue (CD pour continuous delivery - les mises à jour du logiciel sont régulièrement libérées pour la production),
  • l'infrastructure en tant que code (la gestion et la provision des infrastructures informatiques via le code - IAC en anglais pour Infrastructures As Code),
  • la surveillance et la journalisation (le suivi en temps réel de la performance et des erreurs du logiciel)
  • la culture de la rétroaction (l'encouragement à l'amélioration constante via les retours d'information)

Le schéma classique est celui-ci :

Outils DevOps principaux

1 - Planification et collaboration :

Ces outils permettent de créer des tâches et de gérer un projet. Les plus utilisés sont :

  • Gitlab
  • Github
  • Jira

2 - Gestion du code (développement)

Ces outils permettent d'effectuer un contrôle de version du code. Les plus utilisés sont :

  • GitHub
  • GitLab
  • Bitbucket

3 - Intégration Continue / Déploiement Continu (CI/CD) :

Ces outils surveillent les commits dans votre dépôt par exemple Github. Lorsqu'un commit est effectué, ils lancent automatiquement un "pipeline" d'intégration continue qui peut compiler le code, exécuter des tests unitaires, des tests d'intégration, et d'autres types de tests pour s'assurer que les dernières modifications n'ont pas introduit de bugs.

Si tous les tests passent, ces outils peuvent être configurés pour déployer automatiquement les changements sur un environnement de production, de staging ou de test. Cela accélère le processus de livraison de nouvelles fonctionnalités et de corrections de bugs.

Des solutions très connues sont :

  • Jenkins
  • GitLab CI/CD
  • Github actions
  • AWS CodePipeline
  • Azure DevOps
  • CircleCI
  • Travis CI

4 - Gestion de l'infrastructure :

Ces outils permettent de faire des choses très différentes mais concernent les serveurs et les clusters.

Nous pouvons citer quelques exemples :

  • Docker : pour créer des images et ensuite les exécuter dans des conteneurs sur un cluster.
  • Docker Hub (ou tout autre Container Registry - il y en a plusieurs dizaines) : plateforme de service cloud qui permet aux développeurs de stocker et d'utiliser des images d'applications conteneurisées.
  • Kubernetes : plateforme qui automatise la déploiement, la mise à l'échelle et la gestion des applications conteneurisées, offrant un cadre pour orchestrer et coordonner des conteneurs au sein d'un environnement de cloud.
  • Terraform : outil d'Infrastructure as Code (IaC) open source qui permet aux développeurs de définir et de fournir des infrastructures de centres de données en utilisant un langage de description déclaratif, facilitant ainsi la gestion et l'orchestration des ressources cloud.
  • Ansible : outil d'automatisation open source qui permet la gestion de configuration, le déploiement d'applications et l'orchestration de tâches sur une variété de systèmes et de plateformes (en résumé permet de configurer et de gérer des serveurs plus simplement).

5 - Surveillance et retour d'information :

Ces outils permettent de surveiller (monitoring) des clusters ou plus généralement des applications exécutées sur des serveurs.

Voici une liste des outils les plus courants :

  • Prometheus : système de surveillance et d'alerte qui collecte et stocke les métriques d'application et de système en temps réel, offrant des fonctionnalités de requête et d'alerte pour aider à la détection et à la résolution des problèmes.
  • Grafana : plateforme pour la visualisation et l'analyse de données, permettant aux utilisateurs de créer des tableaux de bord interactifs et compréhensibles pour surveiller et analyser en temps réel les données provenant de diverses sources, le plus souvent de Prometheus.
  • ELK Stack (Elasticsearch, Logstash, Kibana) : suite d'outils qui fournit des capacités de recherche, d'analyse, de journalisation et de visualisation de données, permettant aux utilisateurs de transformer leurs données en insights précieux.
  • Datadog / Nagios / New Relic / Sentry : plateformes de surveillance et d'analyse des performances en temps réel pour les infrastructures cloud, les applications, les journaux et les métriques, facilitant la détection des problèmes et leur résolution.

Introduction à Ansible

Ansible est un outil d'automatisation IT open-source écrit en Python qui permet de gérer la configuration de systèmes, le déploiement d'applications et l'exécution de tâches sur un ensemble de machines de manière automatisée. 

Il utilise une approche agentless, ce qui signifie qu'aucun logiciel supplémentaire ou agent n'est nécessaire sur les machines cibles. Il utilise le protocole SSH pour la communication.

Ansible a été créé par Michael DeHaan en 2012 et compte plus de 5500 contributeurs, ce qui en fait un des projets open source les plus suivis.

Le nom Ansible a été choisi en référence à un roman de science-fiction qui désigne un moyen de communication plus rapide que la lumière.

Ansible Inc. qui était la société qui développait commercialement l'application Ansible a été racheté par Red Hat en 2015.

Il existe donc aujourd'hui une version communautaire gratuite et le produit commercial Red Hat Ansible Automation Platform Life Cycle.

Les principes d'Ansible

La philosophie d'Ansible comporte plusieurs grands principes que nous allons voir ensemble.

Avoir un processus de configuration extrêmement simple avec une courbe d'apprentissage minimale

L'outil est facile à installer et à configurer. Une personne avec peu ou pas d'expérience en automatisation doit pouvoir rapidement comprendre comment utiliser l'outil. L'apprentissage peut donc être très progressif.

Gérer les machines rapidement et en parallèle

L'outil doit être capable d'exécuter des tâches sur plusieurs machines en même temps, réduisant ainsi le temps nécessaire pour l'automatisation.

Eviter des agents personnalisés et des ports ouverts supplémentaires, être agentless en exploitant l'utilitaire SSH existant

Pas besoin d'installer de logiciel supplémentaire sur les machines que vous souhaitez automatiser. Utilise SSH, qui est généralement déjà installé et configuré sur les systèmes UNIX, pour communiquer avec les machines distantes.

Décrire l'infrastructure dans un langage qui est à la fois adapté aux machines et aux humains

Le langage utilisé pour écrire les scripts ou les configurations doit être facile à lire et à comprendre, tout en étant interprétable par la machine. C'est pourquoi Ansible utilise YAML.

Se concentrer sur la sécurité et la facilité d'auditabilité/examen/réécriture du contenu

L'outil doit être conçu avec la sécurité à l'esprit. Il doit également permettre un audit facile du code et des configurations, de sorte que les revues de code et la conformité aux normes de sécurité puissent être facilement réalisées.

Gérer de nouvelles machines distantes instantanément, sans initialisation de logiciel

L'idée est de pouvoir ajouter de nouvelles machines à votre infrastructure et de commencer à les automatiser immédiatement, sans avoir à installer de logiciel supplémentaire ou à faire des configurations complexes.

Permettre le développement de modules dans n'importe quel langage dynamique, pas seulement en Python

Bien qu'Ansible soit écrit en Python, il permet l'intégration de modules écrits dans d'autres langages de programmation. Cela le rend plus extensible et permet aux développeurs d'utiliser les langages avec lesquels ils sont les plus à l'aise.

Être utilisable en tant que non-root

Il devrait être possible d'utiliser l'outil sans privilèges d'administrateur, ce qui réduit les risques de sécurité.

Être le système d'automatisation IT le plus facile à utiliser, pour toujours

Cela résume en quelque sorte tous les principes ci-dessus. L'objectif est de créer un outil qui est non seulement puissant mais aussi extrêmement facile à utiliser, rendant l'automatisation accessible à autant de personnes que possible.

Ces principes guident le développement et les améliorations de l'outil, assurant qu'il reste utile, efficace et facile à utiliser.

Commence dès aujourd'hui notre formation Ansible !