Une introduction à la gestion de la configuration
- Introduction
En tant que sujet plus large, la gestion de la configuration (CM) fait référence au processus de gestion systématique des modifications apportées à un système de manière à maintenir son intégrité au fil du temps. Même si ce processus n'est pas né dans l'industrie informatique, le terme est largement utilisé pour désigner la gestion de la configuration du serveur.
L'automatisation joue un rôle essentiel dans la gestion de la configuration des serveurs. C'est le mécanisme utilisé pour que le serveur atteigne un état souhaitable, préalablement défini par des scripts de provisionnement utilisant le langage et les fonctionnalités spécifiques d'un outil. L'automatisation est, en fait, le cœur de la gestion de la configuration des serveurs, et c'est pourquoi il est courant de se référer également aux outils de gestion de la configuration en tant que Outils d'automatisation ou Outils d'automatisation informatique.
Un autre terme couramment utilisé pour décrire les fonctionnalités d'automatisation mises en œuvre par les outils de gestion de configuration est Server Orchestration ou IT Orchestration, car ces outils sont généralement capables de gérer un à des centaines de serveurs à partir d'un contrôleur central. machine.
Il existe un certain nombre d'outils de gestion de configuration disponibles sur le marché. Puppet, Ansible, Chef et Salt sont des choix populaires. Bien que chaque outil ait ses propres caractéristiques et fonctionne de manière légèrement différente, ils sont tous motivés par le même objectif : s'assurer que l'état du système correspond à l'état décrit par vos scripts d'approvisionnement. ##Avantages de la gestion de la configuration pour les serveurs Bien que l'utilisation de la gestion de la configuration nécessite généralement plus de planification et d'efforts initiaux que l'administration manuelle du système, toutes les infrastructures de serveur, sauf les plus simples, seront améliorées par les avantages qu'elle offre. Pour n'en nommer que quelques-uns : ###Provisionnement rapide de nouveaux serveurs Chaque fois qu'un nouveau serveur doit être déployé, un outil de gestion de la configuration peut automatiser la plupart, sinon la totalité, du processus de provisionnement pour vous. L'automatisation rend le provisionnement beaucoup plus rapide et efficace, car elle permet d'effectuer des tâches fastidieuses plus rapidement et avec plus de précision que n'importe quel humain. Même avec une documentation appropriée et complète, le déploiement manuel d'un serveur Web, par exemple, peut prendre des heures contre quelques minutes avec la gestion/l'automatisation de la configuration. ###Récupération rapide après des événements critiques Le provisionnement rapide offre un autre avantage : une récupération rapide après des événements critiques. Lorsqu'un serveur se déconnecte en raison de circonstances inconnues, plusieurs heures peuvent être nécessaires pour auditer correctement le système et découvrir ce qui s'est réellement passé. Dans des scénarios comme celui-ci, le déploiement d'un serveur de remplacement est généralement le moyen le plus sûr de remettre vos services en ligne pendant qu'une inspection détaillée est effectuée sur le serveur concerné. Grâce à la gestion de la configuration et à l'automatisation, cela peut être fait de manière rapide et fiable. ###Plus de serveurs Snowflake À première vue, l'administration manuelle du système peut sembler être un moyen facile de déployer et de réparer rapidement des serveurs, mais cela a souvent un prix. Avec le temps, il peut devenir extrêmement difficile de savoir exactement ce qui est installé sur un serveur et quelles modifications ont été apportées, lorsque le processus n'est pas automatisé. Les correctifs manuels, les ajustements de configuration et les mises à jour logicielles peuvent transformer les serveurs en flocons de neige uniques, difficiles à gérer et encore plus difficiles à répliquer. En utilisant un outil de gestion de configuration, la procédure nécessaire à la mise en place d'un nouveau serveur ou à la mise à jour d'un serveur existant sera entièrement documentée dans les scripts de provisioning. ###Contrôle de version pour l'environnement serveur Une fois la configuration de votre serveur traduite en un ensemble de scripts d'approvisionnement, vous pourrez appliquer à votre environnement serveur de nombreux outils et workflows que vous utilisez normalement pour le code source du logiciel.
Les outils de contrôle de version, tels que Git, peuvent être utilisés pour suivre les modifications apportées à l'approvisionnement et pour conserver des branches distinctes pour les versions héritées des scripts. Vous pouvez également utiliser le contrôle de version pour mettre en œuvre une politique de révision de code pour les scripts de provisionnement, où toute modification doit être soumise sous forme de demande d'extraction et approuvée par un chef de projet avant d'être acceptée. Cette pratique ajoutera une cohérence supplémentaire à la configuration de votre infrastructure. ###Environnements répliqués La gestion de la configuration simplifie la réplication d'environnements avec exactement les mêmes logiciels et configurations. Cela vous permet de créer efficacement un écosystème en plusieurs étapes, avec des serveurs de production, de développement et de test. Vous pouvez même utiliser des machines virtuelles locales pour le développement, construites avec les mêmes scripts de provisionnement. Cette pratique minimisera les problèmes causés par les divergences d'environnement qui se produisent fréquemment lorsque les applications sont déployées en production ou partagées entre des collègues avec différentes configurations de machines (différents systèmes d'exploitation, versions logicielles et/ou configurations). ##Présentation des outils de gestion de la configuration Même si chaque outil CM a ses propres termes, philosophie et écosystème, ils partagent généralement de nombreuses caractéristiques et ont des concepts similaires.
La plupart des outils de gestion de configuration utilisent un modèle contrôleur/maître et nœud/agent. Essentiellement, le contrôleur dirige la configuration des nœuds, en fonction d'une série d'instructions ou de tâches définies dans vos scripts de provisionnement.
Vous trouverez ci-dessous les fonctionnalités les plus courantes présentes dans la plupart des outils de gestion de configuration pour serveurs : ###Cadre d'automatisation Chaque outil CM fournit une syntaxe spécifique et un ensemble de fonctionnalités que vous pouvez utiliser pour écrire des scripts de provisionnement. La plupart des outils auront des fonctionnalités qui rendent leur langage similaire aux langages de programmation conventionnels, mais de manière simplifiée. Les variables, les boucles et les conditions sont des fonctionnalités courantes fournies pour faciliter la création de scripts de provisionnement plus polyvalents. ###Comportement idempotent Les outils de gestion de la configuration gardent une trace de l'état des ressources afin d'éviter de répéter les tâches qui ont été exécutées auparavant. Si un paquet a déjà été installé, l'outil 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 ces outils comme ayant un comportement idempotent. Cependant, ce comportement n'est pas nécessairement appliqué dans tous les cas. ###System Facts Les outils de gestion de la configuration fournissent généralement des informations détaillées sur le système en cours de provisionnement. Ces données sont disponibles via des variables globales, appelées facts. Ils incluent des éléments tels que les interfaces réseau, les adresses IP, le système d'exploitation et la distribution. Chaque outil fournira un ensemble différent de facts. Ils peuvent être utilisés pour rendre les scripts et les modèles de provisionnement plus adaptatifs pour plusieurs systèmes. ###Système de modèles La plupart des outils CM fourniront un système de modèles intégré qui peut être utilisé pour faciliter la configuration des fichiers et des services de configuration. Les modèles prennent généralement en charge les variables, les boucles et les conditions qui peuvent être utilisées pour maximiser la polyvalence. Par exemple, vous pouvez utiliser un modèle pour configurer facilement un nouvel hôte virtuel dans Apache, tout en réutilisant le même modèle pour plusieurs installations de serveur. Au lieu d'avoir uniquement des valeurs statiques codées en dur, un modèle doit contenir des espaces réservés pour les valeurs qui peuvent changer d'un hôte à l'autre, telles que NameServer
et DocumentRoot
. ###Extensibilité Même si les scripts d'approvisionnement peuvent être très spécialisés pour les besoins et les exigences d'un serveur particulier, il existe de nombreux cas où vous avez des configurations de serveur similaires ou des parties d'une configuration qui pourraient être partagées entre plusieurs serveurs. La plupart des outils d'approvisionnement vous fourniront des moyens de réutiliser et de partager facilement de plus petits morceaux de votre configuration d'approvisionnement sous forme de modules ou de plug-ins.
Les modules et plugins tiers sont souvent faciles à trouver sur Internet, en particulier pour les configurations de serveur courantes telles que l'installation d'un serveur Web PHP. Les outils CM ont tendance à avoir une communauté forte autour d'eux et les utilisateurs sont encouragés à partager leurs extensions personnalisées. L'utilisation d'extensions fournies par d'autres utilisateurs peut vous faire gagner beaucoup de temps, tout en étant un excellent moyen d'apprendre comment d'autres utilisateurs ont résolu des problèmes courants à l'aide de l'outil de votre choix. ##Choisir un outil de gestion de configuration Il existe de nombreux outils CM disponibles sur le marché, chacun avec un ensemble différent de fonctionnalités et différents niveaux de complexité. Les choix populaires incluent Chef, Ansible et Puppet. Le premier défi est de choisir un outil adapté à vos besoins.
Il y a quelques éléments à prendre en compte avant de faire un choix : ### Complexité de l'infrastructure La plupart des outils de gestion de configuration nécessitent une hiérarchie minimale composée d'une machine contrôleur et d'un nœud qui sera géré par elle. Puppet, par exemple, nécessite l'installation d'une application agent sur chaque nœud et d'une application maître sur la machine du contrôleur. Ansible, en revanche, a une structure décentralisée qui ne nécessite pas l'installation de logiciels supplémentaires sur les nœuds, mais s'appuie sur SSH pour exécuter les tâches de provisionnement. Pour les petits projets, une infrastructure simplifiée peut sembler mieux adaptée, mais il est important de prendre en considération des aspects tels que l'évolutivité et la sécurité, qui peuvent ne pas être appliqués par l'outil.
Certains outils peuvent avoir plus de composants et de pièces mobiles, ce qui peut augmenter la complexité de votre infrastructure, avoir un impact sur la courbe d'apprentissage et éventuellement augmenter le coût global de mise en œuvre. ###Courbe d'apprentissage Comme mentionné précédemment dans cet article, les outils CM fournissent une syntaxe personnalisée, utilisant parfois un langage spécifique au domaine (DSL), et un ensemble de fonctionnalités qui composent leur cadre d'automatisation. Comme avec les langages de programmation conventionnels, certains outils exigeront une courbe d'apprentissage plus élevée pour être maîtrisés. Les exigences d'infrastructure peuvent également influencer la complexité de l'outil et la rapidité avec laquelle vous pourrez voir un retour sur investissement. ###Coût La plupart des outils CM proposent des versions gratuites ou open source, avec des abonnements payants pour des fonctionnalités et services avancés. Certains outils auront plus de limitations que d'autres, donc en fonction de vos besoins spécifiques et de la croissance de votre infrastructure, vous devrez peut-être payer pour ces services. Vous devez également considérer la formation comme un coût supplémentaire potentiel, non seulement en termes monétaires, mais également en ce qui concerne le temps qui sera nécessaire pour que votre équipe soit au courant de l'outil que vous aurez finalement choisi. ###Outils avancés Comme mentionné précédemment, la plupart des outils proposent des services payants pouvant inclure une assistance, des extensions et des outils avancés. Il est important d'analyser vos besoins spécifiques, la taille de votre infrastructure et la nécessité ou non d'utiliser ces services. Les panneaux de gestion, par exemple, sont un service commun offert par ces outils, et ils peuvent grandement faciliter le processus de gestion et de surveillance de tous vos serveurs à partir d'un point central. Même si vous n'avez pas encore besoin de tels services, considérez les options pour une éventuelle nécessité future. ###Communauté et support Une communauté forte et accueillante peut être extrêmement ingénieuse pour le support et la documentation, car les utilisateurs sont généralement heureux de partager leurs connaissances et leurs extensions (modules, plugins et scripts de provisioning) avec d'autres utilisateurs. Cela peut être utile pour accélérer votre courbe d'apprentissage et éviter des coûts supplémentaires avec une assistance ou une formation payante. ##Aperçu des outils populaires Le tableau ci-dessous devrait vous donner un aperçu rapide des principales différences entre trois des outils de gestion de configuration les plus populaires disponibles sur le marché aujourd'hui : Ansible, Puppet et Chef.
Ansible | Fantoche | Chef | |
---|---|---|---|
Langage de script | YAML | DSL personnalisé basé sur Ruby | Rubis |
Infrastructure | La machine du contrôleur applique la configuration sur les nœuds via SSH | Puppet Master synchronise la configuration sur les nœuds Puppet | Les postes de travail Chef envoient la configuration au serveur Chef, à partir duquel les nœuds Chef seront mis à jour |
Nécessite un logiciel spécialisé pour les nœuds | Non | Oui | Oui |
Fournit un point de contrôle centralisé | Non. N'importe quel ordinateur peut être un contrôleur | Oui, via Puppet Master | Oui, via Chef Server |
Terminologie des scripts | Playbook / Rôles | Manifestes / Modules | Recettes / Livres de cuisine |
Ordre d'exécution des tâches | Séquentiel | Non séquentielle | Séquentiel |
- Étapes suivantes Jusqu'à présent, nous avons vu comment la gestion de la configuration fonctionne pour les serveurs et ce qu'il faut prendre en compte lors du choix d'un outil pour créer votre infrastructure de gestion de la configuration. Dans les guides suivants de cette série, nous aurons une expérience pratique avec trois outils de gestion de configuration populaires : Ansible, Puppet et Chef.
Afin de vous donner une chance de comparer ces outils par vous-même, nous allons utiliser un exemple simple de configuration de serveur qui devrait être entièrement automatisé par chaque outil. Cette configuration consiste en un serveur Ubuntu 18.04 exécutant Apache pour héberger une simple page Web. ##Conclusion La gestion de la configuration peut considérablement améliorer l'intégrité des serveurs au fil du temps en fournissant un cadre pour automatiser les processus et suivre les modifications apportées à l'environnement système. Dans le prochain guide de cette série, nous verrons comment mettre en œuvre une stratégie de gestion de configuration en pratique en utilisant Ansible comme outil.