Workshop mesos docker devoxx fr 2016

358 vues

Publié le

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

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

Aucun téléchargement
Vues
Nombre de vues
358
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
12
Commentaires
0
J’aime
1
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

×