Logo Blent.ai
← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 9 mai 2023

Catégorie Cloud / DevOps

Ansible : qu'est-ce que c'est ?

Ansible est un outil open source de gestion de configuration, d'automatisation et de déploiement d'application. Il est conçu pour simplifier et automatiser la gestion de configurations complexes sur des infrastructures distribuées. Devenu rapidement un incontournable dans le monde DevOps ces dernières années, il a été adopté par de nombreuses entreprises, à la fois en raison de sa simplicité d'utilisation, de configuration, mais aussi car sa personnalisation lui permet d'être autonome quel que soit l'environnement utilisé (Cloud public, On-Premise, etc).

Dans cet article, nous allons présenter dans son ensemble Ansible, comment il fonctionne, et proposer des exemples de playbooks, qui constituent la base pour automatiser la configuration de serveurs.

Fonctionnement d'Ansible

Ansible utilise un modèle client-serveur pour automatiser les tâches sur les nœuds cibles. Un des avantages d'Ansible est qu'il est agentless, ce qui signifie qu'il ne nécessite pas l'installation d'une application sur un ordinateur ou un serveur cible. Pour exécuter ses tâches, Ansible utilise donc uniquement le protocole SSH pour communiquer et effectuer les tâches requises. Par conséquence, cela améliore sa portabilité et permet son utilisation sur de nombreuses plateformes, ce qui permet de gérer des systèmes très variés.

Ansible utilise un langage simple basé sur le format YAML (Yet Another Markup Language) pour décrire les configurations système, les tâches (commandes à effectuer sur les hôtes distants) et les rôles à exécuter sur les nœuds cibles, et utilise le protocole SSH pour se connecter aux machines distantes et effectuer les tâches requises.

L'autre avantage d'Ansible est sa facilité d'utilisation et sa flexibilité. Puisqu'il ne nécessite pas d'installation d'agent sur les nœuds cibles, ce qui permet de déployer rapidement et facilement des configurations sur des machines distantes, des serveurs cloud et des conteneurs. En outre, Ansible dispose d'une large communauté d'utilisateurs actifs, ce qui facilite la recherche et l'adoption de bonnes pratiques et de solutions prêtes à l'emploi pour les cas d'utilisation courants.

Ansible dispose de nombreuses fonctionnalités, qui en font un outil très apprécié pour les DevOps, architectes, développeurs et même Data Engineers. Il y a ainsi de nombreux cas d'usages où Ansible se révèle puissant.

  • Déploiement de configurations : Ansible permet de décrire les configurations système à l'aide de fichiers YAML, ce qui facilite leur gestion et leur déploiement. Il est possible de configurer des paramètres système, des packages logiciels, des fichiers de configuration et bien plus encore.
  • Gestion de la sécurité : il peut être utilisé pour automatiser la mise à jour des correctifs de sécurité et la configuration des règles de pare-feu, ce qui contribue à maintenir un environnement sécurisé.
  • Automatisation de tâches : sûrement l'une des utilisations d'Ansible les plus courantes, il est adapter pour automatiser des tâches répétitives, telles que la configuration des utilisateurs, la sauvegarde des données, la configuration des DNS et bien plus encore.
  • Déploiement multi-environnements : Ansible permet de déployer des configurations sur différents environnements, tels que le développement, la préproduction et la production, en utilisant des fichiers de configuration différents pour chaque environnement.
  • Intégration continue : enfin, il peut être intégré à des outils d'intégration continue tels que Jenkins pour automatiser la création, le test et le déploiement de logiciels.

De plus, Ansible dispose également d'une large communauté d'utilisateurs actifs, avec de nombreux contributeurs et utilisateurs d'un projet open source. Cela a permis la création de plusieurs extensions et modules pour étendre les fonctionnalités et adapter Ansible aux différents environnements.

Enfin, il peut être intégré avec différents outils et plateformes grâce à son API REST et à ses bibliothèques de modules pour l'utiliser dans différents langages de programmation tels que Python, par exemple.

Inventaires

Un inventaire Ansible est une liste de tous les hôtes ou serveurs que l'on souhaite gérer avec Ansible. Cet inventaire est un fichier texte, généralement nommé inventory ou hosts, qui contient une liste des noms d'hôtes ou des adresses IP des machines que l'on souhaite gérer.

Prenons comme exemple un site Web Wordpress qui est exécuté sur deux serveurs différents. Ce site Wordpress va utiliser une base de données PostgreSQL qui est exécutée sur un seul serveur. Au total, nous aurions trois serveurs, et le fichier d'inventaire pourrait ressembler à cela.

1[web]
2webserver1.example.com
3webserver2.example.com
4
5[database]
6dbserver1.example.com
7
8[web:vars]
9http_port=80
10max_clients=200
11
12[database:vars]
13db_port=5432
14db_name=mydb

Dans cet exemple, les groupes web et database contiennent les noms d'hôtes des serveurs associés à chaque groupe. Les variables d'environnement sont spécifiées sous chaque groupe, avec des variables spécifiques à chaque groupe. Par exemple, le groupe web a deux variables définies http_port et max_clients, tandis que le groupe database a deux variables db_port et db_name.

Les variables d'environnement peuvent être utilisées par la suite dans les commandes Ansible pour configurer les paramètres spécifiques à chaque groupe ou chaque hôte. Les groupes peuvent être utilisés pour organiser les serveurs en fonction de leur rôle ou de leur fonction, ce qui facilite la gestion de la configuration et du déploiement à grande échelle.

