SaltStack
SaltStack, également appelé Salt, est un outil de gestion et d'orchestration de configuration. Il utilise un référentiel central pour mettre à disposition de nouveaux serveurs et d'autres éléments d'infrastructure informatique, pour apporter des modifications aux éléments existants et pour installer des logiciels dans des environnements informatiques, notamment sur des serveurs physiques et virtuels ou dans le cloud.
SaltStack automatise les tâches répétitives d'administration du système et de déploiement de code, éliminant les processus manuels dans l'optique de réduire les erreurs survenant lors de la configuration de systèmes par les services informatiques.
Salt est utilisé dans les services DevOps parce qu'il extrait le code de développement et les informations de configuration d'un référentiel central, comme GitHub ou Subversion, et transmet ce contenu à distance aux serveurs. Les utilisateurs de Salt peuvent écrire leurs propres scripts et programmes, ainsi que télécharger des configurations prédéveloppées et placées dans un référentiel public par d'autres utilisateurs.
Minions, grains, pillars et autres fonctionnalités importantes de Salt
Le moteur d'exécution distant, qui est le composant principal de Salt, crée un réseau de communication sécurisé, bidirectionnel et haut débit. Avec un « maître » en cours d'exécution (le master), un « serviteur » (le minion) démarré tente de générer des hachages cryptographiques et de se connecter au master pour former le réseau. Après une authentification par clé publique, les minions peuvent accepter des commandes émanant d'un master. Salt peut également être exécuté en mode minion sans master.
Salt se distingue des autres outils de gestion et d'automatisation de configuration par sa vitesse. Sa conception multithread permet l'exécution simultanée de centaines voire de milliers de tâches. Il utilise la messagerie ZeroMQ, qui est découplée, c'est-à-dire qui ne nécessite pas de connexion permanente.
Salt utilise une configuration maître-esclave qui permet l'exécution en mode « push and pull ». L'utilisateur peut lancer des mises à jour et du nouveau code en masse (« push ») ou définir un calendrier selon lequel les serveurs vont rechercher des mises à jour sur le master Salt et les télécharger (« pull »). Ainsi, l'architecture de gestion de configuration de Salt est guidée par les événements et capable d'autoréparation, car le système peut simultanément envoyer les mises à jour et répondre aux incidents. Salt peut également fonctionner en mode avec agent ou sans agent.
L'abstraction de Salt simplifie les tâches complexes d'administration système. Lors de la première connexion de Salt à un système cible, un script d'amorce vérifie l'OS cible et la version, puis installe les fichiers binaires correspondants. L'outil exécute les modules à distance, qu'ils soient prédéveloppés ou personnalisés.
Jouant sur le sens du mot Salt (qui signifie « sel »), les autres composants de Salt sont appelés « reactors », « grains » et « pillars »...
- Les reactors Salt sont à l'écoute des événements, tandis que les agents utilisent un shell sécurisé pour exécuter des commandes sur un système cible.
- Le minion, qui est un agent, peut éventuellement être installé sur le système cible pour envoyer des commandes en Python.
- Les grains fournissent aux minions des informations relatives au système cible (par exemple, la version de son OS).
- Les fichiers de configuration sont appelés pillars.
Salt utilise le moteur de création de modèles Jinja2 pour insérer des instructions conditionnelles et effectuer d'autres configurations dans les fichiers state et pillar de Salt, entre autres.
Versions du logiciel SaltStack Enterprise et Salt open source
La version open source de Salt est gratuite et, comme tout logiciel open source, exécutée à partir d'une interface de ligne de commande (CLI, Command-Line Interface). La version d'entreprise payante, SaltStack Enterprise, comporte plus de fonctionnalités, dont une interface graphique et la prise en charge de Windows, macOS et Solaris. Elle assure également un contrôle d'accès centralisé, basé sur le protocole LDAP (Lightweight Directory Access Protocol).
SaltStack propose des services professionnels pour l'intégration avec des systèmes tiers. Les utilisateurs peuvent également programmer des intégrations via une API. L'API de SaltStack Enterprise comporte bien plus de fonctionnalités que la version gratuite. SaltStack Enterprise contribue à améliorer la conformité en enregistrant les événements dans une base de données, dans un souci de traçabilité de l'historique.
SaltStack ne publie pas de grille tarifaire.
Avantages et inconvénients de Salt
La technologie qui sous-tend Salt et SaltStack Enterprise comporte des points forts et des points faibles selon les compétences de l'utilisateur et le déploiement concerné.
Salt est événementiel et modulaire, faisant en sorte que les composants informatiques qu'il contrôle conservent leur état cible. Il fournit un moteur analytique frontal, qui permet de réagir de façon plus intelligente aux événements, y compris ceux émanant de tiers. Le système peut être configuré par niveaux, avec un minion qui contrôle les autres dans le but d'améliorer la redondance et l'équilibrage de charge.
Salt est écrit et fonctionne en Python, langage déjà installé sur pratiquement tous les systèmes Linux. Cependant, l'interface graphique de SaltStack Enterprise présente des fonctionnalités limitées, obligeant la plupart des utilisateurs à passer par la ligne de commande pour exécuter des tâches.
Par ailleurs, il est impossible de vérifier les états cible (« states ») dans un ordre particulier. Cette restriction limite la capacité à programmer des dépendances entre les systèmes.
Comparatif entre Salt, Ansible, Puppet et Chef
Les produits de gestion de configuration concurrents utilisent tous des méthodes différentes pour définir des configurations et dépendances. Salt et Red Hat Ansible sont plus récents (publiés respectivement en 2011 et 2012) que Puppet, sorti en 2005, et que Chef, lancé en 2009. La relative nouveauté de Salt pourrait être perçue comme un avantage, car il contourne les difficultés survenues depuis l'émergence des technologies de gestion de configuration.
Salt utilise Python, un langage connu par plus de programmeurs que Ruby. SaltStack peut utiliser des scripts écrits directement en Python et représenter ceux écrits dans d'autres langages, tels que YAML ou JSON, grâce au moteur de rendu PyDSL de Salt. Bien qu'il utilise une architecture maître-esclave avec agents, Salt peut également fonctionner en mode sans agent. En revanche, Puppet et Chef utilisent des agents. Tous ces outils de gestion de configuration courants fonctionnent avec des plateformes de cloud public, telles qu'Amazon Web Services.
Salt et Ansible prennent en charge la configuration en code YAML, qui est facile à comprendre car lisible par l'utilisateur. Chef utilise la configuration JSON et le langage de programmation Ruby. Puppet possède son propre langage déclaratif spécifique d'un domaine, pour une configuration inspirée par le format de fichier de configuration Nagios. Certains utilisateurs indiquent que Salt et Chef sont compliqués à apprendre, de même que Puppet. C'est sur cet aspect qu'Ansible s'efforce de séduire, avec l'ambition de devenir l'outil de gestion de configuration le plus simple. Ansible ne nécessite pas l'installation d'agents, ce qui réduit encore plus sa complexité.