Qu’est-ce que Saltstack ?
Saltstack est un outil de gestion de configuration de vos systèmes afin de la rendre pour facile à administrer.
Installation Salt
Salt est un outil qui permet d’administrer autant de serveurs que possible en quelques ligne de commande sans aucune limite.
Il vous sera possible d’installer des paquets avec une seule commande, manager différents vhost, gérer vos utilisateurs,… depuis un seul serveur.
En utilisant Salt, nous utiliserons à minima 2 serveurs dont l’un est le master (Parent) et l’autre est un minion (Enfant).
L’installation s’effectue sur les système via les commandes suivantes :
# Installation de python et mise à jour du système apt-get install python-software-properties apt-get update # Système master master:~$ apt-get install salt-master # Système minion minion_one:~$ apt-get install salt-minion
Le minion connaît le master par son nom d’hôte ou son adresse IP afin d’intercepter ces requêtes.
Le master connaît le minion par son nom d’hôte.
Les minions peuvent aussi être identifiés par critère (système d’exploitation, regexp, …).
Adresse IP du master.
Adresse IP du 1er minion.
Configuration Salt
On configure d’abord le minion avec l’adresse IP du master et on redémarre le service :
minion_one:~$ vim /etc/salt/minion # Set the location of the salt master server, if the master server cannot be # resolved, then the minion will fail to start. master:192.168.0.10
On configure ensuite l’interface du master avec l’adresse IP du master et on dé-commente la configuration file_roots :
master:~$ vim /etc/salt/master interface:192.168.0.10 # The file server works on environments passed to the master, each environment #... # Example: file_roots: base: - /srv/salt/states
On redémarre le service sur les différents serveurs :
minion_one:~$ service salt-minion restart master:~$ service salt-master restart
La communication entre master et minion s’effectue à partir de clé md5.
On va donc lister les clés afin d’identifier notre minion puis valider sa clé:
master:~$ salt-key -L Accepted Keys: Unaccepted Keys: master minion_one Rejected Keys: master:~$ salt-key -a minion_one
Valider toutes les clés sans préciser le hostname_minion.
Utilisation Salt
Salt est maintenant opérationnel et nous pouvons commencer à l’utiliser via la commande __salt_ :
# Ping vers un seul minion master:~$ salt \minion_one test.ping minion_one: True # Récupérer l'usage des disque des mininons master:~$ salt '*' disk.usage # Connaître l'OS des minions master:~$ salt '*' cmd.run 'uname -a'
Commandes utiles pour Salt
Salt dispose de commandes adaptées à une majeure partie des actions que vous serez amener à effectuer sur vos différents serveurs.
L’avantage est de pouvoir exécuter nos actions sur tous vos serveurs minions en même temps.
Voici une liste non exhaustive de commandes utiles :
# Installation d'un ou plusieurs paquets master:~$ salt '*' pkg.install apache2 master:~$ salt '*' pkg.install pkgs='["curl", "vim"]' # Mise à jour OS et des paquets master:~$ salt '*' pkg.list_upgrades master:~$ salt '*' pkg.upgrade master:~$ salt '*' pkg.refresh_db # Afficher la version d'un paquet master:~$ salt '*' pkg.version # Redémarrer un service master:~$ salt '*' service.restart nom_service; # Créer un fichier master:~$ salt '*' cmd.run "touch fichier.txt"
Fichier states
Salt est un véritable gestionnaire de configuration dès que l’on commence à définir des fichiers states qui vont être sont l’empreinte de vos serveurs minions.
Ces fichiers localisés dans le dossier /srv/salt/ sont au format YAML.
Par exemple, imaginons un système avec des serveurs minion sur lequel on veut installer Apache puis démarrer ce service :
master:~$ vim /srv/salt/states/apache/init.sls apache: pkg: - installed service: - running
ID du state.
Déclaration du module pkg.
Fonction installed du module pkg (remplaçable par pkg.installed).
Déclaration du module service.
Fonction running du module service.
Nous testons notre commande afin que les serveurs minion l’interprètent :
master:~$ salt '*' state.sls apache test=true minion_one: ---------- ID: apache Function: pkg.installed Result: None Comment: The following packages are set to be installed/updated: apache. Changes: ---------- ID: apache Function: service.running Result: False Comment: The named service apache is not available Changes: Summary ------------ Succeeded: 0 Failed: 1 Not Run: 1 ------------ Total: 2
Le test indique qu’Apache n’est ni installé ni en service et nous pouvons relancer la commande sans faire de test :
master:~$ salt '*' state.sls apache
Voici un autre exemple pour remplacer le paquet nano par __vim___ :
master:~$ vim /etc/salt/vim/init.sls vim: pkg: - installed nano: pkg: - removed
On va maintenant combiner nos 2 states apache et vim :
master:~$ salt '*' state.sls apache,vim
Enfin, nous aurions pu procéder par une mise à jour globale de la configuration de nos minions.
On va donc éditer le fichier principal top.sls situé dans le dossier des __pillars_ :
master:~$ vim /srv/salt/top.sls base: '*': - apache 'minionnew*': - vim
Cette configuration exécutera le state apache pour tous les minions et le state vim pour tous les minions dont le hostname ou ID commence par minionnew.
La fonction state.highstate va permettre de lire tous les states à appliquer dans /srv/salt/top.sls :
master:~$ salt '*' state.highstate