Par exemple, dans le cas de cet inventaire, on procèderait aux mêmes installations sur les deux serveurs du groupe web, car il s'agit du même composant applicatif (à savoir Wordpress). En revanche, pour le serveur de base de données, ce serait une toute autre installation, d'où le fait de créer un groupe séparé database. Ainsi, avec Ansible, on pourra spécifier quelles sont les actions à mettre en place pour chacun des groupes présents dans l'inventaire.

Playbooks

Les playbooks Ansible sont des fichiers YAML qui permettent de décrire les étapes à suivre pour effectuer une tâche de gestion ou un ensemble de tâches sur un ou plusieurs hôtes cibles, spécifiés dans un inventaire. Les playbooks fournissent une structure pour la gestion et l'automatisation de la configuration des systèmes.

Les playbooks peuvent inclure plusieurs tâches, chacune décrivant une action spécifique à effectuer sur les hôtes distants. Les tâches sont organisées en séquences logiques appelées rôles. Les rôles permettent d'organiser les tâches en fonction de leur objectif ou de leur fonction, ce qui facilite la maintenance et la réutilisation du code. Ils permettent également de définir des variables d'environnement et des valeurs par défaut pour les tâches, ainsi que des conditions pour exécuter ou sauter des tâches en fonction de l'état des hôtes ou de leur environnement.

Les playbooks sont exécutés en utilisant la commande ansible-playbook, qui permet de spécifier l'inventaire et le fichier de playbook à utiliser. Il s'agit de l'un des éléments clés d'Ansible car ils permettent de décrire de manière détaillée la configuration et le déploiement des systèmes, ce qui facilite la maintenance et l'évolutivité des environnements de production. En pratique, on n'utilise que très peu la CLI ansible et on utilise très majoritairement les playbooks Ansible, car ils permettent de séquencer facilement les étapes, de versionner efficacement avec Git, et surtout d'améliorer la lisibilité lorsque l'on doit effectuer des dizaines (voir centaines) de commandes.

Prenons comme exemple un Playbook où nous allons installer Nginx (un serveur Web) sur un hôte distant.

1---
2- name: Install and configure Nginx
3  hosts: web
4  become: true
5  tasks:
6    - name: Install Nginx
7      apt:
8        name: nginx
9        state: present
10        update_cache: true
11
12    - name: Create user and group
13      block:
14        - name: Create group
15          group:
16            name: webadmin
17            state: present
18        - name: Create user
19          user:
20            name: webadmin
21            group: webadmin
22            shell: /bin/bash
23
24    - name: Copy Nginx configuration file
25      copy:
26        src: nginx.conf
27        dest: /etc/nginx/nginx.conf
28        owner: webadmin
29        group: webadmin
30        mode: 0644
31
32    - name: Restart Nginx
33      service:
34        name: nginx
35        state: restarted

Ce playbook contient les éléments suivants :

  • name : nom du playbook.
  • hosts : spécifie le groupe d'hôtes cibles pour le playbook (ici tous les hôtes du groupe web).
  • become : spécifie avec true que le playbook doit être exécuté avec les privilèges administrateurs.
  • tasks : liste des tâches à effectuer sur les hôtes cibles.

Chaque tâche est alors exécutée dans l'ordre, en suivant pour chacune d'entre-elles les différents paramètres attribués.

Alternatives à Ansible

Bien évidemment, Ansible n'est pas le seul outil sur le marché : il existe plusieurs alternatives pour la gestion de configuration et l'automatisation des tâches sur les infrastructures distribuées.

  • Chef : il s'agit d'un autre outil open source de gestion de configuration et d'automatisation, qui utilise un langage de configuration basé sur Ruby. Chef utilise un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • Puppet : c'est un autre outil de gestion de configuration open source, qui utilise un langage de configuration basé sur Ruby. Puppet utilise également un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • SaltStack est un autre outil open source de gestion de configuration et d'automatisation, qui utilise un langage de configuration basé sur YAML. SaltStack utilise un agent installé sur les nœuds cibles pour communiquer et effectuer les tâches requises.
  • Kubernetes peut aussi être vu comme une alternative à Ansible du fait de la gestion de conteneurs, qui permet de gérer des applications conteneurisées sur des infrastructures distribuées.

Malgré tout, Ansible reste l'outil de prédilection pour la configuration automatisée de serveurs.

Vous souhaitez vous former au Cloud / DevOps ?

Articles similaires

Blog

1 août 2023

Cloud / DevOps

Bash (qui signifie Bourne Again SHell) est un interpréteur de commandes (shell) pour les systèmes d'exploitation Linux. Il s'agit du principal langage de script et d'interface en ligne de commande utilisé dans les systèmes Linux qui permet d'interagir avec le système d'exploitation en utilisant des commandes textuelles.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

8 juin 2023

Cloud / DevOps

Kubernetes (d'abréviation K8s) est un outil extrêmement populaire dans le Cloud et qui est devenu, en quelques années, la référence en terme de déploiement d'applications dans le Cloud. Mais pourquoi (et surtout comment) Kubernetes est devenu la solution incontournable ?
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

8 avr. 2022

Cloud / DevOps

Construire une infrastructure Cloud peut vite devenir difficile à gérer pour toute une équipe, surtout si elle doit faire des modifications sur plusieurs services à la fois. C'est là qu'intervient Terraform, un outil d'Infrastructure-as-Code très populaire qui permet de construire et déployer toute une infrastructure Cloud à l'aide de fichiers de configuration.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Logo Blent

60 rue François 1er

75008 Paris

Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.

Organisme de formation n°11755985075.

Gestion des cookies

© 2023 Blent.ai | Tous droits réservés