SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
De la chaˆıne de production au SI g´er´e par des logiciels
Johan Moreau
IRCAD/IHU
1 juillet 2015
Johan Moreau (IRCAD/IHU) 1 juillet 2015 1 / 48
La probl´ematique
Soucis des ”Dev” :
D´evelopper des logiciels scientifiques
D´evelopper des logiciels pour l’infrastructure du laboratoire
Soucis des ”Ops” :
Distribuer et mettre en production ces logiciels
Mettre en place les serveurs pour tout cela
Mettre `a disposition les machines pour ces d´eveloppements
Soucis de l’´equipe :
Satisfaire les utilisateurs de ces logiciels
Satisfaire les d´eveloppeurs et administrateurs
Johan Moreau (IRCAD/IHU) 1 juillet 2015 2 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
Plan
1 Rappel : Jenkins pour le moteur d’int´egration continue
2 Rappel : Docker pour l’installation des esclaves
3 Saltstack pour l’orchestration globale
4 Architecture globale et points de r´eflexion
Johan Moreau (IRCAD/IHU) 1 juillet 2015 3 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
Int´egration continue 2
D´efinition :
Ensemble de pratiques v´erifiant de mani`ere automatique et r´eguli`ere
que chaque modification de code n’engendre pas de r´egression
Pour v´erifier, on utilise la phase de ”construction” :
Compiler le code,
Lancer les tests unitaires,
Analyser le code,
G´en´erer un ex´ecutable ou une archive,
G´en´erer des rapports, ...
Plus un bug est d´ecouvert tˆot, moins d’impact aura sa correction 1
1
http://martinfowler.com/articles/continuousIntegration.html
2
http://fr.wikipedia.org/wiki/Int%C3%A9gration_continue
Johan Moreau (IRCAD/IHU) 1 juillet 2015 4 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
La construction et les artefacts
Ceci implique donc une construction :
Rapide et flexible
Standardis´ee (CMake, Ant, Maven, NAnt,
SCons, ...)
Identique pour toutes les cibles (OS,
architecture, ...)
Des art´efacts int´eressants :
Versions journali`eres(”nightly build”)
D´eploiements automatiques/continus
G´en´eration automatique de l’historique (release notes), etc ...
Maintenir un build op´erationnel n’est pas facile ! 4
http://vichargrave.com/wp-content/uploads/2013/02/Hadoop-Development.png
4
http://static.googleusercontent.com/media/research.google.com/de//pubs/archive/42184.pdf
Johan Moreau (IRCAD/IHU) 1 juillet 2015 5 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
Jenkins
Outil tr`es populaire :
Opensource, +300 contributeurs en 2014, java
(multi-plateforme),
GUI web, tableau de bord, vue d´etail d’un ”job”,
Gestion des permissions (liaison ldap possible),
Base de plugins la plus importante dans ce domaine,
Base d’installations tr`es large, sur des sites tr`es
importants :
PayPal 5
: 40 000 jobs, 12 000 builds/jours
Nombreux autres outils :
Cruisecontrol, Buildbot, GitLab CI, ...
Travis-ci, Heroku, Codeship, CircleCI, Drone.io, ...
5
https://www.cloudbees.com/sites/default/files/how_to_train_your_jenkins-manivannan.pdf
http://mirrors.clinkerhq.com/jenkins/art/jenkins-logo/1024x1024/logo.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 6 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
Exemple de gui Jenkins 7
7
https://ci.inria.fr/pharo
Johan Moreau (IRCAD/IHU) 1 juillet 2015 7 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
Plugins Jenkins
Plugins en tout genre :
Outils d’analyse de code,
Outils de gestion de sources,
Outils de gestion de configurations, de VM, de conteneurs, ...
Jenkins Swarm 8 :
Plugin d’auto-d´ecouverte du master pour les esclaves,
Pr´evu pour la gestion des clusters, ...
Jenkins est capable d’installer ses plugins tout seul.
Jenkins est capable de lire sa configuration de job depuis un fichier.
8
https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin
Johan Moreau (IRCAD/IHU) 1 juillet 2015 8 / 48
Rappel : Jenkins pour le moteur d’int´egration continue
La reproductibilit´e est le nerf de la guerre
Quelles difficult´es avec l’int´egration continue :
Se battre pour faire passer le 1er job est motivant, apr`es ...
Dans un baremetal ou une VM, il y a des ´evolutions possibles, qui
doit faire le boulot ?
Comment tester l’´evolution de l’esclave jenkins ?
G´erer la combinatoire croissante de la matrice des jobs !
Principes de l’infrastruture d´efinie par le code et de l’infrastructure
reproductible - mˆeme approche que la recherche reproductible 9
9
http://www.sciencemag.org/content/334/6060/1226
Johan Moreau (IRCAD/IHU) 1 juillet 2015 9 / 48
Rappel : Docker pour l’installation des esclaves
Plan
1 Rappel : Jenkins pour le moteur d’int´egration continue
2 Rappel : Docker pour l’installation des esclaves
3 Saltstack pour l’orchestration globale
4 Architecture globale et points de r´eflexion
Johan Moreau (IRCAD/IHU) 1 juillet 2015 10 / 48
Rappel : Docker pour l’installation des esclaves
Un conteneur (jolie m´etaphore), c’est quoi ?
Les mˆemes id´ees que la virtualisation, mais sans virtualisation :
Agnostique sur le contenu et le transporteur
Isolation et automatisation
Principe d’infrastructure consistante et r´ep´etable
Peu d’overhead par rapport `a une VM ! 10
En gros, un super chroot (ou un jails BSD plus
sympa). Un des points forts de Solaris depuis
plusieurs ann´ees. Techno existante aussi chez
Google depuis longtemps. Rien de neuf, mais
pourtant ...
10
http://fr.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack
https://msopentech.com/wp-content/uploads/DockerUbuntu.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 11 / 48
Rappel : Docker pour l’installation des esclaves
Diff´erences entre VM et conteneur
http://uploads.lightcode.fr/articles/33-conteneurs-linux/conteneurs-vs-vms.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 12 / 48
Rappel : Docker pour l’installation des esclaves
Liaison avec le noyau Linux 13
Une belle ´evolution de Linux :
Mount namespace (Linux 2.4.19)
PID namespace (Linux 2.6.24) / plusieurs PID par process
Net namespace (Linux 2.6.19-2.6.24)
User namespace (Linux 2.6.23-3.8)
IPC namespace (Linux 2.6.19-2.6.30)
UTS namespace (Linux 2.6.19) / host et domain
cgroups : g´erer la limitation de ressource
AUFS/BTRFS : FS par couche, mode union, copy on write
En gros, les ´el´ements noyaux sont en place depuis 3.8
13
https://github.com/sdouche/presentation-docker/
Johan Moreau (IRCAD/IHU) 1 juillet 2015 13 / 48
Rappel : Docker pour l’installation des esclaves
De dotcloud `a docker
La petite histoire :
DotCloud 14 ´equivalent FR `a Heroku (PAAS)
Construit sur LXC et AUFS + dev. kernel linux
Pas mal de soucis sur la gestion des conteneurs
D´eveloppement interne d’un d´emon en python
Docker - vers la simplification :
Projet jeune en Golang 16 : 1er commit le 18/01/2013
Dans le top15 sur GitHub (approche les 800 contributeurs) en 2015
21 millions de t´el´echargement fin 2014
Linux 64bits avec LXC/libcontainer 17
14
http://fr.slideshare.net/jpetazzo/introduction-to-docker-december-2014-tour-de-france-bordeaux-special
https://www.docker.com/sites/default/files/legal/small_v.png
16
http://linuxfr.org/news/la-folie-docker
17
https://www.flockport.com/lxc-vs-docker/
Johan Moreau (IRCAD/IHU) 1 juillet 2015 14 / 48
Rappel : Docker pour l’installation des esclaves
Docker
Terminologie :
index : r´epertoire public (https ://index.docker.io/)
image : conteneur en lecture seule (snapshot)
conteneur : ´element manipulable
run : cr´eer un conteneur (`a partir d’une image)
Les points forts :
Installation simple (Linux, OSX, Windows) 18
Ligne de commande tr`es sympathique (docker help)
Langage de description des images (avec notion de parent)
API pour pilotage, ´ecosyst`eme jeune mais d´ej`a ´enorme :
Gui 19
, Orchestration, h´ebergement cloud, int´egration continue, OS, ...
18
http://docs.docker.com/installation/
19
http://linuxfr.org/news/logiciels-pour-survivre-avec-docker
Johan Moreau (IRCAD/IHU) 1 juillet 2015 15 / 48
Rappel : Docker pour l’installation des esclaves
Docker 101
$ docker run −i −t ubuntu /bin/bash
run : on veut lancer le conteneur
-i -t : on veut un terminal et ˆetre interactif avec lui
ubuntu : l’image `a utiliser pour ce conteneur
/bin/bash : on lance bash
$ sudo docker run −i −t ubuntu /bin/bash
root@0bc82356b52d9:/# cat /etc/issue
Ubuntu 14.04.2 LTS
root@0bc82356b52d9:/# exit
Johan Moreau (IRCAD/IHU) 1 juillet 2015 16 / 48
Rappel : Docker pour l’installation des esclaves
Docker in the shell 20 21 22
Les principales commandes :
Code Listing 1– les commandes docker utiles
sudo /usr/bin/docker −d & # run the daemon
sudo docker search ubuntu # give ubuntu images from public index ( official /trusted)
sudo docker pull stackbrew/ubuntu # pull latest stackbrew/ubuntu images
sudo docker history stackbrew/ubuntu # view history for this images
sudo docker images # show local images
sudo docker run −i −t stackbrew/ubuntu /bin/bash # run this images / create container
sudo docker run −t −i −link redis :db −name webapp ubuntu bash # link 2 containers
sudo docker ps # show active containers (−a to show all containers )
sudo docker logs myUbuntu
sudo docker attach myUbuntu # retake the hand on the container
sudo docker run −d −p 8888:80 ubuntu # export 8888 on master
20
http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-1/
21
http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-2/
22
http://sametmax.com/le-deploiement-par-conteneurs-avec-docker/
Johan Moreau (IRCAD/IHU) 1 juillet 2015 17 / 48
Rappel : Docker pour l’installation des esclaves
Construire sa propre image 23
Description et construction :
Code Listing 2– Dockerfile
FROM debian:wheezy
ADD README.md /tmp/
Code Listing 3– Ex´ecution d’un build Docker
$ docker build −q −t readme .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM debian:wheezy
−−−> e8d37d9e3476
Step 1 : ADD README.md /tmp/
−−−> 09eabce38f39
Removing intermediate container 3e44a3b6eabe
Successfully built 09eabce38f39
Liens entre conteneurs :
docker run −d −−name mydb mysql
docker run −d −−name myphp −−link mydb :mysql php
docker run −d −−link myphp :php −p 80 :80 my-nginx-img
23
http://www.centurylinklabs.com/more-docker-image-cache-tips
Johan Moreau (IRCAD/IHU) 1 juillet 2015 18 / 48
Rappel : Docker pour l’installation des esclaves
Couches d’une image Docker
https://raw.githubusercontent.com/radiomix/poc-docker-jenkins/master/img/
docker-filesystems-multilayer.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 19 / 48
Rappel : Docker pour l’installation des esclaves
Exemples DevOps
pour ”le Dev” :
Multiples environnements (tests, dev, branches, ...)
Compilation/Ex´ecution multi-[os|jvm|tools|...]
Utilisation de conteneurs pr´e-charg´es avec des data pour les tests
Outils sp´ecifiques disponibles : plugins IntelliJ, Eclipse 25, ...
pour ”l’Ops” :
Rapidit´e de d´eploiement
Force les bonnes pratiques (microservice, description donc
documentation, ...)
Fonctions avanc´ees possibles pour du clustering, API, ...
D´eploiement r´ecurrent de serveur
Gestion des vuln´erabilit´es : mise `a jour d’une des couches, test, ...
25
https://www.voxxed.com/blog/2015/06/docker-tools-in-eclipse/
Johan Moreau (IRCAD/IHU) 1 juillet 2015 20 / 48
Rappel : Docker pour l’installation des esclaves
Exemple pour tout le monde
Quoi :
Les ´evang´elistes Docker font quasiment tout tourner en conteneur
Permet de limiter la contagion virale depuis un logiciel
Permet de garder propre l’OS sous jacent :
Latex, environnement lourd, nombreuses d´ependances
Exemple 26 : Latex, Irssi, Mutt, Spotify, Skype
Depuis o`u :
boot2docker pour Windows et OSX
kitematic pour OSX (Windows `a venir)
26
https://blog.jessfraz.com/post/docker-containers-on-the-desktop/
https://avatars3.githubusercontent.com/u/8460345
Johan Moreau (IRCAD/IHU) 1 juillet 2015 21 / 48
Rappel : Docker pour l’installation des esclaves
Docker Compose 1/2
Installation et ligne de commande
Lancer une stack de conteneur via 1
fichier : docker-compose.yml
”Compose”g`ere des groupes et les liens
Simplicit´e du YAML
Installation et ligne de commande
Installation simple
docker-compose run | up | stop | rm | build
http://sdtimes.com/wp-content/uploads/2015/02/0226.sdt-docker-2.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 22 / 48
Rappel : Docker pour l’installation des esclaves
Docker Compose 2/2
docker run −d −−name db mysql
db:
image: mysql
environment:
MYSQL ROOT PASSWORD: password
docker run −d −−name phpfpm −−link db :mysql jprjr/php-fpm
phpfpm:
image: jprjr /php−fpm
volumes:
− .:/srv/http
− timezone.ini :/etc/php/conf.d/timezone.ini
links :
− db:mysql
docker run −d −−link phpfpm :phpfpm −p 80 :80 my-nginx
nginx:
build : .
links :
− phpfpm:phpfpm
ports :
− 80:80
Johan Moreau (IRCAD/IHU) 1 juillet 2015 23 / 48
Rappel : Docker pour l’installation des esclaves
Int´egration 29
Divers outils :
IAAS Public : Amazon AWS, Google
Cloud Platform, Microsoft Azure
IAAS Priv´e : OpenStack, CloudStack
PAAS : Scalingo wercker stage1.io
Drone.io, Codeship, CircleCI, ...
Ansible, Puppet, Chef, Salt ...
Et bientˆot la concurrence CoreOS Rkt, Ubuntu LXD, ...
29
http://cloudtimes.org/wp-content/uploads/2011/11/Clouds.cloudtimes-1024x787.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 24 / 48
Rappel : Docker pour l’installation des esclaves
Quelle usage de Docker dans notre exemple ?
L’infrastructure jenkins :
Le(s) master
Les esclaves (applications lourdes, applications l´eg`eres)
Les serveurs de test/pr´e-prod des applications l´eg`eres (node.js,
python, ...)
Par ailleurs, nous utilisons des conteneurs pour :
Batchs de backup
Production des serveurs ci-dessus
Latex
Owncloud, wordpress (en cours)
Johan Moreau (IRCAD/IHU) 1 juillet 2015 25 / 48
Rappel : Docker pour l’installation des esclaves
Orchestrer Docker c’est bien, mais peut-on faire plus ?
Docker :
L’´ecosyst`eme se d´eveloppe bien, mais
tout n’est pas un conteneur
Le reste donc :
Cela serait plus simple si l’esclave
jenkins avait la mˆeme configuration
que le d´eveloppeur (possible dans
certains avec Docker)
Notre infrastructure a d’autres OS
Notre infrastructure n’est pas encore
bien pens´ee pour du microservice
Johan Moreau (IRCAD/IHU) 1 juillet 2015 26 / 48
Saltstack pour l’orchestration globale
Plan
1 Rappel : Jenkins pour le moteur d’int´egration continue
2 Rappel : Docker pour l’installation des esclaves
3 Saltstack pour l’orchestration globale
4 Architecture globale et points de r´eflexion
Johan Moreau (IRCAD/IHU) 1 juillet 2015 27 / 48
Saltstack pour l’orchestration globale
L’id´ee de SaltStack
Les objectifs :
Un framework d’ex´ecution `a distance
Un outil de gestion de configurations/orchestration
Un gestionnaire de configurations centralis´ees
Quelques exemples d’utilisation :
Installation d’une application utilisateur
Configuration des imprimantes, des partages r´eseaux, ...
Lancer des commandes sur un ensemble de machines
G´erer des VM ou conteneurs (construire, lancer, arrˆeter, ...)
http://thomason.io/wp-content/uploads/2014/04/saltstack-logo.png
Johan Moreau (IRCAD/IHU) 1 juillet 2015 28 / 48
Saltstack pour l’orchestration globale
Pourquoi Salt ?
Nombreuses solutions/techniques :
Images disques (PXE, Ghost, ...)
Scripts maisons (Python, Bash, PowerShell, ...)
Logiciels de gestion de conf (CFEngine, Puppet, Chef, Ansible, ...)
Le choix de Salt pour nous :
Nouvelle g´en´eration d’outil (comparable `a Ansible 31 32 33 34 )
Multiplateforme (Linux, OSX, Windows), installation simple 35
Choix technologique : YAML, jinja2, 0MQ, AES256, Python, ...
Communaut´e importante 36 et bonne documentation 37
31
http://ryandlane.com/blog/2014/08/04/moving-away-from-puppet-saltstack-or-ansible/
32
https://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/
33
http://blog.xebia.fr/2014/07/18/test-driven-infrastructure-avec-chef-episode-2/
34
http://jensrantil.github.io/salt-vs-ansible.html
35
http://docs.saltstack.com/en/latest/topics/installation/ubuntu.html
36
http://saltstarters.org
37
http://docs.saltstack.com/en/latest/topics/tutorials/quickstart.html
Johan Moreau (IRCAD/IHU) 1 juillet 2015 29 / 48
Saltstack pour l’orchestration globale
Architecture
Mode de fonctionnement :
En solitaire (`a titre perso, ¸ca peut aider)
En client-serveur (en pull ou push) : maˆıtre/larbin (master/minion)
Le lexique :
Grain : propri´et´es d’un larbin (OS, RAM, ...)
Formule/Etat (state) : ´etats `a appliquer dans un .sls en YAML
Pilier (pillar) : param`etres `a transmettre aux larbins
Les commandes :
Salt est con¸cu pour ex´ecuter des commandes `a distance (modules au
sens python) : test.ping (module test), cmd.run (module cmd)
Module important : state (gestion de configuration)
Johan Moreau (IRCAD/IHU) 1 juillet 2015 30 / 48
Saltstack pour l’orchestration globale
Formules simples : installation d’un paquet 38
Code Listing 4– top.sls la racine des ´etats
base: # Master base configuration
’∗’: # all minion
− apache # call apache state
Code Listing 5– apache.sls fichier d´ecrivant l’´etat apache
apache2: # Id, using like main parameter for this state
pkg. installed # state to call : this pack must be installed
38
http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html
Johan Moreau (IRCAD/IHU) 1 juillet 2015 31 / 48
Saltstack pour l’orchestration globale
Formules simples : installation du paquet avec config. 39 40
Code Listing 6– apache.sls fichier d´ecrivant l’´etat apache avec fichier
apache2: # Id, using like main parameter for this state
pkg:
− installed # state to call : this pack must be installed
service :
− running # check if running
− watch: # reload if change
− file : /etc/apache2/httpd.conf
/etc/apache2/httpd.conf:
file .managed:
− source: salt ://apache/httpd.conf # find the file on salt master
− user: root
− group: root
− mode: 644
− require:
− pkg: apache2 # update this file only if apach2 is installed
39
Le serveur Salt sert de serveur de fichier avec l’url ”salt ://”
40
http://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html
Johan Moreau (IRCAD/IHU) 1 juillet 2015 32 / 48
Saltstack pour l’orchestration globale
Gestion des grains 41 42
Code Listing 7– Exemple d’´executions distantes
# from master to specific minion
sudo salt serveur .example.com cmd.run reboot
sudo salt −G ’os:debian’ cmd.run apt−get update
# from master to multiples minion
sudo salt ’ serveur (01|02).example.com’ state. sls apache
sudo salt −−grain−pcre ’os:(debian|ubuntu)’ state . highstate
# from minion
sudo salt −call −l debug state. highstate
41
Possibilit´e de tester avant ´ex´ecution en ajoutant test=True
42
aide en ligne avec sys.doc, exemple : sudo salt-call sys.doc user
Johan Moreau (IRCAD/IHU) 1 juillet 2015 33 / 48
Saltstack pour l’orchestration globale
Pilier/Pillar
Utilit´e du pilier :
D´ecouplage ´etat et param`etres : variations en fonction d’un OS, d’une
distribution, etc ...
S´ecurit´e : les larbins ont acc`es `a tous les ´etats, ´eviter d’y mettre des
informations confidentielles
Cr´eation du pilier :
Mˆeme syntaxe que les recettes et pillar.get() dans les formules
Johan Moreau (IRCAD/IHU) 1 juillet 2015 34 / 48
Saltstack pour l’orchestration globale
Pillier simple : communaut´e snmp
Code Listing 8– snmp.sls l’´etat snmp
snmpd.conf:
file :
− name: /etc/snmp/snmpd.conf
− source: salt ://nux/snmp/files/snmpd.conf
− template: jinja
− context: snmpcom: {{ pillar .get(’snmpcom’, ’public’) }}
Code Listing 9– le fichier de conf snmp
rocommunity {{ snmpcom }}
Code Listing 10– le fichier pillar
snmpcom: myCom
Johan Moreau (IRCAD/IHU) 1 juillet 2015 35 / 48
Saltstack pour l’orchestration globale
Gestion de vuln´erabilit´e : exemple avec ShellShock
Code Listing 11– S´equence d’´ex´ecution salt pour ShellShock
sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −c ’
echo good’ 2>&1 |grep ”
srv1 .domain : bad
srv2 .domain : bad
srv3 .domain : good
srv4 .domain : bad
srv5 .domain : good
...
> sudo salt −l debug −v −G ’kernel:Linux’ pkg. install bash refresh =True
> sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −
c ’echo good’ 2>&1 |grep ”
srv1 .domain : good
srv2 .domain : good
srv3 .domain : good
srv4 .domain : good
srv5 .domain : good
Johan Moreau (IRCAD/IHU) 1 juillet 2015 36 / 48
Saltstack pour l’orchestration globale
Saltstack vs Docker
Alors on fait quoi ?
En gros, on automatise avec les 2 ...
Mais l’un r´epond au besoin g´en´eral et l’autre aux besoins sp´ecifiques
Saltstack pour tout, mais on peut gagner du temps en d´eploiement
avec Docker
Id´ealement il faut pouvoir les int´egrer pour la vue d’ensemble
Cela sera d’autant plus vrai avec les ´evolutions telles qu’OpenStack
Docker particuli`erement utile pour la R&D et pour l’infra (la pr´eprod,
les fermes 43 44 45 46 47 , serveur sans donn´ees, ...)
43
https://github.com/saltstack/salt-jenkins
44
http://www.afewmorelines.com/an-example-jenkins-job-using-saltstack-as-a-configuration-manager/
45
http://www.afewmorelines.com/a-full-deployment-pipeline-using-vagrant-saltstack-and-jenkins/
46
https://registry.hub.docker.com/u/maestrodev/build-agent/
47
http://www.logilab.org/blogentry/204921
Johan Moreau (IRCAD/IHU) 1 juillet 2015 37 / 48
Saltstack pour l’orchestration globale
Docker et Salt, exemple avec nodejs 1/3
Docker dans salt :
Module 48 et State 49
Tr`es r´ecent, en gros avant juin 2014, difficile `a utiliser 50 51 52
Code Listing 12– docker dans le top.sls
base:
’ roles :docker ’:
− match: grain
− roles .docker
− roles .docker−nodejs
48
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.dockerio.html
49
http://docs.saltstack.com/en/latest/ref/states/all/salt.states.dockerio.html
50
http://serverfault.com/questions/606099/salt-cloud-docker-state-handle-volumes
51
http://thomason.io/automating-application-deployments-across-clouds-with-salt-and-docker/
52
https://www.bountysource.com/issues/1378476-dockerio-module-can-t-get-volumes-to-work
Johan Moreau (IRCAD/IHU) 1 juillet 2015 38 / 48
Saltstack pour l’orchestration globale
Docker et Salt, exemple avec nodejs 2/3
Code Listing 13– Etat salt de docker
docker repo:
pkgrepo.managed:
− repo: ’deb http://get.docker. io/ubuntu docker main’
− file : /etc/apt/sources. list .d/docker. list
− keyid: 36A1D7869245C8950F966E92D8576A8BA88D21E9
− keyserver: keyserver .ubuntu.com
− require in :
− pkg: mydocker
mydocker:
pkg:
− installed
− name: lxc−docker
service :
− running
− name: docker
− require:
− pkg : mydocker
− pip : docker−python−dockerpy
Johan Moreau (IRCAD/IHU) 1 juillet 2015 39 / 48
Saltstack pour l’orchestration globale
Docker et Salt, exemple avec nodejs 3/3
Code Listing 14– Etat salt du conteneur nodejs docker
docker nodejs image:
docker. pulled :
− name: dockerfile/nodejs
− tag: latest
− force: True
− require:
− service : mydocker
docker nodejs container :
docker. installed :
− name: mynodejs
− hostname: mynodejs
− image: dockerfile /nodejs
− command: /data/test.sh
− detach: False
− require:
− docker: docker nodejs image
docker nodejs running :
...
Johan Moreau (IRCAD/IHU) 1 juillet 2015 40 / 48
Saltstack pour l’orchestration globale
Salt dans docker
Le salt-minion :
D´eployer des images docker directement avec le client salt
int´egr´e 53 54 55 56
Montage d’une maquette salt en quelques minutes :
Il est possible d’installer le serveur et de nombreux clients, le tout
dans des conteneurs pour tester rapidement les recettes. 57 58
53
https://github.com/toscanini/docker-salt-minion
54
https://github.com/ipmb/docker-salt-minion
55
https://github.com/kstaken/dockerfile-examples/tree/master/salt-minion
56
http://blog.xebia.com/2014/06/14/combining-salt-with-docker/
57
http://serverfault.com/questions/587205/lxc-and-saltstack-minion-id-configuration-on-ubuntu
58
http://karlgrz.com/testing-salt-states-rapidly-with-docker/
Johan Moreau (IRCAD/IHU) 1 juillet 2015 41 / 48
Architecture globale et points de r´eflexion
Plan
1 Rappel : Jenkins pour le moteur d’int´egration continue
2 Rappel : Docker pour l’installation des esclaves
3 Saltstack pour l’orchestration globale
4 Architecture globale et points de r´eflexion
Johan Moreau (IRCAD/IHU) 1 juillet 2015 42 / 48
Architecture globale et points de r´eflexion
Etape sur les d´epˆots de sources
Johan Moreau (IRCAD/IHU) 1 juillet 2015 43 / 48
Architecture globale et points de r´eflexion
Les outils du processus de build
Johan Moreau (IRCAD/IHU) 1 juillet 2015 44 / 48
Architecture globale et points de r´eflexion
Les d´epˆots pertinents pour l’orchestration
Johan Moreau (IRCAD/IHU) 1 juillet 2015 45 / 48
Architecture globale et points de r´eflexion
Architecture globale
Johan Moreau (IRCAD/IHU) 1 juillet 2015 46 / 48
Architecture globale et points de r´eflexion
S´equence lors d’un push
Johan Moreau (IRCAD/IHU) 1 juillet 2015 47 / 48
Architecture globale et points de r´eflexion
Conclusion
En l’´etat :
Convergence Dev <-> Ops
Aucun d´eveloppement local, uniquement de la configuration
4 outils : Mercurial/SaltStack/Docker/Jenkins
Persistence de l’information (tout est en fichiers texte)
Evolutions :
Supervision d´edi´es aux conteneurs (actuellement shinken)
Inventaire automatique des conteneurs dans la CMDB ITIL
Diffusion et prise en main par plus de personnes
Registry Docker priv´e pour les images docker
Haute-disponibilit´e des frontend (HAProxy)
Haute-disponibilit´e des dockers (Clustering : Docker Swarm)
Haute-disponibilit´e de l’infrastructure (OpenStack/CloudStack)
Johan Moreau (IRCAD/IHU) 1 juillet 2015 48 / 48

Contenu connexe

Tendances

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
Alice Loeser
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
goldoraf
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
Pape Diop
 

Tendances (20)

Git
GitGit
Git
 
NightClazz Docker Découverte
NightClazz Docker Découverte NightClazz Docker Découverte
NightClazz Docker Découverte
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Autotools
AutotoolsAutotools
Autotools
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Docker@linuq
Docker@linuqDocker@linuq
Docker@linuq
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 
Meetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en pythonMeetup Python Nantes - les tests en python
Meetup Python Nantes - les tests en python
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shift
 
Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012
 
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 

En vedette

Water Desalination System One.Wireframe
Water Desalination System One.WireframeWater Desalination System One.Wireframe
Water Desalination System One.Wireframe
C3D_Designs
 
libero 1g
libero 1glibero 1g
libero 1g
Daii1
 
Glass Building
Glass BuildingGlass Building
Glass Building
jardenton
 
Twitter curator
Twitter curator Twitter curator
Twitter curator
Cell'IE
 

En vedette (18)

G145 Ito,T., Kodaira,T. & Ohtaka, Y. (2010). Experience of people with menta...
G145  Ito,T., Kodaira,T. & Ohtaka, Y. (2010). Experience of people with menta...G145  Ito,T., Kodaira,T. & Ohtaka, Y. (2010). Experience of people with menta...
G145 Ito,T., Kodaira,T. & Ohtaka, Y. (2010). Experience of people with menta...
 
Последний звонок 2016
Последний звонок 2016Последний звонок 2016
Последний звонок 2016
 
Lin presentation at siyb ced wokshop 10 jun14 vietnam final
Lin presentation at siyb ced wokshop 10 jun14 vietnam finalLin presentation at siyb ced wokshop 10 jun14 vietnam final
Lin presentation at siyb ced wokshop 10 jun14 vietnam final
 
Water Desalination System One.Wireframe
Water Desalination System One.WireframeWater Desalination System One.Wireframe
Water Desalination System One.Wireframe
 
libero 1g
libero 1glibero 1g
libero 1g
 
G201 中ルミ・天野博・いとうたけひこ (2013). 在宅看護におけるヒーリングタッチの有効性の検証 第44回日本看護学会―地域看護―学術集会抄録集,...
G201 中ルミ・天野博・いとうたけひこ (2013). 在宅看護におけるヒーリングタッチの有効性の検証 第44回日本看護学会―地域看護―学術集会抄録集,...G201 中ルミ・天野博・いとうたけひこ (2013). 在宅看護におけるヒーリングタッチの有効性の検証 第44回日本看護学会―地域看護―学術集会抄録集,...
G201 中ルミ・天野博・いとうたけひこ (2013). 在宅看護におけるヒーリングタッチの有効性の検証 第44回日本看護学会―地域看護―学術集会抄録集,...
 
Glass Building
Glass BuildingGlass Building
Glass Building
 
фгос общее
фгос общеефгос общее
фгос общее
 
Tutoriel Hubspot
Tutoriel HubspotTutoriel Hubspot
Tutoriel Hubspot
 
Twitter curator
Twitter curator Twitter curator
Twitter curator
 
Mercados en modo navideño, tras la sentencia de las cláusulas suelo y la deci...
Mercados en modo navideño, tras la sentencia de las cláusulas suelo y la deci...Mercados en modo navideño, tras la sentencia de las cláusulas suelo y la deci...
Mercados en modo navideño, tras la sentencia de las cláusulas suelo y la deci...
 
Young Marketers 4 Semi-Final - M.L
Young Marketers 4 Semi-Final - M.LYoung Marketers 4 Semi-Final - M.L
Young Marketers 4 Semi-Final - M.L
 
Young Marketers 4 Semi-Final - BOOT
Young Marketers 4 Semi-Final - BOOTYoung Marketers 4 Semi-Final - BOOT
Young Marketers 4 Semi-Final - BOOT
 
Young Marketers 4 Semi-Final - GEP
Young Marketers 4 Semi-Final - GEPYoung Marketers 4 Semi-Final - GEP
Young Marketers 4 Semi-Final - GEP
 
Amdec
AmdecAmdec
Amdec
 
Welding metallurgy
Welding metallurgyWelding metallurgy
Welding metallurgy
 
e-Learning - Quoi ? Pourquoi ? Vraiment ? Comment ?
e-Learning - Quoi ? Pourquoi ? Vraiment ? Comment ?e-Learning - Quoi ? Pourquoi ? Vraiment ? Comment ?
e-Learning - Quoi ? Pourquoi ? Vraiment ? Comment ?
 
Welding process
Welding processWelding process
Welding process
 

Similaire à De la chaîne de production au SI géré par des logiciels

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 

Similaire à De la chaîne de production au SI géré par des logiciels (20)

Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
OpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse FaureOpenShift en production - Akram Ben Assi & Eloïse Faure
OpenShift en production - Akram Ben Assi & Eloïse Faure
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
 
Présentation devops&puppet 04112014
Présentation devops&puppet 04112014 Présentation devops&puppet 04112014
Présentation devops&puppet 04112014
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Distribuer une application avec Symfony & Docker *
Distribuer une application avec Symfony & Docker *Distribuer une application avec Symfony & Docker *
Distribuer une application avec Symfony & Docker *
 
La révolution Docker
La révolution DockerLa révolution Docker
La révolution Docker
 
Drush make driven development
Drush make driven developmentDrush make driven development
Drush make driven development
 

Plus de Johan Moreau

2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix
Johan Moreau
 

Plus de Johan Moreau (9)

Les premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueLes premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaque
 
Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Actions prioritaires pour la SSI
Actions prioritaires pour la SSI
 
Implications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseImplications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entreprise
 
Gestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockGestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de Shellshock
 
Firewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureFirewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructure
 
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
 
Processus de développement
Processus de développementProcessus de développement
Processus de développement
 
IPv6 au Clusir-Est
IPv6 au Clusir-EstIPv6 au Clusir-Est
IPv6 au Clusir-Est
 
2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix
 

De la chaîne de production au SI géré par des logiciels

  • 1. De la chaˆıne de production au SI g´er´e par des logiciels Johan Moreau IRCAD/IHU 1 juillet 2015 Johan Moreau (IRCAD/IHU) 1 juillet 2015 1 / 48
  • 2. La probl´ematique Soucis des ”Dev” : D´evelopper des logiciels scientifiques D´evelopper des logiciels pour l’infrastructure du laboratoire Soucis des ”Ops” : Distribuer et mettre en production ces logiciels Mettre en place les serveurs pour tout cela Mettre `a disposition les machines pour ces d´eveloppements Soucis de l’´equipe : Satisfaire les utilisateurs de ces logiciels Satisfaire les d´eveloppeurs et administrateurs Johan Moreau (IRCAD/IHU) 1 juillet 2015 2 / 48
  • 3. Rappel : Jenkins pour le moteur d’int´egration continue Plan 1 Rappel : Jenkins pour le moteur d’int´egration continue 2 Rappel : Docker pour l’installation des esclaves 3 Saltstack pour l’orchestration globale 4 Architecture globale et points de r´eflexion Johan Moreau (IRCAD/IHU) 1 juillet 2015 3 / 48
  • 4. Rappel : Jenkins pour le moteur d’int´egration continue Int´egration continue 2 D´efinition : Ensemble de pratiques v´erifiant de mani`ere automatique et r´eguli`ere que chaque modification de code n’engendre pas de r´egression Pour v´erifier, on utilise la phase de ”construction” : Compiler le code, Lancer les tests unitaires, Analyser le code, G´en´erer un ex´ecutable ou une archive, G´en´erer des rapports, ... Plus un bug est d´ecouvert tˆot, moins d’impact aura sa correction 1 1 http://martinfowler.com/articles/continuousIntegration.html 2 http://fr.wikipedia.org/wiki/Int%C3%A9gration_continue Johan Moreau (IRCAD/IHU) 1 juillet 2015 4 / 48
  • 5. Rappel : Jenkins pour le moteur d’int´egration continue La construction et les artefacts Ceci implique donc une construction : Rapide et flexible Standardis´ee (CMake, Ant, Maven, NAnt, SCons, ...) Identique pour toutes les cibles (OS, architecture, ...) Des art´efacts int´eressants : Versions journali`eres(”nightly build”) D´eploiements automatiques/continus G´en´eration automatique de l’historique (release notes), etc ... Maintenir un build op´erationnel n’est pas facile ! 4 http://vichargrave.com/wp-content/uploads/2013/02/Hadoop-Development.png 4 http://static.googleusercontent.com/media/research.google.com/de//pubs/archive/42184.pdf Johan Moreau (IRCAD/IHU) 1 juillet 2015 5 / 48
  • 6. Rappel : Jenkins pour le moteur d’int´egration continue Jenkins Outil tr`es populaire : Opensource, +300 contributeurs en 2014, java (multi-plateforme), GUI web, tableau de bord, vue d´etail d’un ”job”, Gestion des permissions (liaison ldap possible), Base de plugins la plus importante dans ce domaine, Base d’installations tr`es large, sur des sites tr`es importants : PayPal 5 : 40 000 jobs, 12 000 builds/jours Nombreux autres outils : Cruisecontrol, Buildbot, GitLab CI, ... Travis-ci, Heroku, Codeship, CircleCI, Drone.io, ... 5 https://www.cloudbees.com/sites/default/files/how_to_train_your_jenkins-manivannan.pdf http://mirrors.clinkerhq.com/jenkins/art/jenkins-logo/1024x1024/logo.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 6 / 48
  • 7. Rappel : Jenkins pour le moteur d’int´egration continue Exemple de gui Jenkins 7 7 https://ci.inria.fr/pharo Johan Moreau (IRCAD/IHU) 1 juillet 2015 7 / 48
  • 8. Rappel : Jenkins pour le moteur d’int´egration continue Plugins Jenkins Plugins en tout genre : Outils d’analyse de code, Outils de gestion de sources, Outils de gestion de configurations, de VM, de conteneurs, ... Jenkins Swarm 8 : Plugin d’auto-d´ecouverte du master pour les esclaves, Pr´evu pour la gestion des clusters, ... Jenkins est capable d’installer ses plugins tout seul. Jenkins est capable de lire sa configuration de job depuis un fichier. 8 https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin Johan Moreau (IRCAD/IHU) 1 juillet 2015 8 / 48
  • 9. Rappel : Jenkins pour le moteur d’int´egration continue La reproductibilit´e est le nerf de la guerre Quelles difficult´es avec l’int´egration continue : Se battre pour faire passer le 1er job est motivant, apr`es ... Dans un baremetal ou une VM, il y a des ´evolutions possibles, qui doit faire le boulot ? Comment tester l’´evolution de l’esclave jenkins ? G´erer la combinatoire croissante de la matrice des jobs ! Principes de l’infrastruture d´efinie par le code et de l’infrastructure reproductible - mˆeme approche que la recherche reproductible 9 9 http://www.sciencemag.org/content/334/6060/1226 Johan Moreau (IRCAD/IHU) 1 juillet 2015 9 / 48
  • 10. Rappel : Docker pour l’installation des esclaves Plan 1 Rappel : Jenkins pour le moteur d’int´egration continue 2 Rappel : Docker pour l’installation des esclaves 3 Saltstack pour l’orchestration globale 4 Architecture globale et points de r´eflexion Johan Moreau (IRCAD/IHU) 1 juillet 2015 10 / 48
  • 11. Rappel : Docker pour l’installation des esclaves Un conteneur (jolie m´etaphore), c’est quoi ? Les mˆemes id´ees que la virtualisation, mais sans virtualisation : Agnostique sur le contenu et le transporteur Isolation et automatisation Principe d’infrastructure consistante et r´ep´etable Peu d’overhead par rapport `a une VM ! 10 En gros, un super chroot (ou un jails BSD plus sympa). Un des points forts de Solaris depuis plusieurs ann´ees. Techno existante aussi chez Google depuis longtemps. Rien de neuf, mais pourtant ... 10 http://fr.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack https://msopentech.com/wp-content/uploads/DockerUbuntu.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 11 / 48
  • 12. Rappel : Docker pour l’installation des esclaves Diff´erences entre VM et conteneur http://uploads.lightcode.fr/articles/33-conteneurs-linux/conteneurs-vs-vms.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 12 / 48
  • 13. Rappel : Docker pour l’installation des esclaves Liaison avec le noyau Linux 13 Une belle ´evolution de Linux : Mount namespace (Linux 2.4.19) PID namespace (Linux 2.6.24) / plusieurs PID par process Net namespace (Linux 2.6.19-2.6.24) User namespace (Linux 2.6.23-3.8) IPC namespace (Linux 2.6.19-2.6.30) UTS namespace (Linux 2.6.19) / host et domain cgroups : g´erer la limitation de ressource AUFS/BTRFS : FS par couche, mode union, copy on write En gros, les ´el´ements noyaux sont en place depuis 3.8 13 https://github.com/sdouche/presentation-docker/ Johan Moreau (IRCAD/IHU) 1 juillet 2015 13 / 48
  • 14. Rappel : Docker pour l’installation des esclaves De dotcloud `a docker La petite histoire : DotCloud 14 ´equivalent FR `a Heroku (PAAS) Construit sur LXC et AUFS + dev. kernel linux Pas mal de soucis sur la gestion des conteneurs D´eveloppement interne d’un d´emon en python Docker - vers la simplification : Projet jeune en Golang 16 : 1er commit le 18/01/2013 Dans le top15 sur GitHub (approche les 800 contributeurs) en 2015 21 millions de t´el´echargement fin 2014 Linux 64bits avec LXC/libcontainer 17 14 http://fr.slideshare.net/jpetazzo/introduction-to-docker-december-2014-tour-de-france-bordeaux-special https://www.docker.com/sites/default/files/legal/small_v.png 16 http://linuxfr.org/news/la-folie-docker 17 https://www.flockport.com/lxc-vs-docker/ Johan Moreau (IRCAD/IHU) 1 juillet 2015 14 / 48
  • 15. Rappel : Docker pour l’installation des esclaves Docker Terminologie : index : r´epertoire public (https ://index.docker.io/) image : conteneur en lecture seule (snapshot) conteneur : ´element manipulable run : cr´eer un conteneur (`a partir d’une image) Les points forts : Installation simple (Linux, OSX, Windows) 18 Ligne de commande tr`es sympathique (docker help) Langage de description des images (avec notion de parent) API pour pilotage, ´ecosyst`eme jeune mais d´ej`a ´enorme : Gui 19 , Orchestration, h´ebergement cloud, int´egration continue, OS, ... 18 http://docs.docker.com/installation/ 19 http://linuxfr.org/news/logiciels-pour-survivre-avec-docker Johan Moreau (IRCAD/IHU) 1 juillet 2015 15 / 48
  • 16. Rappel : Docker pour l’installation des esclaves Docker 101 $ docker run −i −t ubuntu /bin/bash run : on veut lancer le conteneur -i -t : on veut un terminal et ˆetre interactif avec lui ubuntu : l’image `a utiliser pour ce conteneur /bin/bash : on lance bash $ sudo docker run −i −t ubuntu /bin/bash root@0bc82356b52d9:/# cat /etc/issue Ubuntu 14.04.2 LTS root@0bc82356b52d9:/# exit Johan Moreau (IRCAD/IHU) 1 juillet 2015 16 / 48
  • 17. Rappel : Docker pour l’installation des esclaves Docker in the shell 20 21 22 Les principales commandes : Code Listing 1– les commandes docker utiles sudo /usr/bin/docker −d & # run the daemon sudo docker search ubuntu # give ubuntu images from public index ( official /trusted) sudo docker pull stackbrew/ubuntu # pull latest stackbrew/ubuntu images sudo docker history stackbrew/ubuntu # view history for this images sudo docker images # show local images sudo docker run −i −t stackbrew/ubuntu /bin/bash # run this images / create container sudo docker run −t −i −link redis :db −name webapp ubuntu bash # link 2 containers sudo docker ps # show active containers (−a to show all containers ) sudo docker logs myUbuntu sudo docker attach myUbuntu # retake the hand on the container sudo docker run −d −p 8888:80 ubuntu # export 8888 on master 20 http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-1/ 21 http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-2/ 22 http://sametmax.com/le-deploiement-par-conteneurs-avec-docker/ Johan Moreau (IRCAD/IHU) 1 juillet 2015 17 / 48
  • 18. Rappel : Docker pour l’installation des esclaves Construire sa propre image 23 Description et construction : Code Listing 2– Dockerfile FROM debian:wheezy ADD README.md /tmp/ Code Listing 3– Ex´ecution d’un build Docker $ docker build −q −t readme . Sending build context to Docker daemon 3.584 kB Sending build context to Docker daemon Step 0 : FROM debian:wheezy −−−> e8d37d9e3476 Step 1 : ADD README.md /tmp/ −−−> 09eabce38f39 Removing intermediate container 3e44a3b6eabe Successfully built 09eabce38f39 Liens entre conteneurs : docker run −d −−name mydb mysql docker run −d −−name myphp −−link mydb :mysql php docker run −d −−link myphp :php −p 80 :80 my-nginx-img 23 http://www.centurylinklabs.com/more-docker-image-cache-tips Johan Moreau (IRCAD/IHU) 1 juillet 2015 18 / 48
  • 19. Rappel : Docker pour l’installation des esclaves Couches d’une image Docker https://raw.githubusercontent.com/radiomix/poc-docker-jenkins/master/img/ docker-filesystems-multilayer.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 19 / 48
  • 20. Rappel : Docker pour l’installation des esclaves Exemples DevOps pour ”le Dev” : Multiples environnements (tests, dev, branches, ...) Compilation/Ex´ecution multi-[os|jvm|tools|...] Utilisation de conteneurs pr´e-charg´es avec des data pour les tests Outils sp´ecifiques disponibles : plugins IntelliJ, Eclipse 25, ... pour ”l’Ops” : Rapidit´e de d´eploiement Force les bonnes pratiques (microservice, description donc documentation, ...) Fonctions avanc´ees possibles pour du clustering, API, ... D´eploiement r´ecurrent de serveur Gestion des vuln´erabilit´es : mise `a jour d’une des couches, test, ... 25 https://www.voxxed.com/blog/2015/06/docker-tools-in-eclipse/ Johan Moreau (IRCAD/IHU) 1 juillet 2015 20 / 48
  • 21. Rappel : Docker pour l’installation des esclaves Exemple pour tout le monde Quoi : Les ´evang´elistes Docker font quasiment tout tourner en conteneur Permet de limiter la contagion virale depuis un logiciel Permet de garder propre l’OS sous jacent : Latex, environnement lourd, nombreuses d´ependances Exemple 26 : Latex, Irssi, Mutt, Spotify, Skype Depuis o`u : boot2docker pour Windows et OSX kitematic pour OSX (Windows `a venir) 26 https://blog.jessfraz.com/post/docker-containers-on-the-desktop/ https://avatars3.githubusercontent.com/u/8460345 Johan Moreau (IRCAD/IHU) 1 juillet 2015 21 / 48
  • 22. Rappel : Docker pour l’installation des esclaves Docker Compose 1/2 Installation et ligne de commande Lancer une stack de conteneur via 1 fichier : docker-compose.yml ”Compose”g`ere des groupes et les liens Simplicit´e du YAML Installation et ligne de commande Installation simple docker-compose run | up | stop | rm | build http://sdtimes.com/wp-content/uploads/2015/02/0226.sdt-docker-2.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 22 / 48
  • 23. Rappel : Docker pour l’installation des esclaves Docker Compose 2/2 docker run −d −−name db mysql db: image: mysql environment: MYSQL ROOT PASSWORD: password docker run −d −−name phpfpm −−link db :mysql jprjr/php-fpm phpfpm: image: jprjr /php−fpm volumes: − .:/srv/http − timezone.ini :/etc/php/conf.d/timezone.ini links : − db:mysql docker run −d −−link phpfpm :phpfpm −p 80 :80 my-nginx nginx: build : . links : − phpfpm:phpfpm ports : − 80:80 Johan Moreau (IRCAD/IHU) 1 juillet 2015 23 / 48
  • 24. Rappel : Docker pour l’installation des esclaves Int´egration 29 Divers outils : IAAS Public : Amazon AWS, Google Cloud Platform, Microsoft Azure IAAS Priv´e : OpenStack, CloudStack PAAS : Scalingo wercker stage1.io Drone.io, Codeship, CircleCI, ... Ansible, Puppet, Chef, Salt ... Et bientˆot la concurrence CoreOS Rkt, Ubuntu LXD, ... 29 http://cloudtimes.org/wp-content/uploads/2011/11/Clouds.cloudtimes-1024x787.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 24 / 48
  • 25. Rappel : Docker pour l’installation des esclaves Quelle usage de Docker dans notre exemple ? L’infrastructure jenkins : Le(s) master Les esclaves (applications lourdes, applications l´eg`eres) Les serveurs de test/pr´e-prod des applications l´eg`eres (node.js, python, ...) Par ailleurs, nous utilisons des conteneurs pour : Batchs de backup Production des serveurs ci-dessus Latex Owncloud, wordpress (en cours) Johan Moreau (IRCAD/IHU) 1 juillet 2015 25 / 48
  • 26. Rappel : Docker pour l’installation des esclaves Orchestrer Docker c’est bien, mais peut-on faire plus ? Docker : L’´ecosyst`eme se d´eveloppe bien, mais tout n’est pas un conteneur Le reste donc : Cela serait plus simple si l’esclave jenkins avait la mˆeme configuration que le d´eveloppeur (possible dans certains avec Docker) Notre infrastructure a d’autres OS Notre infrastructure n’est pas encore bien pens´ee pour du microservice Johan Moreau (IRCAD/IHU) 1 juillet 2015 26 / 48
  • 27. Saltstack pour l’orchestration globale Plan 1 Rappel : Jenkins pour le moteur d’int´egration continue 2 Rappel : Docker pour l’installation des esclaves 3 Saltstack pour l’orchestration globale 4 Architecture globale et points de r´eflexion Johan Moreau (IRCAD/IHU) 1 juillet 2015 27 / 48
  • 28. Saltstack pour l’orchestration globale L’id´ee de SaltStack Les objectifs : Un framework d’ex´ecution `a distance Un outil de gestion de configurations/orchestration Un gestionnaire de configurations centralis´ees Quelques exemples d’utilisation : Installation d’une application utilisateur Configuration des imprimantes, des partages r´eseaux, ... Lancer des commandes sur un ensemble de machines G´erer des VM ou conteneurs (construire, lancer, arrˆeter, ...) http://thomason.io/wp-content/uploads/2014/04/saltstack-logo.png Johan Moreau (IRCAD/IHU) 1 juillet 2015 28 / 48
  • 29. Saltstack pour l’orchestration globale Pourquoi Salt ? Nombreuses solutions/techniques : Images disques (PXE, Ghost, ...) Scripts maisons (Python, Bash, PowerShell, ...) Logiciels de gestion de conf (CFEngine, Puppet, Chef, Ansible, ...) Le choix de Salt pour nous : Nouvelle g´en´eration d’outil (comparable `a Ansible 31 32 33 34 ) Multiplateforme (Linux, OSX, Windows), installation simple 35 Choix technologique : YAML, jinja2, 0MQ, AES256, Python, ... Communaut´e importante 36 et bonne documentation 37 31 http://ryandlane.com/blog/2014/08/04/moving-away-from-puppet-saltstack-or-ansible/ 32 https://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/ 33 http://blog.xebia.fr/2014/07/18/test-driven-infrastructure-avec-chef-episode-2/ 34 http://jensrantil.github.io/salt-vs-ansible.html 35 http://docs.saltstack.com/en/latest/topics/installation/ubuntu.html 36 http://saltstarters.org 37 http://docs.saltstack.com/en/latest/topics/tutorials/quickstart.html Johan Moreau (IRCAD/IHU) 1 juillet 2015 29 / 48
  • 30. Saltstack pour l’orchestration globale Architecture Mode de fonctionnement : En solitaire (`a titre perso, ¸ca peut aider) En client-serveur (en pull ou push) : maˆıtre/larbin (master/minion) Le lexique : Grain : propri´et´es d’un larbin (OS, RAM, ...) Formule/Etat (state) : ´etats `a appliquer dans un .sls en YAML Pilier (pillar) : param`etres `a transmettre aux larbins Les commandes : Salt est con¸cu pour ex´ecuter des commandes `a distance (modules au sens python) : test.ping (module test), cmd.run (module cmd) Module important : state (gestion de configuration) Johan Moreau (IRCAD/IHU) 1 juillet 2015 30 / 48
  • 31. Saltstack pour l’orchestration globale Formules simples : installation d’un paquet 38 Code Listing 4– top.sls la racine des ´etats base: # Master base configuration ’∗’: # all minion − apache # call apache state Code Listing 5– apache.sls fichier d´ecrivant l’´etat apache apache2: # Id, using like main parameter for this state pkg. installed # state to call : this pack must be installed 38 http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html Johan Moreau (IRCAD/IHU) 1 juillet 2015 31 / 48
  • 32. Saltstack pour l’orchestration globale Formules simples : installation du paquet avec config. 39 40 Code Listing 6– apache.sls fichier d´ecrivant l’´etat apache avec fichier apache2: # Id, using like main parameter for this state pkg: − installed # state to call : this pack must be installed service : − running # check if running − watch: # reload if change − file : /etc/apache2/httpd.conf /etc/apache2/httpd.conf: file .managed: − source: salt ://apache/httpd.conf # find the file on salt master − user: root − group: root − mode: 644 − require: − pkg: apache2 # update this file only if apach2 is installed 39 Le serveur Salt sert de serveur de fichier avec l’url ”salt ://” 40 http://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html Johan Moreau (IRCAD/IHU) 1 juillet 2015 32 / 48
  • 33. Saltstack pour l’orchestration globale Gestion des grains 41 42 Code Listing 7– Exemple d’´executions distantes # from master to specific minion sudo salt serveur .example.com cmd.run reboot sudo salt −G ’os:debian’ cmd.run apt−get update # from master to multiples minion sudo salt ’ serveur (01|02).example.com’ state. sls apache sudo salt −−grain−pcre ’os:(debian|ubuntu)’ state . highstate # from minion sudo salt −call −l debug state. highstate 41 Possibilit´e de tester avant ´ex´ecution en ajoutant test=True 42 aide en ligne avec sys.doc, exemple : sudo salt-call sys.doc user Johan Moreau (IRCAD/IHU) 1 juillet 2015 33 / 48
  • 34. Saltstack pour l’orchestration globale Pilier/Pillar Utilit´e du pilier : D´ecouplage ´etat et param`etres : variations en fonction d’un OS, d’une distribution, etc ... S´ecurit´e : les larbins ont acc`es `a tous les ´etats, ´eviter d’y mettre des informations confidentielles Cr´eation du pilier : Mˆeme syntaxe que les recettes et pillar.get() dans les formules Johan Moreau (IRCAD/IHU) 1 juillet 2015 34 / 48
  • 35. Saltstack pour l’orchestration globale Pillier simple : communaut´e snmp Code Listing 8– snmp.sls l’´etat snmp snmpd.conf: file : − name: /etc/snmp/snmpd.conf − source: salt ://nux/snmp/files/snmpd.conf − template: jinja − context: snmpcom: {{ pillar .get(’snmpcom’, ’public’) }} Code Listing 9– le fichier de conf snmp rocommunity {{ snmpcom }} Code Listing 10– le fichier pillar snmpcom: myCom Johan Moreau (IRCAD/IHU) 1 juillet 2015 35 / 48
  • 36. Saltstack pour l’orchestration globale Gestion de vuln´erabilit´e : exemple avec ShellShock Code Listing 11– S´equence d’´ex´ecution salt pour ShellShock sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −c ’ echo good’ 2>&1 |grep ” srv1 .domain : bad srv2 .domain : bad srv3 .domain : good srv4 .domain : bad srv5 .domain : good ... > sudo salt −l debug −v −G ’kernel:Linux’ pkg. install bash refresh =True > sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash − c ’echo good’ 2>&1 |grep ” srv1 .domain : good srv2 .domain : good srv3 .domain : good srv4 .domain : good srv5 .domain : good Johan Moreau (IRCAD/IHU) 1 juillet 2015 36 / 48
  • 37. Saltstack pour l’orchestration globale Saltstack vs Docker Alors on fait quoi ? En gros, on automatise avec les 2 ... Mais l’un r´epond au besoin g´en´eral et l’autre aux besoins sp´ecifiques Saltstack pour tout, mais on peut gagner du temps en d´eploiement avec Docker Id´ealement il faut pouvoir les int´egrer pour la vue d’ensemble Cela sera d’autant plus vrai avec les ´evolutions telles qu’OpenStack Docker particuli`erement utile pour la R&D et pour l’infra (la pr´eprod, les fermes 43 44 45 46 47 , serveur sans donn´ees, ...) 43 https://github.com/saltstack/salt-jenkins 44 http://www.afewmorelines.com/an-example-jenkins-job-using-saltstack-as-a-configuration-manager/ 45 http://www.afewmorelines.com/a-full-deployment-pipeline-using-vagrant-saltstack-and-jenkins/ 46 https://registry.hub.docker.com/u/maestrodev/build-agent/ 47 http://www.logilab.org/blogentry/204921 Johan Moreau (IRCAD/IHU) 1 juillet 2015 37 / 48
  • 38. Saltstack pour l’orchestration globale Docker et Salt, exemple avec nodejs 1/3 Docker dans salt : Module 48 et State 49 Tr`es r´ecent, en gros avant juin 2014, difficile `a utiliser 50 51 52 Code Listing 12– docker dans le top.sls base: ’ roles :docker ’: − match: grain − roles .docker − roles .docker−nodejs 48 http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.dockerio.html 49 http://docs.saltstack.com/en/latest/ref/states/all/salt.states.dockerio.html 50 http://serverfault.com/questions/606099/salt-cloud-docker-state-handle-volumes 51 http://thomason.io/automating-application-deployments-across-clouds-with-salt-and-docker/ 52 https://www.bountysource.com/issues/1378476-dockerio-module-can-t-get-volumes-to-work Johan Moreau (IRCAD/IHU) 1 juillet 2015 38 / 48
  • 39. Saltstack pour l’orchestration globale Docker et Salt, exemple avec nodejs 2/3 Code Listing 13– Etat salt de docker docker repo: pkgrepo.managed: − repo: ’deb http://get.docker. io/ubuntu docker main’ − file : /etc/apt/sources. list .d/docker. list − keyid: 36A1D7869245C8950F966E92D8576A8BA88D21E9 − keyserver: keyserver .ubuntu.com − require in : − pkg: mydocker mydocker: pkg: − installed − name: lxc−docker service : − running − name: docker − require: − pkg : mydocker − pip : docker−python−dockerpy Johan Moreau (IRCAD/IHU) 1 juillet 2015 39 / 48
  • 40. Saltstack pour l’orchestration globale Docker et Salt, exemple avec nodejs 3/3 Code Listing 14– Etat salt du conteneur nodejs docker docker nodejs image: docker. pulled : − name: dockerfile/nodejs − tag: latest − force: True − require: − service : mydocker docker nodejs container : docker. installed : − name: mynodejs − hostname: mynodejs − image: dockerfile /nodejs − command: /data/test.sh − detach: False − require: − docker: docker nodejs image docker nodejs running : ... Johan Moreau (IRCAD/IHU) 1 juillet 2015 40 / 48
  • 41. Saltstack pour l’orchestration globale Salt dans docker Le salt-minion : D´eployer des images docker directement avec le client salt int´egr´e 53 54 55 56 Montage d’une maquette salt en quelques minutes : Il est possible d’installer le serveur et de nombreux clients, le tout dans des conteneurs pour tester rapidement les recettes. 57 58 53 https://github.com/toscanini/docker-salt-minion 54 https://github.com/ipmb/docker-salt-minion 55 https://github.com/kstaken/dockerfile-examples/tree/master/salt-minion 56 http://blog.xebia.com/2014/06/14/combining-salt-with-docker/ 57 http://serverfault.com/questions/587205/lxc-and-saltstack-minion-id-configuration-on-ubuntu 58 http://karlgrz.com/testing-salt-states-rapidly-with-docker/ Johan Moreau (IRCAD/IHU) 1 juillet 2015 41 / 48
  • 42. Architecture globale et points de r´eflexion Plan 1 Rappel : Jenkins pour le moteur d’int´egration continue 2 Rappel : Docker pour l’installation des esclaves 3 Saltstack pour l’orchestration globale 4 Architecture globale et points de r´eflexion Johan Moreau (IRCAD/IHU) 1 juillet 2015 42 / 48
  • 43. Architecture globale et points de r´eflexion Etape sur les d´epˆots de sources Johan Moreau (IRCAD/IHU) 1 juillet 2015 43 / 48
  • 44. Architecture globale et points de r´eflexion Les outils du processus de build Johan Moreau (IRCAD/IHU) 1 juillet 2015 44 / 48
  • 45. Architecture globale et points de r´eflexion Les d´epˆots pertinents pour l’orchestration Johan Moreau (IRCAD/IHU) 1 juillet 2015 45 / 48
  • 46. Architecture globale et points de r´eflexion Architecture globale Johan Moreau (IRCAD/IHU) 1 juillet 2015 46 / 48
  • 47. Architecture globale et points de r´eflexion S´equence lors d’un push Johan Moreau (IRCAD/IHU) 1 juillet 2015 47 / 48
  • 48. Architecture globale et points de r´eflexion Conclusion En l’´etat : Convergence Dev <-> Ops Aucun d´eveloppement local, uniquement de la configuration 4 outils : Mercurial/SaltStack/Docker/Jenkins Persistence de l’information (tout est en fichiers texte) Evolutions : Supervision d´edi´es aux conteneurs (actuellement shinken) Inventaire automatique des conteneurs dans la CMDB ITIL Diffusion et prise en main par plus de personnes Registry Docker priv´e pour les images docker Haute-disponibilit´e des frontend (HAProxy) Haute-disponibilit´e des dockers (Clustering : Docker Swarm) Haute-disponibilit´e de l’infrastructure (OpenStack/CloudStack) Johan Moreau (IRCAD/IHU) 1 juillet 2015 48 / 48