Une introduction à la gestion de la configuration

introduction

En tant que sujet plus vaste, la gestion de la configuration (CM) désigne le processus consistant à gérer systématiquement les modifications apportées à un système de manière à préserver son intégrité dans le temps. Bien que ce processus ne soit pas à l’origine de l’industrie informatique, le terme est généralement utilisé pour faire référence à la * gestion de la configuration du serveur *.

L’automatisation joue un rôle essentiel dans la gestion de la configuration du serveur. C’est le mécanisme utilisé pour amener le serveur à atteindre un état souhaitable, défini au préalable par des scripts de provisioning utilisant le langage et les fonctionnalités spécifiques à un outil. L’automatisation est en fait le cœur de la gestion de la configuration des serveurs. C’est pourquoi il est également courant de faire référence aux outils de gestion de la configuration en tant que Automation Tools ou IT Automation Tools.

Un autre terme couramment utilisé pour décrire les fonctionnalités d’automatisation implémentées par les outils de gestion de la configuration est Server Orchestration ou IT Orchestration, car ces outils sont généralement capables de gérer un à plusieurs centaines de serveurs à partir d’un ordinateur contrôleur central.

Il existe un certain nombre d’outils de gestion de la configuration disponibles sur le marché. Marionnette, 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 ont tous le même objectif: s’assurer que l’état du système correspond à l’état décrit par vos scripts de provisioning.

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, à l’exception des plus simples, seront améliorées grâce aux avantages qu’elle procure. Pour en nommer quelques uns:

Mise en service 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 provisioning. L’automatisation rend le provisioning beaucoup plus rapide et plus efficace, car elle permet d’accomplir des tâches fastidieuses plus rapidement et avec plus de précision que tout être 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 à comparer à quelques minutes avec la gestion / l’automatisation de la configuration.

Récupération rapide à partir d’événements critiques

Le provisionnement rapide présente un autre avantage: une récupération rapide des événements critiques. Lorsqu’un serveur est mis hors ligne pour des raisons inconnues, il peut falloir plusieurs heures pour auditer correctement le système et savoir ce qui s’est réellement passé. Dans de tels scénarios, le déploiement d’un serveur de remplacement constitue généralement le moyen le plus sûr de rétablir vos services en ligne lorsqu’une inspection détaillée est effectuée sur le serveur concerné. Avec 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 un moyen facile de déployer et de réparer rapidement les serveurs, mais elle a souvent un prix. Avec le temps, il peut s’avérer 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 snowflakes uniques, difficiles à gérer et encore plus difficiles à répliquer. En utilisant un outil de gestion de la configuration, la procédure nécessaire pour mettre en place un nouveau serveur ou mettre à jour un serveur existant sera tout documenté 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 de provisioning, vous pourrez appliquer à votre environnement de serveur de nombreux outils et flux de travail que vous utilisez normalement pour le code source du logiciel.

Des outils de contrôle de version, tels que Git, peuvent être utilisés pour suivre les modifications apportées au provisionnement et pour maintenir des branches distinctes pour les versions héritées des scripts. Vous pouvez également utiliser le contrôle de version pour implémenter une stratégie code review pour les scripts d’approvisionnement, dans laquelle toute modification doit être soumise en tant que demande d’extraction et approuvée par un responsable 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 facilite la réplication d’environnements avec le même logiciel et les mêmes configurations. Cela vous permet de créer efficacement un écosystème à plusieurs étages, 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 provisioning. Cette pratique minimisera les problèmes causés par les différences d’environnement qui se produisent fréquemment lorsque des applications sont déployées en production ou partagées entre des collègues dotés de configurations différentes (systèmes d’exploitation, versions de logiciel et / ou configurations différents).

Vue d’ensemble des outils de gestion de la configuration

Même si chaque outil CM a ses propres termes, sa philosophie et son écosystème, ils partagent généralement de nombreuses caractéristiques et ont des concepts similaires.

La plupart des outils de gestion de la configuration utilisent un modèle contrôleur / maître et noeud / agent. Pour l’essentiel, le contrôleur dirige la configuration des noeuds en fonction d’une série d’instructions ou de tasks définis dans vos scripts de provisioning.

Vous trouverez ci-dessous les fonctionnalités les plus courantes présentes dans la plupart des outils de gestion de la configuration pour serveurs:

Cadre d’automatisation

Chaque outil de gestion de contenu fournit une syntaxe spécifique et un ensemble de fonctionnalités que vous pouvez utiliser pour écrire des scripts de provisioning. 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 communes fournies pour faciliter la création de scripts de provisioning plus polyvalents.

Comportement idiot

Les outils de gestion de la configuration assurent le suivi de l’état des ressources afin d’éviter de répéter des tâches exécutées auparavant. Si un paquet a déjà été installé, l’outil ne tentera plus de le réinstaller. L’objectif est qu’après chaque approvisionnement, 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 idiot. Ce comportement n’est cependant pas nécessairement appliqué dans tous les cas.

Informations sur le système

Les outils de gestion de la configuration fournissent généralement des informations détaillées sur le système mis en service. Ces données sont disponibles via des variables globales, appelées facts. Ils comprennent 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 provisioning plus adaptables pour plusieurs systèmes.

