Salt - Premiers pas

Sommaire

  1. Présentation de Salt
  2. Fonctionnement
  3. Préparation des dépôts sur Debian Wheezy
  4. Création d'un master
  5. Création d'un minion
  6. Communication entre le master et les minions
  7. L'envoi de vos premières commandes

Présentation de Salt

Salt est un logiciel de gestion de configuration de systèmes et d'execution d'application à distance.

Le but est d'avoir un système central afin de gérer les configurations des systèmes d'une maniène plus simple et surtout de rendre celles-ci le plus uniforme possible.

Le projet est écrit en Python, ce qui en fait un grand point fort pour les administrateurs systèmes, la rédaction de module est de ce fait simplifié.

Site officiel : http://www.saltstack.com/.

Fonctionnement

Salt fonctionne avec un Master qui fournit la capacité de gérer à distance des machines et des Minions (clients) qui executent les commandes demandées par le master.

Le Master est capable d'envoyer des commandes en parallèles sur chacun des Minions et à des groupes de Minions (Node Group).

Préparation des dépôts sur Debian Wheezy

Tout d'abord, nous devons mettre les dépots prévus pour Wheezy :

echo "deb http://debian.saltstack.com/debian wheezy-saltstack main" >> /etc/apt/sources.list

Avant de mettre à jour la base de données des paquets, il faut importé la clé GPG pour signer le dépot :

wget -q -O- "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key" | apt-key add -

Ensuite, on peut mettre à jour la base de données :

apt-get update

Désormais, nous pouvons vérifier quels paquets nous pourrons installer Salt :

root@server-salt:~# apt-cache search salt-
  salt-common - shared libraries that salt requires for all packages
  salt-doc - additional documentation for salt, the distributed remote execution system
  salt-master - remote manager to administer servers via salt
  salt-minion - client package for salt, the distributed remote execution system
  salt-ssh - remote manager to administer servers via salt
  salt-syndic - master-of-masters for salt, the distributed remote execution system

Création d'un master

Installation des paquets

Pour commencer, nous allons installer les différents paquets :

apt-get install salt-master salt-syndic -y

Durant l'installation, nous pouvons remarquer un point, l'installation de nombreux paquets Python et rsync !

Fichiers de configuration

Les fichiers de configuration se trouvent dans /etc/salt/.

Dans ce dossier, nous avons normalement ces fichiers/dossiers :

root@server-salt:salt#ls -ls
  total 48
  23 -rw-r--r-- 1 root root 23026 Mar 24 08:03 master
   1 drwxr-xr-x 4 root root  1024 Dec 30 16:33 pki
Modification de la configuration du master

Dans le fichier /etc/salt/master, nous avons lui préciser que nous souhaitons écouter uniquement sur l'interface réseau de la machine "master" :

root@server-salt:~# sed -i -e 's/#interface: 0.0.0.0/interface: IP_SALT_MASTER/g' /etc/salt/master
Gérer le service
  • Démarrer le service : service salt-master start
  • Arrêter le service : service salt-master stop
  • Status du service : service salt-master status

Création d'un minion

Installation des paquets

Pour commencer, nous allons installer le paquet salt-minion :

apt-get install salt-minion -y
Fichiers de configuration

Les fichiers de configuration se trouvent dans /etc/salt/.

Dans ce dossier, nous avons normalement ces fichiers/dossiers :

root@minion-salt:salt#ls -ls
   total 23
   21 -rw-r--r-- 1 root root 21227 Mar 18 23:30 minion
   1 drwxr-xr-x 2 root root  1024 Mar 21 07:41 minion.d
   1 -rw-r--r-- 1 root root     4 Mar 24 07:42 minion_id
   1 drwxr-xr-x 4 root root  1024 Mar 24 07:42 pki
Modification de la configuration du minion

Par défaut, les minions sont configurés pour communiquer avec le master "salt", sinon il faut configurer l'adresse du master sur le minion ::

root@minion-salt:~# sed -i -e 's/#master: salt/master: IP_SALT_MASTER/g' /etc/salt/minion
Modification du fichier minion_id

Dans ce fichier, il y a le nom du minion qui sera diffusé, vous pouvez le changer si vous le souhaitez.

Gérer le service
  • Démarrer le service : service salt-minion start
  • Arrêter le service : service salt-minion stop
  • Status du service : service salt-minion status

Communication entre le master et les minions

Maintenant que nous avons un master et un minion de configuré, il faut les faire communiquer. La communication utilise le protocole AES afin de sécuriser les échanges, afin que ces échanges puissent se réaliser il faut que le master accepte l'échange de clés.

Lister les clés avec la commande salt-key -L
root@server-salt:~# salt-key -L
   Accepted Keys:
   Unaccepted Keys:
   minion-salt
   Rejected Keys:
Accepter les clés avec la commande salt-key -A
root@server-salt:~# salt-key -A
   The following keys are going to be accepted:
   Unaccepted Keys:
   minion-salt
   Proceed? [n/Y] y
   Key for minion minion-salt accepted.

Par ces commandes, nous pouvons déployer en masse les minions puis accepter les échanges une fois le déploiement réalisé.

L'envoi de vos premières commandes

Un simple ping

Nous allons commencer nos essais par un simple ping :

root@server-salt:~# salt minion-salt test.ping
  minion-salt:
       True

Si nous voulons faire un ping sur l'ensemble du parc :

root@server-salt:~#salt '*' test.ping
  minion-salt:
       True
Un arrêt d'un serveur Apache2

Nous partons du principe que le serveur apache2 est bien démarré sur minion-salt, puis nous lancons la commande :

root@server-salt:~# salt minion-salt apache.signal stop
  minion-salt:
       Command: "apache2ctl -k stop" completed successfully!

Si le processus était déjà arrêté, nous aurions ce message :

root@server-salt:~# salt minion-salt apache.signal stop
  minion-salt:
       httpd (no pid file) not running
Connaître le système d'exploitation des minions

Nous pouvons filtrer nos commandes en fonction du système d'exploitation, ainsi si nous voulons vérifier les dépôts des serveurs Debian, nous n'avons qu'à les lister puis executer la commande (le faire en 2 étapes permet de retirer la liste les éventuels serveurs que l'on ne veut pas lister) :

root@server-salt:~# salt '*' cmd.run 'uname -a'
minion-salt:
    Linux ids2 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux
minion-salt2:
    Linux web1 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux