#DevoxxFR
Déploiement d'une app distribuée sur
Mesos avec Docker, Marathon et
MesosDNS
Cyril Collen @sxarvipa
Bertrand Dic...
#DevoxxFR 2
Développeurs Java
Qui sommes nous ?
#DevoxxFR
1ère partie du workshop
3
•Présenter cm-voting, une webapp distribuée
•Déployer cm-voting avec docker links
•Dép...
#DevoxxFR
2ème partie du workshop
4
•Simuler un cluster Mesos en local
•Déployer cm-voting
#DevoxxFR
Vous aurez besoin de…
5
- Un laptop
- VirtualBox et la VM fournie dans les clés USB
#DevoxxFR
The webapp
6
#DevoxxFR
The webapp
7
#DevoxxFR
Docker
Open platform for developers and
sysadmins to build, ship, and run
distributed applications.
8
#DevoxxFR
Docker
9
Server
Host OS
Hypervisor
Guest
OS
Guest OS Guest OS Guest OS
Libs/Bins Libs/Bins Libs/Bins
App 1 App 2...
#DevoxxFR
Container and images
10
Docker
Images
libcontainer, Union Filesystem
Centos Ubuntu
Jetty
add App.war
Container 1...
#DevoxxFR
Avant de commencer…
11
- Démarrez la VM :
login : root
password : osboxes.org
- Activer le réseau
Let’s begin !
#DevoxxFR
Déploiement cm-voting
avec Docker links
12
- Code disponible dans la VM (/root/cm-voting) et sur github :
https:...
#DevoxxFR
Deploy cm-voting with
docker-compose
13
>> cd /root/cm-voting
>> docker-compose up
#DevoxxFR
Mesos
14
#DevoxxFR
Qu’est-ce Mesos?
15
Système de déploiement
Plateforme d’exécution
#DevoxxFR
Système de déploiement
• Système de déploiement “intelligent”
• Ansible, Chef, Puppet… -> configuration statique
...
#DevoxxFR
Plateforme d’exécution
• Hosting d’applications plus flexible : 

Si un slave tombe, l’application est déployée s...
#DevoxxFR 18
Qu’est-ce Mesos?
ZK
Master Master
Executor
Executor
Slaves
Executor Executor
Executor Executor
Executor Execu...
#DevoxxFR 19
Qu’est-ce Mesos?
mesos.apache.org/documentation/latest/mesos-architecture/
#DevoxxFR
Mesos frameworks :
Marathon
20
•Marathon est un framework Mesos écrit en Scala
•Fournit un moyen facile pour dép...
#DevoxxFR
Mesos frameworks :
Marathon
21
ZK
Master Master
Executor
Executor
Slaves
Executor Executor
Executor Executor
Exe...
#DevoxxFR
Mesos frameworks :
Marathon
22
ZK Master Master
Executor
Executor
Slaves
Executor Executor
Executor Executor
Exe...
#DevoxxFR
Service discovery avec
MesosDNS
23
cm-voting
Mesos
slave 1
Mesos
slave 2
REPLICATION,
LOAD BALANCING...
#DevoxxFR
Service discovery avec
MesosDNS
24
cm-voting
Mesos
slave 1
Mesos
slave 2
AND FAILOVER…
#DevoxxFR
Service discovery avec
MesosDNS
25
https://github.com/mesosphere/mesos-dns
#DevoxxFR
2ème partie du workshop :
deploy cmvoting sur Mesos
26
#DevoxxFR
Create mesos cluster
• Docker binding
• Chaque port simule un noeud du cluster
27
#DevoxxFR
Docker binding
28
Host
/root/mongo/data
Host
/var/run/docker.sock
Docker container
/data/db
Docker container
/va...
#DevoxxFR
Create cluster (I)
29
• Déployer zookeeper :
>> docker run -d -e SERVER_ID=1 -p 2181:2181 garland/zookeeper
• Dé...
#DevoxxFR
Create cluster (II)
30
• Déployer marathon :
>> docker run -d -e "MARATHON_HOSTNAME=${HOST_IP}" 
-e "MARATHON_HT...
#DevoxxFR
Create cluster (III)
31
>> docker run -p 5051:5051 -d -e "MESOS_HOSTNAME=${HOST_IP}" 
-e MESOS_PORT=5051 -e "MES...
#DevoxxFR
Mesos GUI
32
#DevoxxFR
Marathon GUI
33
#DevoxxFR
Déployer cm-voting
• Deploy MesosDNS :
curl -H "Content-Type: application/json" -X POST -d
'{"id":"mesos-dns", "...
#DevoxxFR
Is MesosDNS working?
• Add this line to the beginning of /etc/resolv.conf :
nameserver 10.0.2.15
• Ask MesosDNS ...
#DevoxxFR
Déployer cm-voting
• Deploy cmvoting
curl -H "Content-Type: application/json" -X POST -d
'{"id":"cmvoting", "cmd...
#DevoxxFR
Vérifier que cmvoting
tourne
37
#DevoxxFR
Load balancing : lb-
marathon
38
•Outil qui gère HAProxy
•Il se souscrit à l’event bus de Marathon
•Il met à jou...
#DevoxxFR
Demo
39
#DevoxxFR 40
GESTION DU FAILOVER LENT
NO HEALTH CHECKING
LES REQUETES PEUVENT ETRE
MISES EN CACHE
SERVICE PORTS NON IDENTI...
#DevoxxFR
Service discovery avec lb-
marathon
41
cm-voting
cm-voting
lb-
marathon
lb-
marathon
Marathon
Mongo
lb-
marathon
#DevoxxFR
• Multitenant workloads : isolation faible -> la
performance d’une app peut être impactée par une
autre app (plu...
#DevoxxFR
Merci !
43
Prochain SlideShare
Chargement dans…5
×

Workshop mesos docker devoxx fr 2016

302 vues

Publié le

Déploiement d'une app distribuée sur Mesos avec Docker, Marathon et MesosDNS

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
302
Sur SlideShare
0
Issues des intégrations
0
Intégrations
22
Actions
Partages
0
Téléchargements
8
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Workshop mesos docker devoxx fr 2016

  1. 1. #DevoxxFR Déploiement d'une app distribuée sur Mesos avec Docker, Marathon et MesosDNS Cyril Collen @sxarvipa Bertrand Dickelé @bdickele Julia Mateo @juliamateodc 1
  2. 2. #DevoxxFR 2 Développeurs Java Qui sommes nous ?
  3. 3. #DevoxxFR 1ère partie du workshop 3 •Présenter cm-voting, une webapp distribuée •Déployer cm-voting avec docker links •Déployer cm-voting avec docker compose
  4. 4. #DevoxxFR 2ème partie du workshop 4 •Simuler un cluster Mesos en local •Déployer cm-voting
  5. 5. #DevoxxFR Vous aurez besoin de… 5 - Un laptop - VirtualBox et la VM fournie dans les clés USB
  6. 6. #DevoxxFR The webapp 6
  7. 7. #DevoxxFR The webapp 7
  8. 8. #DevoxxFR Docker Open platform for developers and sysadmins to build, ship, and run distributed applications. 8
  9. 9. #DevoxxFR Docker 9 Server Host OS Hypervisor Guest OS Guest OS Guest OS Guest OS Libs/Bins Libs/Bins Libs/Bins App 1 App 2 App 3 App 4 Libs/Bins Server Host OS Docker Engine Libs/Bins Libs/Bins App 1 App 2 App 3 App 4 c1 c2 c3 c4 VM1 VM2 VM3 VM4
  10. 10. #DevoxxFR Container and images 10 Docker Images libcontainer, Union Filesystem Centos Ubuntu Jetty add App.war Container 1 OracleDB Container 2 Read only Writable Read only Docker Images Writable
  11. 11. #DevoxxFR Avant de commencer… 11 - Démarrez la VM : login : root password : osboxes.org - Activer le réseau Let’s begin !
  12. 12. #DevoxxFR Déploiement cm-voting avec Docker links 12 - Code disponible dans la VM (/root/cm-voting) et sur github : https://github.com/karesti/cm-voting - Démarrer docker service : >> service docker start - Démarrer un container mongo : >> docker run -i -t -d —name mongo_cmvoting -p 27017:27017 mongo - Démarrer cm-voting : >> cd /root/cm-voting >> docker build -t cmvoting . >> docker run -i -t -d —p 9000:9000 --link mongo_cmvoting:mongo cmvoting
  13. 13. #DevoxxFR Deploy cm-voting with docker-compose 13 >> cd /root/cm-voting >> docker-compose up
  14. 14. #DevoxxFR Mesos 14
  15. 15. #DevoxxFR Qu’est-ce Mesos? 15 Système de déploiement Plateforme d’exécution
  16. 16. #DevoxxFR Système de déploiement • Système de déploiement “intelligent” • Ansible, Chef, Puppet… -> configuration statique • Mesos assigne dynamiquement les resources en fonction de la charge du cluster (ou d’autres facteurs externes) 16 Qu’est-ce Mesos?
  17. 17. #DevoxxFR Plateforme d’exécution • Hosting d’applications plus flexible : 
 Si un slave tombe, l’application est déployée sur une nouvelle instance (framework Marathon) • HAProxy pour faire du load balancing • Alternative aux solutions Paas payantes (Heroku, Azure, Openshift...) 17 Qu’est-ce Mesos?
  18. 18. #DevoxxFR 18 Qu’est-ce Mesos? ZK Master Master Executor Executor Slaves Executor Executor Executor Executor Executor Executor Executor
  19. 19. #DevoxxFR 19 Qu’est-ce Mesos? mesos.apache.org/documentation/latest/mesos-architecture/
  20. 20. #DevoxxFR Mesos frameworks : Marathon 20 •Marathon est un framework Mesos écrit en Scala •Fournit un moyen facile pour déployer des conteneurs Docker •Gestion d’applications à haute disponibilité •Rest API orientée développeurs
  21. 21. #DevoxxFR Mesos frameworks : Marathon 21 ZK Master Master Executor Executor Slaves Executor Executor Executor Executor Executor Executor Executor
  22. 22. #DevoxxFR Mesos frameworks : Marathon 22 ZK Master Master Executor Executor Slaves Executor Executor Executor Executor Executor Executor Executor Marathon
  23. 23. #DevoxxFR Service discovery avec MesosDNS 23 cm-voting Mesos slave 1 Mesos slave 2 REPLICATION, LOAD BALANCING...
  24. 24. #DevoxxFR Service discovery avec MesosDNS 24 cm-voting Mesos slave 1 Mesos slave 2 AND FAILOVER…
  25. 25. #DevoxxFR Service discovery avec MesosDNS 25 https://github.com/mesosphere/mesos-dns
  26. 26. #DevoxxFR 2ème partie du workshop : deploy cmvoting sur Mesos 26
  27. 27. #DevoxxFR Create mesos cluster • Docker binding • Chaque port simule un noeud du cluster 27
  28. 28. #DevoxxFR Docker binding 28 Host /root/mongo/data Host /var/run/docker.sock Docker container /data/db Docker container /var/run/docker.sock
  29. 29. #DevoxxFR Create cluster (I) 29 • Déployer zookeeper : >> docker run -d -e SERVER_ID=1 -p 2181:2181 garland/zookeeper • Déployer mesos master >> docker run -d -p 5050:5050 -e "MESOS_HOSTNAME=${HOST_IP}" -e "MESOS_IP=${HOST_IP}" -e "MESOS_QUORUM=1" -e "MESOS_ZK=zk://${HOST_IP}:2181/mesos" --name mesos-master -e "MESOS_LOG_DIR=/var/log/mesos" --net host --restart always mesoscloud/mesos-master:0.23.0-centos-7
  30. 30. #DevoxxFR Create cluster (II) 30 • Déployer marathon : >> docker run -d -e "MARATHON_HOSTNAME=${HOST_IP}" -e "MARATHON_HTTPS_ADDRESS=$ {HOST_IP}” -e "MARATHON_HTTP_ADDRESS=${HOST_IP}" -e "MARATHON_MASTER=zk://${HOST_IP}:2181/mesos" -e "MARATHON_ZK=zk://${HOST_IP}:2181/marathon" --name marathon --net host --restart always mesoscloud/marathon:v1.0.0-RC1
  31. 31. #DevoxxFR Create cluster (III) 31 >> docker run -p 5051:5051 -d -e "MESOS_HOSTNAME=${HOST_IP}" -e MESOS_PORT=5051 -e "MESOS_IP=$ {HOST_IP}" -e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" -v /sys/fs/cgroup:/sys/fs/cgroup -v /var/run/ docker.sock:/var/run/docker.sock --name slave1 --net host --privileged --restart always mesoscloud/mesos-slave:0.23.0-centos-7 >> docker run -p 5052:5052 -d -e "MESOS_HOSTNAME=${HOST_IP}" -e MESOS_PORT=5052 -e "MESOS_IP=$ {HOST_IP}" -e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" -v /sys/fs/cgroup:/sys/fs/cgroup -v /var/run/ docker.sock:/var/run/docker.sock --name slave2 --net host --privileged --restart always mesoscloud/mesos-slave:0.23.0-centos-7 >> docker run -p 5053:5053 -d -e "MESOS_HOSTNAME=${HOST_IP}" -e MESOS_PORT=5053 -e "MESOS_IP=$ {HOST_IP}" -e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" -v /sys/fs/cgroup:/sys/fs/cgroup -v /var/run/ docker.sock:/var/run/docker.sock --name slave3 --net host --privileged --restart always mesoscloud/mesos-slave:0.23.0-centos-7 Slave 3 Slave 2 Slave 1
  32. 32. #DevoxxFR Mesos GUI 32
  33. 33. #DevoxxFR Marathon GUI 33
  34. 34. #DevoxxFR Déployer cm-voting • Deploy MesosDNS : curl -H "Content-Type: application/json" -X POST -d '{"id":"mesos-dns", "cmd":"/usr/bin/mesos-dns -v=2 -config=/ config.json", "cpus":0.5, "mem":500, "container": {"type":"DOCKER", "docker":{"image":"mesosdns", "network":"HOST"}}}' http://10.0.2.15:8080/v2/apps?force=true • Deploy Mongo curl -H "Content-Type: application/json" -X POST -d '{"id":"mongo", "cmd":"cat /etc/resolv.conf > /tmp/temp && echo "nameserver 10.0.2.15" > /etc/resolv.conf && cat /tmp/temp >> /etc/resolv.conf && mongod", "cpus":0.5, "mem":500, "container":{"type":"DOCKER", "docker":{"image":"mongo", "privileged":true, "network":"BRIDGE", "portMappings": [{"containerPort": 27017, "hostPort": 0}]}}}' http:// 10.0.2.15:8080/v2/apps?force=true 34
  35. 35. #DevoxxFR Is MesosDNS working? • Add this line to the beginning of /etc/resolv.conf : nameserver 10.0.2.15 • Ask MesosDNS for Mongo service >> dig mongo.marathon.mesos >> dig _mongo._tcp.marathon.mesos SRV 35
  36. 36. #DevoxxFR Déployer cm-voting • Deploy cmvoting curl -H "Content-Type: application/json" -X POST -d '{"id":"cmvoting", "cmd":"cat /etc/resolv.conf > / tmp/temp && echo "nameserver 10.0.2.15" > /etc/ resolv.conf && cat /tmp/temp >> /etc/resolv.conf && revel run github.com/karesti/cm-voting prod 9000", "cpus":0.5, "instances":1, "mem":250, "container": {"type":"DOCKER", "docker":{"image":"cmvoting", "network":"HOST"}}, "env" : {"SERVICE_NAME":"mongo"}}' http://10.0.2.15:8080/ v2/apps?force=true 36
  37. 37. #DevoxxFR Vérifier que cmvoting tourne 37
  38. 38. #DevoxxFR Load balancing : lb- marathon 38 •Outil qui gère HAProxy •Il se souscrit à l’event bus de Marathon •Il met à jour la configuration du HAProxy en temps réel •Health checking •SSL support
  39. 39. #DevoxxFR Demo 39
  40. 40. #DevoxxFR 40 GESTION DU FAILOVER LENT NO HEALTH CHECKING LES REQUETES PEUVENT ETRE MISES EN CACHE SERVICE PORTS NON IDENTIFIABLES MesosDNS drawbacks
  41. 41. #DevoxxFR Service discovery avec lb- marathon 41 cm-voting cm-voting lb- marathon lb- marathon Marathon Mongo lb- marathon
  42. 42. #DevoxxFR • Multitenant workloads : isolation faible -> la performance d’une app peut être impactée par une autre app (plusieures apps s’exécutent sur la même machine) • Support pour les bases de données (Cassandra, HDFS, Kafka…) Jusqu’à maintenant mesos -> tâches orientées calculs. Gestion améliorée du disque. 42 Future<Mesos>
  43. 43. #DevoxxFR Merci ! 43

×