Utiliser Salt pour tester son infrastructure sur OpenStack ou Docker avant la mise en production

Introduction

  • PyConFR 2015
  • Arthur Lutz (Logilab) @arthurlutz
  • Ocotbre 2015

Vue d'ensemble

  • Introduction à Salt
  • Piloter du cloud avec salt-cloud
  • Initialiser des conteneurs Docker à partir de configurations Salt
  • Articulation entre Docker et un outil de gestion configuration et orchestration

Administrer plusieurs machines

me@laptop:~$ ssh root@server1
root@server1:~# cp /etc/config.conf /etc/config.conf.bak
root@server1:~# vim /etc/config.conf
root@server1:~# service critical-daemon restart
me@laptop:~$ ssh root@server2
root@server2:~# cp /etc/config.conf /etc/config.conf.bak
root@server2:~# vim /etc/config.conf
root@server2:~# service critical-daemon restart
me@laptop:~$ ssh root@server3
[...]

Avec Salt

.
root@salt:~# vim /srv/salt/service/config.conf
root@salt:~# salt 'server*' state.highstate test=True
root@salt:~# salt 'server*' state.highstate
root@salt:~# hg commit

image

Avec Salt

salt '*' pkg.refresh_db
salt '*' pkg.list_upgrades
salt '*' pkg.upgrade_available

Pitch de Salt

Fast, scalable and flexible software for data center automation, from infrastructure and any cloud, to the entire application stack.

Logiciel rapide, adaptable, qui monte en charge et flexible pour l'automatisation des data centers, depuis l'infrastructure matérielle ou n'importe quel cloud, jusqu'à l'ensemble de la pile applicative.

Salt - c'est quoi ?

  • exécution distante asynchrone
  • gestion de configuration centralisée
  • déploiement d'infrastructure à la demande
  • gestion de machines virtuelles
  • supervision et monitoring
  • gestion de cluster HPC (High Performance Computing)
  • une boîte à outils pour la gestion d'infrastructure !

Salt - pourquoi ce choix?

  • Gestion de configuration centralisé - mais pas seulement!
  • Framework recent (première version en mars 2011)
  • Logiciel libre
  • Python
  • ZMQ pour la communication
  • bien packagé pour Debian
  • communité très active
  • très flexible et extensible

Execution à distance avec salt

root@master:~# salt '*' pkg.install vim
root@master:~# salt '*' pkg.install libssl1.0.0 refresh=True
root@master:~# salt '*' cmd.run 'checkrestart'
root@master:~# salt '*' service.restart sshd
root@master:~# salt '*' service.restart apache2

Exemple de déclaration

make sure ntp is running:
  pkg.installed:
    - name: ntp
  service.running:
    - name: ntpd
    - watch:
       - file: /etc/ntp.conf

deploy ntp configuration:
  file.managed:
    - name: /etc/ntp.conf
    - source: salt://ntp/ntp.conf
    - require:
  - pkg: ntp

image

Piloter du cloud avec salt-cloud

L'outil salt-cloud permet de piloter un certain nombre de plateformes de cloud (avec libcloud) pour créér/détruire des machines à la demande tout en les branchant sur salt.

image

Piloter du docker avec salt

  • description du service :
my_service:
  dockerng.running:
    - container: myappcontainer
    - port_bindings: 5000:5000
  • déploiement :
salt:~/ salt dockerhost.logilab.fr state.sls my_service

Scale

{% for port in range(5000, 5100) %}
my_service {{ port }}:
  dockerng.running:
    - container: myappcontainer
    - port_bindings:  {{ port }}:5000
{% endfor %}

Gérer ses conteneurs avec Salt

  • approche VM légère
  • on utilise salt-minion comme CMD
  • permet de piloter des conteneurs à partir du salt-master
FROM debian:jessie
RUN apt-get update
RUN apt-get -y install salt-minion
CMD /usr/bin/salt-minion

image

Bénéfices de Docker & Salt & Mercurial

  • Versionnement
  • Revue de code
  • Déploiement en environment mixte (docker, lxc, vms, baremetal)
  • Approche devops, developpeurs soumettent des patches sur l'infrastucture
  • Test Driven Infrastructure (pendant de Test Driven Development)

Fin

  • Merci !
  • Arthur Lutz @arthurlutz
  • Logilab @logilab
  • liste de discussion : , #salt-fr sur freenode