La plupart des utilisateurs trouvent utile de comprendre ce qu'est Salt et comment il fonctionne avant de commencer le processus d'installation. Salt utilise un modèle master-client dans lequel un master Salt émet des commandes sur un client et le client exécute la commande.

Note : Dans le cadre de l'initiative de VMware visant à supprimer la terminologie problématique, le terme master Salt sera remplacé par un meilleur terme dans SaltStack Config et les produits associés, ainsi que dans la documentation. Cette mise à jour terminologique peut s'étendre sur plusieurs cycles de publication.

Qu'est-ce que Salt ?

SaltStack Config est optimisé par Salt, une infrastructure d'exécution à distance open source basée sur Python utilisée pour :

  • Gestion de la configuration
  • Automatisation
  • Provisionnement
  • Orchestration

Salt est la technologie qui sous-tend les fonctionnalités essentielles de SaltStack Config. SaltStack Config améliore et étend Salt, en fournissant des fonctionnalités supplémentaires qui améliorent la facilité d'utilisation. Pour obtenir un résumé de l'infrastructure SaltStack Config, reportez-vous à la section Architecture du système SaltStack Config.

Le diagramme suivant présente les principaux composants de l'architecture Salt de base :


Architecture Salt

Les sections suivantes décrivent certains des principaux composants de l'architecture Salt pertinents pour l'installation de SaltStack Config.

Masters Salt et minions Salt

Salt utilise le modèle master-client dans lequel un master Salt émet des commandes à un client et le client exécute la commande. Dans l'écosystème Salt, le master Salt est un serveur qui exécute le service de master Salt. Il exécute des commandes sur un ou plusieurs minions Salt, qui sont des nœuds qui exécutent le service de minion et qui sont enregistrés dans ce master Salt particulier.

Salt peut également être décrit comme un modèle éditeur-abonné. Le master Salt publie les tâches à exécuter et les minions s'y abonnent. Lorsqu'une tâche spécifique s'applique à ce minion, il l'exécute.

Lorsqu'un minion termine l'exécution d'une tâche, il renvoie les données de la tâche au master Salt. Salt dispose de deux ports utilisés par défaut pour permettre aux minions de communiquer avec leur master Salt. Ces ports fonctionnent en synergie pour recevoir et fournir des données au bus de messages. Le bus de messages de Salt est ZeroMQ, ce qui crée une topologie réseau asynchrone pour fournir la communication la plus rapide possible.

Cibles et grains

Le master Salt indique quels minions doivent exécuter la tâche en définissant une cible. Une cible est le groupe de minions, dans un ou plusieurs masters Salt, à qui s'applique la commande Salt d'une tâche.

Note :

Un master Salt peut également être géré comme un minion et peut être une cible s'il exécute le service de minion.

Voici un exemple de l'un des nombreux types de commandes qu'un master Salt peut émettre sur un minion. Cette commande indique que tous les minions doivent installer l'application Vim :

salt -v '*' pkg.install vim

Dans ce cas, '*' est la cible, ce qui indique que tous les minions doivent exécuter cette commande. De nombreuses autres cibles sont disponibles, notamment le ciblage d'un minion spécifique par son ID ou le ciblage de minions par leurs traits ou caractéristiques partagés (appelés grains dans Salt).

Salt est livré avec une interface permettant de déduire des informations sur le système sous-jacent. Il s'agit de l'interface en grains, car elle présente Salt avec des grains d'information. Des grains sont collectées pour les systèmes d'exploitation, le nom de domaine, l'adresse IP, le noyau, le type de système d'exploitation, la mémoire, ainsi que de nombreuses autres propriétés système. Vous pouvez également créer vos propres données de grain personnalisées.

Les données de grain sont relativement statiques. Cependant, les données de grain sont actualisées lorsque les informations système changent (comme les paramètres réseau) ou lorsqu'une nouvelle valeur est attribuée à un grain personnalisé.

Ouvrir le système d'événements (bus d'événements)

Le système d'événements est utilisé pour la communication entre processus, entre le master et les minions Salt. Dans le système d'événements :

  • Les événements sont vus par le master et les minions Salt.
  • Les événements peuvent être surveillés et évalués par les deux.

Le bus d'événements est la base de l'orchestration et de la surveillance en temps réel.

Tous les minions voient les tâches et les résultats en s'abonnant aux événements publiés sur le système d'événements. Salt utilise un système d'événements enfichable avec deux couches :

  • ZeroMQ (0MQ) : bibliothèque de niveau socket par défaut actuelle fournissant une couche de transport flexible.
  • Tornado : système d'événements de couche de transport basé sur TCP complet.

L'un des plus grands points forts de Salt est sa vitesse d'exécution. Le bus de communication du système d'événements est plus efficace que l'exécution d'un service Web de niveau supérieur (http). Le système d'exécution à distance est le composant sur lequel reposent tous les composants, ce qui permet à l'exécution à distance de répartir la charge entre les ressources.

États Salt

En plus de l'exécution à distance, Salt fournit une autre méthode de configuration des minions en déclarant l'état dans lequel un minion doit se trouver, autrement appelé état Salt. Les états Salt rendent possible la gestion de la configuration. Vous pouvez utiliser les états Salt pour déployer et gérer l'infrastructure avec des fichiers YAML simples. À l'aide des états, vous pouvez automatiser des tâches récursives et prévisibles en mettant en file d'attente les tâches pour que Salt les implémente sans intervention de l'utilisateur. Vous pouvez également ajouter une logique conditionnelle plus complexe pour les fichiers d'état avec Jinja.

Pour illustrer les différences entre l'exécution à distance et la gestion de la configuration, prenez la commande référencée dans la section précédente sur les cibles et les grains dans laquelle Salt a installé l'application Vim sur tous les minions :

Méthodologie

Implémentation

Résultat

Exécution à distance

  • Exécutez salt-v'*'pkg.installvim depuis le terminal
  • Installe Vim à distance sur les minions ciblés

Gestion de la configuration

  • Écrire un fichier d'état YAML qui vérifie si Vim est installé
  • Ce fichier d'état est ensuite appliqué aux minions ciblés
  • S'assure que Vim est toujours installé sur les minions ciblés
  • Salt analyse le fichier d'état et détermine les actions à effectuer pour s'assurer que le minion est conforme aux déclarations d'état
  • Si Vim n'est pas installé, il automatise les processus d'installation de Vim sur les minions ciblés

Le fichier d'état qui vérifie que Vim est installé peut ressembler à l'exemple suivant :

# File:/srv/salt/vim_install.sls
install_vim_now:
  pkg.installed:
     -pkgs:
         -vim

Pour appliquer cet état à un minion, vous devez utiliser le module state.apply, comme dans l'exemple suivant :

salt '*' state.apply vim_install

Cette commande applique l'état vim_install à tous les minions.

Les formules sont des collections d'états qui fonctionnent en harmonie pour configurer une application ou un minion. Par exemple, un état peut déclencher un autre état.

Fichier Top

Il n'est pas pratique d'exécuter manuellement chaque état en ciblant individuellement des minions spécifiques à chaque fois. Certains environnements ont des centaines de fichiers d'état qui ciblent des milliers de minions.

Salt offre deux fonctionnalités pour résoudre ce problème de mise à l'échelle :

  • Le fichier top.sls : mappe Salt aux minions applicables.
  • Exécution d'Highstate : exécute tous les états Salt décrits dans top.sls dans une exécution unique.

Le fichier Top mappe les états à appliquer à différents minions dans certains environnements. Voici un exemple d'un fichier Top simple :

# File: /srv/salt/top.sls
base:
  '*':
    - all_server_setup
  
  '01webserver':
    - web_server_setup

Dans cet exemple, base fait référence à l'environnement Salt, qui est la valeur par défaut. Vous pouvez spécifier plusieurs environnements en cas de besoin, tels que Production, Développement, Assurance qualité, etc.

