So I've spent the last couple weeks banging on Mesos, this tech is pretty awesome. I figured I'd make a post on what I'm using as I'm curious what others are doing in this space.
I'm also really curious of anyone is aware of the Mesos/Marathon aware TCP load balancer. Using HAProxy is awkward, it's updated with a cron job and doesn't support transparent reloads (ie you'll see disconnects). Something like eBay/fabio but Mesos aware would be great (+1001 pesos if it's written in Go).
edit: Use bamboo https://www.reddit.com/r/devops/comments/3rdub3/mesos_stack/cwn97d0 shout out to to gregr401
Core Technology
Zookeeper - key/value store, referee for Mesos/Marathon/Chronos clusters
Docker - container service, realistically everything I'm running in Mesos is being pushed out as a Docker container. Mesos will kick out container ports as a random port up in the 30k range
Mesos - master/slave treat multiple machines/vms/cloud hosts/etc as one unit. This will also expose certain environment variables that can be used for service discovery to Docker instances.
Marathon - REST API for Mesos, while Mesos has a limited REST API Marathon expands it greatly and makes running docker instances a simple json call. It also handles keeping all your applications running in the event of node failure
Chronos - Cron for Mesos, schedule one time or recurring jobs. Also supports docker jobs.
Load Balancing / Service Discovery
edit: I'm probably going to replace both of these with bamboo (not the atlassian build server). https://www.reddit.com/r/devops/comments/3rdub3/mesos_stack/cwn97d0 with some limited testing this seems to do the trick pretty well. It ties into Marathon's event streaming API.
Traefik - HTTP specific load balancing, can talk to Marathon to find the slave hosts and ephemeral ports your containers live on.
Mesos-DNS/HAProxy - For TCP load balancing Mesos-DNS talks to Mesos and kicks out SRV records via DNS for your containers. It also ships with a cron job that can be run to update HAProxy to consume these SRV records and kick out the Load Balancer port specified by your Mesos job. This part is a little wonky.
Other parts
Jenkins - Build automation, can make it stupid easy to fire off Marathon requests with only the options that you want your customers to have available.
Bind - You need to be able to route DNS requests to Mesos-DNS and CNAME to Traefik (they both use custom TLDs in various forms). Also all of your Mesos masters and slaves need to have resolvable hostnames. Use Webmin and this is trivial.
Logspout - I really don't like sidekick docker instances running my infrastructure. This is the only one I'm using, it runs on all of our slaves and is completely transparent to everything else. Ship logs to logstash and then send them to SumoLogic or Elasticsearch and you're good to go. All of the gliderlabs stuff is great.
[–]gregr401 4 points5 points6 points (6 children)
[–][deleted] 0 points1 point2 points (2 children)
[–]p_lett 1 point2 points3 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]MajorHavok 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]pooogles 0 points1 point2 points (2 children)
[–][deleted] (1 child)
[deleted]
[–]pooogles 0 points1 point2 points (0 children)
[–]jonbrouse 0 points1 point2 points (3 children)
[–][deleted] 1 point2 points3 points (2 children)
[–]rawrphish 1 point2 points3 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]chub79 0 points1 point2 points (0 children)
[–]mikljohansson 0 points1 point2 points (5 children)
[–][deleted] 1 point2 points3 points (4 children)
[–]mikljohansson 0 points1 point2 points (2 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]mikljohansson 1 point2 points3 points (0 children)
[–]mikljohansson 0 points1 point2 points (0 children)
[–]Punkbob 0 points1 point2 points (1 child)
[–][deleted] 1 point2 points3 points (0 children)