Conceptual article

Une introduction à la gestion de la configuration avec Ansible

Configuration ManagementAnsibleConceptual

Introduction

La gestion de la configuration est le processus qui consiste à traiter les modifications apportées à un système de manière à en assurer l'intégrité dans le temps, ce qui implique généralement des outils et des processus qui facilitent l'automatisation et l'observabilité. Même si ce concept n'est pas issu de l'industrie informatique, le terme est largement utilisé pour désigner la gestion de la configuration des serveurs.

Dans le contexte des serveurs, la gestion de la configuration est aussi communément appelée automatisation informatique ou orchestration des serveurs. Ces deux termes mettent en évidence les aspects pratiques de la gestion de la configuration et la possibilité de contrôler plusieurs systèmes à partir d'un serveur central.

Ce guide vous expliquera les avantages de l'utilisation d'un outil de gestion de la configuration pour automatiser la configuration de votre infrastructure de serveurs, et comment un tel outil, Ansible, peut vous aider à cet égard.

Les avantages de l'utilisation d'un outil de gestion de la configuration

Il existe sur le marché un certain nombre d'outils de gestion de la configuration, avec des niveaux de complexité variables et des styles architecturaux variés. Bien que chacun de ces outils ait ses propres caractéristiques et fonctionne de manière légèrement différente, ils remplissent 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 la configuration des serveurs proviennent de la possibilité de définir votre infrastructure sous forme de code. Cela vous permet de :

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

En outre, les outils de gestion de la configuration vous permettent de contrôler un à plusieurs centaines de serveurs depuis un emplacement centralisé, ce qui peut améliorer considérablement l'efficacité et l'intégrité de votre infrastructure de serveurs.

Aperçu d'Ansible

Ansible est un outil moderne de gestion de la configuration qui facilite la tâche de mise en place et de maintenance des serveurs distants, avec une conception minimaliste destinée à rendre les utilisateurs rapidement opérationnels.

Les utilisateurs écrivent les scripts de provisionnement Ansible dans YAML, une norme de sérialisation des données user-friendly qui n'est pas liée à un 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 de 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 cadre d'automatisation, Ansible encapsule toutes les caractéristiques communes présentes dans d'autres outils de la même catégorie, tout en maintenant un fort accent sur la simplicité et la performance :

Comportement Idempotent

Ansible garde une trace de l'état des ressources dans les systèmes gérés afin d'éviter de répéter des tâches qui ont été exécutées auparavant. Si un package était déjà installé, il n'essaiera pas de l'installer à nouveau. L'objectif est qu'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 les autres outils de gestion de la configuration comme ayant un comportement idempotent. Lors de l'exécution d'un modèle de développement, vous verrez le statut de chaque tâche en cours d'exécution et si la tâche a effectué ou non un changement dans le système.

Soutien aux variables, aux conditions et aux boucles

Lors de l'écriture des scripts d'automatisation Ansible, vous pouvez utiliser des variables, des conditions et des boucles afin de rendre votre automatisation plus polyvalente et plus efficace.

Faits relatifs au 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 relatifs au système. Les faits peuvent être utilisés dans les modèles de développement pour rendre votre automatisation plus polyvalente et adaptative, en se comportant différemment selon le système mis en place.

Système de modèles

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

Soutien aux extensions et aux modules

Ansible est doté de centaines de modules intégrés facilitant l'automatisation de l'écriture pour les tâches courantes d'administration des systèmes (telles que l'installation de packages avec apt et la synchronisation de fichiers avec rsync), et permettant aussi de traiter les logiciels populaires tels que les systèmes de bases de données (comme MySQL, PostgreSQL, MongoDB, et d'autres) et les outils de gestion des dépendances (comme le compositeur de PHP, le gem de Ruby, le npm de Node, et d'autres). En dehors de cela, il existe différentes 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 dans le portail Ansible Galaxy.

Se familiariser avec les concepts d'Ansible

Nous allons maintenant jeter un coup d'œil à la terminologie et aux concepts d'Ansible pour vous aider à 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 dans lequel Ansible est installé et configuré pour se connecter à votre serveur. Vous pouvez avoir plusieurs nœuds de contrôle, et tout système capable de faire fonctionner Ansible peut être configuré comme un nœud de contrôle, y compris les ordinateurs personnels ou portables fonctionnant avec un système d'exploitation basé sur Linux ou Unix. Pour l'instant, Ansible ne peut pas être installé sur des hôtes Windows, mais vous pouvez contourner cette limitation en installant une machine virtuelle qui fonctionne sous 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 une variété de systèmes d'exploitation, y compris les serveurs Windows en tant que nœuds gérés.

Inventaire

Un fichier d'inventaire contient une liste des hôtes que vous gérerez à l'aide d'Ansible. Bien qu'Ansible crée généralement un fichier d'inventaire par défaut lorsqu'il est installé, vous pouvez utiliser des inventaires par projet pour avoir une meilleure séparation de votre infrastructure et éviter d'exécuter des commandes ou des modèles de développement 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 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 ponctuelle via des commandes ad hoc, ou incluses dans un modèle de développement dans le cadre d'un script d'automatisation.

Modèle de développement

Un modèle de développement contient une liste ordonnée de tâches, et quelques autres directives pour indiquer quels hôtes sont la cible de cette automatisation, s'il faut ou non utiliser un système d'escalade de privilèges pour exécuter ces tâches, et des sections optionnelles pour définir des variables ou inclure des fichiers. Ansible exécute les tâches de manière séquentielle, et l'exécution complète d'un modèle de développement est appelée développement. Les modèles de développement sont écrits au format YAML.

Handlers

Les handlers sont utilisés pour effectuer des actions sur un service, telles que le redémarrage ou l'arrêt d'un service qui fonctionne activement sur le système du nœud géré. Les handlers sont généralement déclenchés par des tâches, et leur exécution a lieu à la fin d'un développement, une fois que toutes les tâches sont terminées. Ainsi, si de multiples tâches déclenchent le redémarrage d'un service, par exemple, le service ne sera redémarré qu'une fois et après l'exécution de toutes les tâches. Bien que le comportement du handler par défaut soit plus efficace et globalement une meilleure pratique, il est également possible de forcer l'exécution immédiate du handler si cela est requis par une tâche.

Rôles

Un rôle est un ensemble de modèles de développement et de fichiers connexes organisés dans une structure prédéfinie qui est connue par Ansible. Les rôles facilitent la réutilisation et la reconversion des modèles de développement en packages 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 mise en place d'un serveur MySQL.

Conclusion

Ansible est un outil d'automatisation informatique minimaliste qui a 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 packages et le travail avec des modèles. Ses exigences simplifiées en matière d'infrastructure et sa syntaxe accessible peuvent convenir à ceux qui se lancent dans la gestion de la configuration.

Dans la prochaine partie de cette série, nous verrons comment installer et commencer à utiliser Ansible sur un serveur Ubuntu 20.04.

0 Comments

Creative Commons License