Introduction à la terminologie et aux concepts de SaltStack

introduction

Salt, ou SaltStack, est un outil d’exécution à distance et un système de gestion de la configuration. Les fonctionnalités d'exécution à distance permettent aux administrateurs d'exécuter des commandes sur différentes machines en parallèle avec un système de ciblage flexible. La fonctionnalité de gestion de la configuration établit un modèle client-serveur pour mettre rapidement, facilement et en toute sécurité les composants d'infrastructure en conformité avec une stratégie donnée.

Dans ce guide, nous aborderons certains des concepts de base et de la terminologie nécessaires pour apprendre efficacement à utiliser Salt.

Machine à sel

La structure de contrôle de Salt est assez simple au fur et à mesure que les systèmes de gestion de configuration disparaissent. Dans une configuration typique, il n'y a que deux classes distinctes de machines.

Maître

Le Saltmaster est la machine qui contrôle l'infrastructure et dicte les politiques des serveurs qu'il gère. Il fonctionne à la fois en tant que référentiel pour les données de configuration et en tant que centre de contrôle qui lance des commandes à distance et assure l'état de vos autres ordinateurs. Un démon appelésalt-master est installé sur le maître pour fournir cette fonctionnalité.

Bien qu'il soit possible de contrôler l'infrastructure à l'aide d'une configuration sans maître, la plupart des configurations bénéficient des fonctionnalités avancées disponibles dans le maître Salt. En fait, pour une gestion d’infrastructure plus étendue, Salt peut déléguer certains serveurs et tâches généralement associés au maître à des serveurs dédiés. Il peut également fonctionner dans une configuration maître hiérarchisée où les commandes peuvent être relayées via des machines maîtres inférieures.

Minions

Les serveurs gérés par Salt sont appelésminions. Un démon appelésalt-minion est installé sur chacune des machines gérées et configuré pour communiquer avec le maître. Le séide est chargé d'exécuter les instructions envoyées par le maître, de rendre compte de la réussite des tâches et de fournir des données sur l'hôte sous-jacent.

Comment les composants de sel communiquent

Les maîtres de sel et les sbires, par défaut, communiquent à l'aide de la bibliothèque de messagerie ZeroMQ. Ceci fournit une communication réseau extrêmement performante entre les parties, permettant à Salt d’envoyer des messages et des données à une vitesse rapide. Comme ZeroMQ est une bibliothèque et non un service indépendant, cette fonctionnalité est disponible dans les démonssalt-master etsalt-minion de manière native.

Lorsque vous utilisez ZeroMQ, Salt maintient un système de clé publique pour l’authentification des maîtres et des sbires. Lors du premier démarrage, un serviteur génère une paire de clés et envoie ses informations d'identification au serveur maître avec lequel il est configuré. Le maître peut alors accepter cette clé après avoir vérifié l'identité du séide. Les deux parties peuvent alors communiquer rapidement et en toute sécurité en utilisant ZeroMQ crypté avec les clés.

Si pour une raison quelconque, il est impossible d'installer le démonsalt-minion sur un nœud, Salt peut également émettre des commandes via SSH. Cette option de transport est fournie pour plus de commodité, mais elle dégrade considérablement les performances et peut entraîner des complications avec d'autres commandes Salt dans certains cas. Il est fortement recommandé d'utiliser le démonsalt-minion lorsque cela est possible pour les performances, la sécurité et la simplicité.

Terminologie du sel

Avant de plonger dans Salt, il est judicieux de vous familiariser avec la terminologie utilisée. Salt possède de nombreuses fonctionnalités puissantes, mais il peut être difficile de faire correspondre les noms à leurs fonctionnalités au début. Jetons un coup d’œil à certains termes plus généraux que vous êtes susceptible de voir.

Exécution à distance: modules et fonctions d'exécution

Salt tente d'établir une distinction entre ses fonctions d'exécution à distance et de gestion de la configuration. Les capacités d'exécution à distance sont fournies parexecution modules. Les modules d'exécution sont des ensembles defunctionsassociés qui effectuent un travail sur les serviteurs.

Alors que Salt inclut des fonctions qui vous permettent d’exécuter des commandes shell arbitraires sur des serviteurs, l’idée sous-jacente aux modules d’exécution est de fournir un mécanisme concis permettant d’exécuter des commandes sans avoir à «masquer» et à fournir des instructions détaillées sur la procédure à suivre. L'utilisation de modules permet à Salt d'abstraire les différences sous-jacentes entre les systèmes. Vous pouvez obtenir des informations similaires auprès des sbires exécutant Linux ou BSD, même si les mécanismes réels pour collecter ces données seraient différents.

Salt est livré avec une sélection décente debuiltin execution modules pour fournir des fonctionnalités prêtes à l'emploi. Les administrateurs peuvent également écrire leurs propres modules ou inclurecommunity-written modules pour étendre la bibliothèque de commandes qui peuvent être exécutées sur les machines minion.

Gestion de la configuration: états, formules et modèles

La fonctionnalité de gestion de la configuration de Salt est accessible en créant des référentiels de fichiers de configuration. Les fichiers contenus dans ces référentiels peuvent être de différents types.

États et formules

La partie gestion de la configuration de Salt est principalement implémentée à l'aide du systèmestate.

Le système d'état utilisestate modules, qui sont distincts des modules d'exécution décrits ci-dessus. Heureusement, les modules d’état et d’exécution ont tendance à se refléter assez étroitement. Le système d'état porte bien son nom, car il permet à un administrateur de décrire l'état dans lequel un système doit être placé. Comme pour les modules d'exécution, la plupart des modules d'état représentent des raccourcis de fonctionnalités et fournissent une syntaxe simple pour de nombreuses actions courantes. Cela aide à maintenir la lisibilité et supprime la nécessité d'inclure une logique complexe dans les fichiers de gestion de la configuration eux-mêmes.

Saltformulas sont des ensembles d'appels de module d'état, arrangés dans le but de produire un certain résultat. Ce sont les fichiers de gestion de la configuration qui décrivent l'apparence d'un système une fois la formule appliquée. Par défaut, ceux-ci sont écrits au format de sérialisation YAML, ce qui constitue un très bon compromis entre lisibilité élevée et convivialité.

L'administrateur de Salt peut appliquer des formules en mappant des serviteurs à des ensembles spécifiques de formules. Les formules peuvent également être appliquées de manière ad hoc si nécessaire. Les serviteurs exécuteront les modules d'état trouvés à l'intérieur afin de mettre leur système en conformité avec la politique fournie.

Une bonne collection de formules Salt créées par l'organisation et la communauté SaltStack peut être trouvée dansthis GitHub account.

Modèles

Templating permet d'écrire les formules Salt et d'autres fichiers d'une manière plus flexible. Les modèles peuvent utiliser les informations disponibles sur les minions pour construire des versions personnalisées de formules ou de fichiers de configuration. Par défaut, Salt utilise le format de modèle Jinja, qui fournit une fonctionnalité de substitution et des constructions logiques simples pour la prise de décision.

Renderers sont les composants qui exécutent le modèle pour produire des fichiers d'état ou de configuration valides. Les rendus sont définis par le format de gabarit qui constitue le format d'entrée et le format de sérialisation des données qui seront produits en sortie. Compte tenu des valeurs par défaut décrites ci-dessus, le moteur de rendu par défaut traite les modèles Jinja afin de générer des fichiers YAML.

Interroger sur et attribuer des informations à des Minions

Pour gérer un grand nombre de systèmes, Salt nécessite des informations sur chacun des systèmes hôtes. Les modèles décrits ci-dessus peuvent utiliser les données associées à chaque système pour personnaliser le comportement de chaque séide. Il existe plusieurs systèmes en place pour interroger ou attribuer ces informations à des hôtes.

Céréales