Les groupes de minions sont spécifiés sous l'environnement et les états sont répertoriés pour chaque ensemble de minions. Ce fichier Top indique qu'un état appelé all_server_setup doit être appliqué à tous les minions '*' et l'état appelé web_server_setup doit être appliqué au minion 01webserver.

Pour exécuter la commande Salt, vous devez utiliser la fonction state.highstate :

salt \* state.highstate

Cette commande applique le fichier Top aux minions ciblés.

Salt Pillar

La fonctionnalité Pillar de Salt prend les données définies sur le master Salt et les distribue aux minions si nécessaire. Elle est principalement utilisée pour stocker des secrets ou d'autres données hautement sensibles, telles que les informations d'identification du compte, les clés de chiffrement ou les mots de passe. Elle est également utile pour stocker les données non secrètes que vous ne souhaitez pas placer directement dans vos fichiers d'état, comme les données de configuration.

Salt Pillar fait entrer des données dans le cluster depuis la direction opposée en tant que grains. Bien que les données soient générées à partir du minion, les données de Pillar sont générées par le maître Salt.

Les Pillars sont organisés de la même manière que les états dans une arborescence d'états de Pillar, où top.sls coordonne les données de Pillar pour les environnements et les minions ayant accès à ces données. Les informations transférées à l'aide de Pillar disposent d'un dictionnaire généré pour le minion ciblé et chiffré avec la clé de ce minion pour sécuriser le transfert de données. Les données de Pillar sont chiffrées en fonction de chaque minion, ce qui les rend utiles pour stocker des données sensibles spécifiques à un minion particulier.

Balises et réacteurs

Le système de balises est un outil de surveillance qui peut écouter divers processus système sur des minions. Les balises peuvent déclencher des réacteurs qui peuvent ensuite aider à mettre en œuvre une modification ou résoudre un problème. Par exemple, si le délai de réponse d'un service expire, le système du réacteur peut redémarrer le service.

Les balises sont utilisées à diverses fins, notamment :

  • Génération automatisée de rapports
  • Livraison de journaux d'erreurs
  • Surveillance des microservices
  • Activité du shell de l'utilisateur
  • Surveillance des ressources

Lorsqu'elles sont associées à des réacteurs, les balises peuvent créer des réponses préécrites automatisées à des problèmes d'infrastructure et d'application. Les réacteurs étendent Salt avec des réponses automatisées utilisant des états de correction préécrits.

Les réacteurs peuvent être appliqués dans divers scénarios :

  • Mise à l'échelle de l'infrastructure
  • Notification des administrateurs
  • Redémarrage des applications en échec
  • Restauration automatique

Lorsque des balises et des environnements sont utilisés ensemble, vous pouvez créer des états uniques personnalisés selon vos besoins spécifiques.

Exécuteurs Salt et orchestration

Les exécuteurs Salt sont des applications pratiques exécutées avec la commande salt-run. Les exécuteurs Salt fonctionnent de la même manière que les modules d'exécution Salt. Cependant, ils s'exécutent sur le master Salt et non sur les minions. Un exécuteur Salt peut être un simple appel client ou une application complexe.

Salt permet d'orchestrer les tâches administratives système à l'échelle de l'entreprise. L'orchestration permet de coordonner les activités de plusieurs machines à partir d'une position centrale. Elle présente l'avantage supplémentaire de pouvoir contrôler la séquence de certains événements de configuration. Les états d'orchestration s'exécutent sur le master Salt à l'aide du module d'exécuteur d'état.

Lorsque vous exécutez une installation à plusieurs nœuds, vous exécutez en réalité une orchestration pour installer SaltStack Config. Dans le scénario d'installation à plusieurs nœuds, vous exécutez un Highstate d'orchestration conçu par VMware. L'Highstate d'orchestration s'exécute sur votre master Salt et définit l'environnement multi-nœuds. Il installe l'architecture SaltStack Config principale sur les trois autres nœuds qui hébergent PostgreSQL, Redis et RaaS.