Du sel et du mercure dans des conteneurs

  • Initialiser des conteneurs Docker à partir de configurations Salt
  • Gérer ses configurations Salt dans Mercurial
  • Articulation entre Docker, gestion de configuration et Mercurial
  • Retour d'expérience
  • Perspectives

Qui ?

David Douard (Logilab)

@douardda

Salt

boîte à outils (toolkit) pour l'infrastructure construite sur un bus de communication asynchrone

  • exécution à distance
  • Cloud Provisionning
  • gestion de configuration centralisée
  • orchestration

image

Docker + Salt + Mercurial

  • Salt pour créer des images Docker
  • Salt pour déployer des conteneurs
  • Salt pour gérer des conteneurs (CMD salt-minion)
  • Mercurial pour conserver ses configurations Salt

Pourquoi ?

  • Docker recommande le microservice et utilise le FROM pour la modularité
  • Salt apporte la configuration centralisée et indépendante du mode de déploiement (conteneur, VM, baremetal)
  • Mercurial permet les bonnes pratiques du développement collaboratif

Comment ?

Dockerfile minimaliste pour bootstraper salt:

FROM debian:jessie
RUN apt-get update
RUN apt-get -y install salt-minion

Deux options : microservice ou VM légère

Installer un microservice dovecot

A partir de https://github.com/saltstack-formulas/dovecot-formula

FROM logilab/masterless:jessie
# push formula
ADD dovecot /srv/salt/dovecot
ADD pillar.example /srv/pillar/main.sls
RUN echo "base:" > /srv/pillar/top.sls
RUN echo " '*':" >> /srv/pillar/top.sls
RUN echo "   - main" >> /srv/pillar/top.sls
RUN echo "file_client: local" > /etc/salt/minion.d/local.conf
RUN salt-call --local state.sls dovecot
RUN apt-get remove --purge salt-minion && apt-get clean && [...]
CMD /usr/bin/dovecot

Tester des states Salt

FROM logilab/masterless:jessie
RUN apt-get -y install mercurial
RUN hg clone https://hg.logilab.fr/admin/salt /srv/salt
RUN echo "file_client: local" > /etc/salt/minion.d/local.conf
RUN salt-call --local state.sls tested_config

Déployer un conteneur avec Salt

Description du service avec le module docker de Salt :

my_service:
  docker.running:
    - container: myappcontainer
    - ports:
  "5000/tcp":
    HostPort: "5000"

Déploiement :

david@salt:~/ salt dockerhost.logilab.fr state.sls my_service

Scale

Démarrer 100 conteneurs sur une machine :

{% for port in range(5000, 5100) %}
my_service {{ port }}:
  docker.running:
    - container: myappcontainer
    - ports:
  "{{ port }}/tcp" :
    HostPort: "{{ port }}"
{% 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

Organiser le travail en équipe

image

Conclusion

  • versionnement, revue de code / intégration
  • indépendance vis à vis des environnements d'exécution
  • approche devops
  • Test Driven Infrastructure