Saltgrains sont des informations, collectées et maintenues par un serviteur, concernant principalement son système hôte sous-jacent. Celles-ci sont généralement collectées par le démonsalt-minion et renvoyées au maître sur demande. Cette fonctionnalité peut être exploitée à différentes fins.

Par exemple, les données de grain peuvent être utilisées pour cibler un sous-ensemble spécifique de nœuds du pool de serveurs pour l'exécution à distance ou la gestion de la configuration. Si vous voulez voir la disponibilité de vos serveurs Ubuntu, les céréales vous permettent de ne cibler que ces machines.

Les grains peuvent également être utilisés comme arguments pour des modifications de configuration ou des commandes. Par exemple, vous pouvez utiliser grains pour obtenir l'adresse IPv4 associée à l'interfaceeth0 pour une modification d'un fichier de configuration ou comme argument d'une commande.

Les administrateurs peuvent également attribuer des grains à des serviteurs. Par exemple, il est assez courant d'utiliser des grains pour attribuer un "rôle" à un serveur. Cela peut ensuite être utilisé pour cibler un sous-ensemble de nœuds similaire à l'exemple de système d'exploitation ci-dessus.

Piliers

Bien qu'il soit possible d'attribuer des grains à des serviteurs, la grande majorité des variables de configuration seront attribuées via le systèmepillars. Dans Salt, un pilier représente un magasin de valeurs-clés qu'un sbire peut utiliser pour récupérer des données attribuées arbitrairement. Cela fonctionne comme une structure de données de dictionnaire qui peut être imbriquée ou hiérarchisée à des fins d'organisation.

Les piliers offrent quelques avantages importants par rapport au système à grains pour attribuer des valeurs. Plus important encore, les données sur les piliers ne sont disponibles que pour les minions qui leur sont affectées. Les autres sbires n'auront pas accès aux valeurs stockées à l'intérieur. Cela le rend idéal pour stocker des données sensibles spécifiques à un nœud ou à un sous-ensemble de nœuds. Par exemple, les clés secrètes ou les chaînes de connexion à la base de données sont souvent fournies dans une configuration de pilier.

Les données Pillar sont souvent utilisées dans le contexte de gestion de la configuration pour injecter des données variables dans un modèle de configuration. Salt propose une sélection de formats de gabarit pour remplacer les parties variables d’un fichier de configuration par les éléments spécifiques au nœud qui l’appliquera. Les grains sont également souvent utilisés de cette manière pour référencer les données de l'hôte.

Mine

Saltmine est une zone sur le serveur maître où les résultats des commandes régulièrement exécutées sur les serviteurs peuvent être stockés. Le but de ce système est de collecter les résultats de commandes arbitraires exécutées sur des machines minions. Ce magasin global peut ensuite être interrogé par d'autres composants et sbires de votre infrastructure.

La mine de sel ne stocke que le résultat le plus récent pour chaque exécution de commande, ce qui signifie que cela ne vous aidera pas si vous avez besoin d'accéder à des données historiques. L'objectif principal de la mine est de fournir des informations actualisées à partir de machines minions en tant que complément flexible aux données de grain déjà disponibles. Les sbires peuvent interroger des données sur leurs homologues à l'aide du système minier. L’intervalle dans lequel le séide rafraîchit les données de la mine peut être configuré par séprime.

Fonctionnalité supplémentaire

Salt fournit quelques autres systèmes qui ne rentrent pas bien dans les catégories ci-dessus.

Les réacteurs

Le système Saltreactor fournit un mécanisme pour déclencher des actions en réponse aux événements générés. Dans Salt, les changements survenant dans l'ensemble de votre infrastructure amèneront les démonssalt-minion ousalt-master à générer des événements sur un bus de messages ZeroMQ. Le système de réacteur surveille ce bus et compare les événements à ses réacteurs configurés afin de répondre de manière appropriée.

