Processus de création d'une VM faisant partie d'un parc géré par Salt Stack
cloud-computing favourites best-practices logiciel-libre salt-stack
A mon emploi actuel je gère un parc de machines virtuelles (VMs) qui est automatisé par un système de gestion de configuration appelé Salt Stack.
Salt stack est un outil permettant de décrire quel est l’état désiré d’un serveur. Comme d’autres outils avec une utilité similaire, Salt Stack peut être utilisé dans des environnements hétérogènes sous GNU/Linux, Mac OS, et Windows, FreeBSD, etc.
L’environment que nous utilisons est un serveur avec des «blades». Chaque «blade» fournit les services créant un cluster OpenStack. Dans le futur, nous risquons d'avoir plus d'un fournisseur OpenStack. Pour automatiser comme nous l'aimons, nous utilisons grandement la ligne de commande avec le paquet python-novaclient.
Chaque machine virtuelle roule une version LTS («Long Term Support») de Ubuntu.
Absolument toutes les configurations sont appliqués via Salt Stack, la seule chose qui est fait manuellement en ce moment est de créer la nouvelle instance, et de l'ajouter au «master» de Salt Stack.
Même là, ça risque de changer lorsque nous aurons déployé Salt Cloud.
Procédure
Mise à jour Mars 2015: Un nouvel article sur le même sujet a été écrit (en anglais) et illustre comment faire une nouvelle VM avec encore moins d’étapes
Boot une nouvelle node avec Nova
joe@master:~$ nova boot --image lucid-minion-template --flavor wpdn.large --key-name renoirb app6Donner un nom en fonction du type de serveur a déployer avec un numéro à la fin. Exemple:
app6NOTE Dans mon cas, j'ai notamment: app, db, memcached, etc.
Ajoute l'adresse floating dans
/srv/pillar/nodes/init.slscomme les autresnodes: master: public: ####IP PUBLIQUE CACHÉE#### private: 10.0.0.1 app1: public: ####IP PUBLIQUE CACHÉE#### private: 10.0.0.7 memcache2: public: ####IP PUBLIQUE CACHÉE#### private: 10.0.0.4 app5: public: ####IP PUBLIQUE CACHÉE#### private: 10.0.0.3Prend le fichier
/home/ubuntu/runmede n'importe quel autre serveur et colle le dans la nouvelle machine. Puis execute (sudo /bin/bash runme)Ajouter une ligne dans le nouveau serveir dans
/etc/salt/minion.d/master.confid: app6... Voir les autres nodes
Restart salt-minion
ubuntu@node6:~$ sudo service salt-minion restartAjoute la clée au master
joe@master:~$ sudo salt-key -a app6... Le '-a foo' est optionnel et tu peux lister Les nodes.
Run state.highstate
joe@master:~$ sudo salt app6 state.highstateUploader le code via rsync dans la nouvelle app node, puis re-rouler state.highstate (certains scripts prennent pour aquis que le code est déjà déployé)
joe@master:~$ sudo salt app6 state.sls code.node_app joe@master:~$ sudo salt app6 state.highstateComme je disais, parfois, le premier
state.highstatene marche pas a cause du code pas déployé.Rafraichir les autorisations pour storage
joe@master:~$ sudo salt 'storage*' state.highstate joe@master:~$ sudo salt 'monitor*' state.highstateUpdater le hosts file de quelque nodes
joe@master:~$ sudo salt 'app*' state.sls hosts joe@master:~$ sudo salt 'db*' state.sls hosts joe@master:~$ sudo salt 'memcache*' state.sls hosts