Introduction à la gestion de configuration avec Ansible

Introduction

La gestion de configuration est le processus de gestion des changements apportés à un système de manière à assurer son intégrité au fil du temps, généralement impliquant des outils et des processus qui facilitent l’automatisation et l’observabilité. Bien que ce concept ne soit pas né de l’industrie informatique, le terme est largement utilisé pour désigner la gestion de configuration des serveurs.

Dans le contexte des serveurs, la gestion de configuration est également couramment appelée Automatisation IT ou Orchestration de Serveurs. Ces termes mettent l’accent sur les aspects pratiques de la gestion de configuration et la capacité à contrôler plusieurs systèmes à partir d’un serveur central.

Ce guide vous fera découvrir les avantages de l’utilisation d’un outil de gestion de configuration pour automatiser la mise en place de votre infrastructure de serveurs, et comment un tel outil, Ansible, peut vous aider dans cette tâche.

Avantages de l’utilisation d’un outil de gestion de configuration

Il existe plusieurs outils de gestion de configuration disponibles sur le marché, avec des niveaux de complexité variés et des styles architecturaux divers. Bien que chacun de ces outils ait ses propres caractéristiques et fonctionne de manière légèrement différente, ils offrent tous la même fonction : s’assurer que l’état d’un système correspond à l’état décrit par un ensemble de scripts de provisionnement.

De nombreux avantages de la gestion de configuration pour les serveurs proviennent de la capacité à définir votre infrastructure en tant que code. Cela vous permet de :

  • Utiliser un système de contrôle de version pour suivre tout changement dans votre infrastructure
  • Réutiliser les scripts de provisionnement pour plusieurs environnements de serveurs, tels que le développement, les tests et la production
  • Partager les scripts de provisionnement entre les collègues pour faciliter la collaboration dans un environnement de développement standardisé
  • Agrandir le processus de réplication des serveurs, ce qui facilite la récupération après des erreurs critiques

De plus, les outils de gestion de configuration vous offrent un moyen de contrôler de un à plusieurs centaines de serveurs depuis un emplacement centralisé, ce qui peut considérablement améliorer l’efficacité et l’intégrité de votre infrastructure de serveurs.

Aperçu d’Ansible

Ansible est un outil moderne de gestion de configuration qui facilite la tâche de configuration et de maintenance des serveurs distants, avec une conception minimaliste destinée à permettre aux utilisateurs de démarrer rapidement.

Les utilisateurs écrivent des scripts de provisionnement Ansible en YAML, une norme de sérialisation de données conviviale qui n’est liée à aucun langage de programmation particulier. Cela permet aux utilisateurs de créer des scripts de provisionnement sophistiqués de manière plus intuitive par rapport à des outils similaires dans la même catégorie.

Ansible ne nécessite l’installation d’aucun logiciel spécial sur les nœuds qui seront gérés avec cet outil. Une machine de contrôle est configurée avec le logiciel Ansible, qui communique ensuite avec les nœuds via SSH standard.

En tant qu’outil de gestion de la configuration et de cadre d’automatisation, Ansible encapsule toutes les fonctionnalités communes présentes dans d’autres outils de la même catégorie, tout en maintenant une forte focalisation sur la simplicité et les performances :

Comportement Idempotent

Ansible suit l’état des ressources dans les systèmes gérés afin d’éviter de répéter des tâches qui ont déjà été exécutées. Si un paquet a déjà été installé, il ne tentera pas de l’installer à nouveau. L’objectif est que, après chaque exécution de provisionnement, le système atteigne (ou conserve) l’état souhaité, même si vous l’exécutez plusieurs fois. C’est ce qui caractérise Ansible et d’autres outils de gestion de la configuration comme ayant un comportement idempotent. Lors de l’exécution d’un playbook, vous verrez l’état de chaque tâche en cours d’exécution et si la tâche a effectué un changement dans le système.

Prise en charge des Variables, des Conditionnels et des Boucles

Lors de l’écriture de scripts d’automatisation Ansible, vous pouvez utiliser des variables, des conditionnels et des boucles afin de rendre votre automatisation plus versatile et efficace.

Faits Système

Ansible collecte une série d’informations détaillées sur les nœuds gérés, telles que les interfaces réseau et le système d’exploitation, et les fournit sous forme de variables globales appelées faits système. Les faits peuvent être utilisés dans les playbooks pour rendre votre automatisation plus versatile et adaptative, se comportant différemment en fonction du système en cours de provisionnement.

Système de Modèles

Ansible utilise le système de modélisation Jinja2 Python pour permettre des expressions dynamiques et l’accès aux variables. Les modèles peuvent être utilisés pour faciliter la configuration de fichiers de configuration et de services. Par exemple, vous pouvez utiliser un modèle pour configurer un nouveau hôte virtuel dans Apache, tout en réutilisant le même modèle pour plusieurs installations de serveurs.

Prise en charge des Extensions et Modules