L'objectif principal du système de réacteur est de fournir un système flexible permettant de créer des réponses situationnelles automatisées. Par exemple, si vous avez développé une stratégie de dimensionnement automatique, votre système créera automatiquement des nœuds pour répondre de manière dynamique à vos demandes en ressources. Chaque nouveau nœud déclencherait un événement. Un réacteur pourrait être configuré pour écouter ces événements et configurer le nouveau nœud, en l'intégrant dans l'infrastructure existante.

Coureurs

Saltrunners sont des modules qui s'exécutent sur le serveur maître au lieu des serviteurs. Certains coureurs sont des utilitaires à usage général utilisés pour vérifier l’état de diverses parties du système ou effectuer des opérations de maintenance. Certaines sont des applications puissantes permettant d'orchestrer votre infrastructure à plus grande échelle.

Retours

Saltreturners sont utilisés pour spécifier des emplacements alternatifs où les résultats d'une action exécutée sur un serviteur seront envoyés. Par défaut, les sbires renvoient leurs données au maître. Un renvoi permet à l'administrateur de rediriger les données de retour vers une autre destination. En règle générale, cela signifie que les résultats sont renvoyés à la destination spécifiée par le retourneurand vers le processus qui a lancé la commande minion.

Le plus souvent, les utilisateurs de retour transmettent les résultats à un système de base de données ou à un service de métrique ou de journalisation. Ceci fournit une méthode flexible pour obtenir des données arbitraires dans ces systèmes. Les retours peuvent également être utilisés pour collecter des données spécifiques à Salt, telles que des caches de travaux et des données d'événement.

Commandes Sel

Salt fournit un certain nombre de commandes pour tirer parti des composants décrits ci-dessus. Il existe d'importants chevauchements de fonctionnalités entre ces outils, mais nous avons tenté de souligner leurs principales fonctions ci-dessous.

  • salt-master: il s'agit du processus du démon maître. Vous pouvez démarrer le service principal avec cette commande directement, ou plus généralement, via un script d'initialisation ou un fichier de service.

  • salt-minion: De même, il s'agit d'un processus démon minion, utilisé pour communiquer avec le maître et exécuter des commandes. La plupart des utilisateurs commenceront également cette opération à partir de scripts d'initialisation ou de fichiers de service.

  • salt-key: Cet outil est utilisé pour gérer les clés publiques des sbires. Cet outil est utilisé pour afficher les clés actuelles et pour prendre des décisions concernant les clés publiques envoyées par les éventuels serviteurs. Il peut également générer des clés à placer sur des sbires hors bande.

  • salt: Cette commande est utilisée pour cibler les sbires afin d'exécuter des modules d'exécution ad-hoc. C'est l'outil principal utilisé pour l'exécution à distance.

  • salt-ssh: Cette commande vous permet d'utiliser SSH comme alternative à ZeroMQ pour le mécanisme de transport.

  • salt-run: cette commande est utilisée pour exécuter les modules d'exécution sur le serveur maître.

  • salt-call: Cette commande est utilisée pour exécuter des modules d'exécution directement sur un serviteur auquel vous êtes connecté. Ceci est souvent utilisé pour déboguer des commandes problématiques en contournant le maître.

  • salt-cloud: cette commande est utilisée pour contrôler et provisionner les ressources cloud de nombreux fournisseurs différents. Les nouveaux sbires peuvent facilement être créés et démarrés.

Il existe également d’autres commandes, commesalt-api,salt-cp etsalt-syndic, qui ne sont pas utilisées aussi souvent.

Conclusion

Maintenant que vous connaissez la terminologie de base de SaltStack et que vous comprenez parfaitement les outils que vous rencontrerez sont responsables, vous pouvez commencer à configurer Salt pour contrôler votre infrastructure. Dans lesnext guide, nous verrons comment installer et configurer un serveur maître Salt sur un serveur Ubuntu 14.04. Nous montrerons également comment configurer de nouveaux serveurs sbires pour les placer sous la gestion de votre maître.