Système de gabarit

La plupart des outils CM fourniront un système de modèles intégré pouvant être utilisé pour faciliter la configuration des fichiers de configuration et des services. 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 de n’avoir que des valeurs statiques codées en dur, un modèle devrait contenir des espaces réservés pour les valeurs pouvant changer d’hôte en hôte, telles que + NameServer + et + DocumentRoot +.

Extensibilité

Même si les scripts de provisioning peuvent être très spécialisés pour les besoins et les demandes d’un serveur particulier, il existe de nombreux cas où vous avez des configurations de serveur similaires ou des parties d’une configuration pouvant être partagées entre plusieurs serveurs. La plupart des outils de provisioning vous permettront de réutiliser et de partager facilement de plus petits morceaux de votre configuration de provisioning en tant que modules ou plug-ins.

Les modules et plug-ins 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 de gestion de contenu ont généralement une forte communauté 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 et constitue également un excellent moyen d’apprendre comment les autres utilisateurs ont résolu les problèmes courants à l’aide de l’outil de votre choix.

Choisir un outil de gestion de la configuration

Il existe de nombreux outils CM disponibles sur le marché, chacun avec un ensemble de fonctionnalités et des niveaux de complexité différents. Les choix populaires incluent Chef, Ansible et Puppet. Le premier défi consiste à choisir un outil qui convient à vos besoins.

Avant de faire un choix, vous devez prendre en compte quelques éléments:

Complexité de l’infrastructure

La plupart des outils de gestion de la configuration nécessitent une hiérarchie minimale composée d’un ordinateur contrôleur et d’un nœud qui sera géré par celui-ci. Puppet, par exemple, nécessite l’installation d’une application agent sur chaque nœud et l’installation d’une application master sur la machine du contrôleur. En revanche, Ansible a une structure décentralisée qui ne nécessite pas l’installation de logiciel supplémentaire sur les nœuds, mais qui repose sur SSH pour exécuter les tâches de provisioning. Pour les projets plus petits, une infrastructure simplifiée peut sembler être un meilleur ajustement. Cependant, il est important de prendre en compte 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 la mise en œuvre.

Courbe d’apprentissage

Comme indiqué précédemment dans cet article, les outils de gestion de la configuration fournissent une syntaxe personnalisée, qui utilise parfois un langage DSL (Domain Specific Language), ainsi qu’un ensemble de fonctionnalités qui constituent leur cadre d’automatisation. Comme avec les langages de programmation conventionnels, certains outils nécessiteront une plus longue courbe d’apprentissage pour être maîtrisés. Les exigences en matière d’infrastructure peuvent également influer sur la complexité de l’outil et sur la rapidité avec laquelle vous pourrez constater un retour sur investissement.

Cost

La plupart des outils CM proposent des versions gratuites ou à code source ouvert, avec des abonnements payants pour des fonctionnalités et des services avancés. Certains outils auront plus de limitations que d’autres. Par conséquent, en fonction de vos besoins spécifiques et de la croissance de votre infrastructure, vous pourriez avoir à 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 nécessaire pour que votre équipe soit au fait des outils que vous aurez choisis.

Outillage avancé

Comme mentionné précédemment, la plupart des outils offrent des services payants pouvant inclure du support, des extensions et des outils avancés. Il est important d’analyser vos besoins spécifiques, la taille de votre infrastructure et de déterminer si vous souhaitez ou non utiliser ces services. Les panneaux de gestion, par exemple, constituent un service commun offert par ces outils et 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 ces services, envisagez les options pour une éventuelle nécessité future.

Communauté et soutien

Une communauté forte et accueillante peut s’avérer extrêmement utile en termes de support et de documentation, car les utilisateurs sont généralement ravis de partager leurs connaissances et leurs extensions (modules, plug-ins 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.

Vue d’ensemble 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 sur le marché: Ansible, Puppet et Chef.

Ansible Puppet Chef

Script Language

YAML

Custom DSL based on Ruby

Ruby

Infrastructure

Controller machine applies configuration on nodes via SSH

Puppet Master synchronizes configuration on Puppet Nodes

Chef Workstations push configuration to Chef Server, from which the Chef Nodes will be updated

Requires specialized software for nodes

No

Yes

Yes

Provides centralized point of control

No. Any computer can be a controller

Yes, via Puppet Master

Yes, via Chef Server

Script Terminology

Playbook / Roles

Manifests / Modules

Recipes / Cookbooks

Task Execution Order

Sequential

Non-Sequential

Sequential

Prochaines étapes

Jusqu’à présent, nous avons vu comment fonctionne la gestion de la configuration pour les serveurs et quels éléments prendre en compte lors du choix d’un outil pour construire votre infrastructure de gestion de la configuration. Dans les guides ultérieurs de cette série, nous aurons une expérience pratique de trois outils de gestion de configuration populaires: Ansible, Puppet et Chef.

Afin de vous permettre de comparer ces outils par vous-même, nous allons utiliser un exemple simple d’installation 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 page Web simple.

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 l’automatisation des processus et le suivi des 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 la configuration en utilisant Ansible comme outil.