Ansible est fourni avec des centaines de modules intégrés pour faciliter l’écriture d’automatisations pour les tâches courantes de gestion des systèmes, telles que l’installation de paquets avec apt et la synchronisation de fichiers avec rsync, ainsi que pour la gestion de logiciels populaires tels que les systèmes de base de données (comme MySQL, PostgreSQL, MongoDB, etc.) et les outils de gestion des dépendances (tels que composer de PHP, gem de Ruby, npm de Node, etc.). En plus de cela, il existe plusieurs façons d’étendre Ansible : les plugins et les modules sont de bonnes options lorsque vous avez besoin d’une fonctionnalité personnalisée qui n’est pas présente par défaut.

Vous pouvez également trouver des modules et des plugins tiers sur le portail Ansible Galaxy.

Se Familiariser avec les Concepts d’Ansible

Nous allons maintenant examiner la terminologie et les concepts d’Ansible pour vous familiariser avec ces termes au fur et à mesure qu’ils apparaissent dans cette série.

Nœud de contrôle

Un nœud de contrôle est un système où Ansible est installé et configuré pour se connecter à vos serveurs. Vous pouvez avoir plusieurs nœuds de contrôle, et tout système capable d’exécuter Ansible peut être configuré en tant que nœud de contrôle, y compris les ordinateurs personnels ou les ordinateurs portables fonctionnant sous un système d’exploitation Linux ou Unix. Pour le moment, Ansible ne peut pas être installé sur des hôtes Windows, mais vous pouvez contourner cette limitation en configurant une machine virtuelle qui exécute Linux et en exécutant Ansible à partir de là.

Nœuds gérés

Les systèmes que vous contrôlez à l’aide d’Ansible sont appelés nœuds gérés. Ansible nécessite que les nœuds gérés soient accessibles via SSH et qu’ils aient Python 2 (version 2.6 ou supérieure) ou Python 3 (version 3.5 ou supérieure) installé.

Ansible prend en charge divers systèmes d’exploitation, y compris les serveurs Windows en tant que nœuds gérés.

Inventaire

Un fichier inventaire contient une liste des hôtes que vous allez gérer à l’aide d’Ansible. Bien qu’Ansible crée généralement un fichier d’inventaire par défaut lors de l’installation, vous pouvez utiliser des inventaires spécifiques au projet pour mieux séparer votre infrastructure et éviter d’exécuter des commandes ou des playbooks sur le mauvais serveur par erreur. Les inventaires statiques sont généralement créés sous forme de fichiers .ini, mais vous pouvez également utiliser des inventaires générés dynamiquement écrits dans n’importe quel langage de programmation capable de renvoyer du JSON.

Tâches

Dans Ansible, une tâche est une unité de travail individuelle à exécuter sur un nœud géré. Chaque action à effectuer est définie comme une tâche. Les tâches peuvent être exécutées comme une action isolée via des commandes ad hoc, ou incluses dans un playbook dans le cadre d’un script d’automatisation.

Playbook

Un playbook contient une liste ordonnée de tâches, ainsi que quelques directives pour indiquer quels hôtes sont la cible de cette automatisation, s’il faut ou non utiliser un système d’élévation de privilèges pour exécuter ces tâches, et des sections facultatives pour définir des variables ou inclure des fichiers. Ansible exécute les tâches séquentiellement, et une exécution complète de playbook est appelée un play. Les playbooks sont écrits au format YAML.

Gestionnaires

Gestionnaires sont utilisés pour effectuer des actions sur un service, comme le redémarrage ou l’arrêt d’un service en cours d’exécution sur le système du nœud géré. Les gestionnaires sont généralement déclenchés par des tâches et leur exécution a lieu à la fin d’un play, après que toutes les tâches soient terminées. De cette manière, si plusieurs tâches déclenchent un redémarrage d’un service, par exemple, le service ne sera redémarré qu’une seule fois et après l’exécution de toutes les tâches. Bien que le comportement par défaut des gestionnaires soit plus efficace et constitue une meilleure pratique, il est également possible de forcer l’exécution immédiate des gestionnaires si cela est requis par une tâche.

Rôles

Un rôle est un ensemble de playbooks et de fichiers connexes organisés dans une structure prédéfinie connue d’Ansible. Les rôles facilitent la réutilisation et la réadaptation des playbooks en paquets partageables d’automatisation granulaire pour des objectifs spécifiques, tels que l’installation d’un serveur web, l’installation d’un environnement PHP ou la configuration d’un serveur MySQL.

Conclusion

Ansible est un outil d’automatisation informatique minimaliste qui présente une courbe d’apprentissage douce, en partie grâce à son utilisation de YAML pour ses scripts de provisionnement. Il dispose d’un grand nombre de modules intégrés qui peuvent être utilisés pour abstraire des tâches telles que l’installation de paquets et l’utilisation de modèles. Ses exigences d’infrastructure simplifiées et sa syntaxe accessible peuvent être un bon choix pour ceux qui débutent en gestion de configuration.

Dans la prochaine partie de cette série, nous verrons comment installer et démarrer avec Ansible sur un serveur Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible