Logilab POSS bottom bottom-text

Utiliser Salt pour tester son infrastructure sur OpenStack ou Docker

Qui?

David Douard (Logilab)

david.douard@logilab.fr

david@jabber.logilab.org

@douardda

douardda

Quoi ?

  • Salt
    • c'est chouette
  • Docker
    • c'est à la mode
  • OpenStack
    • tout le monde en a dans ses placards
    • sinon, ça marche aussi avec EC2

Salt c'est chouette...


user@saltmaster:~$ salt '*' state.highstate test=True
user@saltmaster:~$ salt '*' state.highstate
	  

ou


user@saltmaster:~$ salt '*' pkg.refresh_db
user@saltmaster:~$ salt '*' pkg.list_upgrades
user@saltmaster:~$ salt '*' pkg.upgrade_available
	  

mais aussi


root@salted:~$ salt-call state.highstate test=True
	  

Salt c'est chouette...


user@saltmaster:~$ salt -G 'roles:apache' apache.vhosts
    192.168.1.100:80:
        ----------
        astroid.org:
            ----------
            conf:
                /etc/apache2/sites-enabled/astroid.org.conf:1
            port:
                80
            vhost:
                astroid.org
        cubicweb.org:
            ----------
            conf:
                /etc/apache2/sites-enabled/cubicweb.org.conf:7
[...]
	  

Pitch of Salt

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

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
  • une boîte à outils pour la gestion d'infrastructure !

Salt - c'est comment ?

  • Logiciel Libre
  • Rapide
  • Python
  • Récent (mars 2011)
  • ZMQ (PUB/SUB + REQ/REP)
  • Bien packagé pour Debian et RedHat
  • Communité très active
  • Très flexible et extensible
  • Supporte même Windows

Execution à distance

user@master:~# salt -G 'roles:desktop' gnome.getIdleActivation user=david
user@master:~# salt '*' pkg.install libssl1.0.0 refresh=True
user@master:~# salt '*' cmd.run checkrestart
user@master:~# salt '*' service.restart sshd
user@master:~# salt '*' service.restart apache2

Configuration

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

salt-cloud

Permet de piloter la plupart des plateformes de cloud ou de virtualisation.

image

salt-cloud

  • providers : les fournisseurs de machines
  • profiles : les types de machines
  • créer, supprimer, interroger des VMs

user@salt:~$ salt-cloud -p jessie-icehouse web1 web2 db1 app1 app2
user@salt:~$ salt-cloud -d web2 app2	      
user@salt:~$ salt-cloud -Q
	  

salt-cloud

à la création d'une machine

  • démarre la VM sur la plateforme choisie
  • provisionne un salt-minion
    • permet de provisionner un salt-master local
  • accepte sa clef
  • lance une mise en conformité (highstate)

Piloter docker avec salt


salt docker.logilab.fr dockerng.ps
salt docker.logilab.fr dockerng.inspect mydocker
salt docker.logilab.fr dockerng.commit mydocker repo/mydocker:tag

Décrire ses conteneurs avec salt

# states/my_service.sls
	      
myrepo/myappcontainer:
  dockerng.image_present:
    - build: https://github.com/myuser/myrepo.git

my_service:
   dockerng.running:
      - container: myrepo/myappcontainer
      - port_bindings: 5000:5000

déploiement :

user@saltmaster:~$ salt docker.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 PID1
  • permet de provisionner ses conteneurs à partir du salt-master
  • permet de piloter des conteneurs à partir du salt-master

FROM docker.logilab.fr/logilab/debian:jessie
RUN apt-get update
RUN apt-get -y install salt-minion
ENTRYPOINT /usr/bin/salt-minion
	  

image

Bénéfices

de Salt + Docker + Mercurial

  • Versionnement de la configuration

https://xkcd.com/1597

Bénéfices

de Salt + Docker + Mercurial

  • Déploiement en environment mixte
    • docker, lxc, kvm, esx, cloud, baremetal
  • Configuration indépendante de l'environnement d'exécution

Bénéfices

de Salt + Docker + Mercurial

  • Approche devops : les développeurs
    • soumettent des patches pour l'infrastucture
    • peuvent reproduire la prod en quelques secondes
  • Revue de code
  • Intégration continue
  • Test Driven Infrastructure

Difficultés

de Docker + Salt

Nécessite une conf soignée

  • Ne pas spammer l'IT quand on lance des conteneurs
  • Ne pas pourrir la supervision
  • Faire attention à ses service.running

Difficultés

de Docker + Salt

Pas de init ou systemd comme PID1

  • Respecter strictement la Docker way of life
  • Faire attention à ses service.running
  • Utiliser des outils comme supervisord comme PID1
  • Arrêter d'utiliser Docker ?

rkt rocks!

rkt

https://github.com/coreos/rkt

image

  • implémentation de la spec App Container spec
  • conçu pour systemd
  • compatible avec Docker
  • architecture modulaire

Merci !

david.douard@logilab.fr

david@jabber.logilab.org

@douardda

douardda

salt-fr@lists.afpy.fr

#salt-fr sur freenode