Last active
February 3, 2016 09:43
-
-
Save bydga/34df92f67ae03ca2ec4d to your computer and use it in GitHub Desktop.
graceful restart docker-marathon-mesos app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- mode: ruby -*- | |
| # vi: set ft=ruby : | |
| #IP addrees this VM will have | |
| IP = "192.168.50.4" | |
| # script that updates the system, downloads all prerequisities, installs docker, | |
| # zookeeper, marathon, clones actual mesos branch and compiles it. | |
| $setup = <<SCRIPT | |
| sudo su | |
| apt-get update | |
| apt-get -y install software-properties-common build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev tar wget git openjdk-7-jdk autoconf libtool python-software-properties | |
| mkdir /tmp/mesos | |
| git clone https://git-wip-us.apache.org/repos/asf/mesos.git /tmp/mesos | |
| cd /tmp/mesos | |
| ./bootstrap | |
| mkdir /tmp/mesos/build | |
| cd /tmp/mesos/build | |
| ../configure | |
| make | |
| curl https://get.docker.com | sh | |
| cd /tmp | |
| curl -O -s http://downloads.mesosphere.com/marathon/v0.13.0/marathon-0.13.0.tgz | |
| tar xzf marathon-0.13.0.tgz | |
| curl -O -s http://apache.miloslavbrada.cz/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz | |
| tar xzf zookeeper-3.4.6.tar.gz | |
| add-apt-repository ppa:openjdk-r/ppa | |
| apt-get update | |
| apt-get install -y openjdk-8-jre | |
| update-java-alternatives --list | |
| update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java | |
| cd /tmp/zookeeper-3.4.6 | |
| echo "tickTime=2000 | |
| dataDir=/var/zookeeper | |
| clientPort=2181" > /tmp/zookeeper-3.4.6/conf/zoo.cfg | |
| /tmp/zookeeper-3.4.6/bin/zkServer.sh start | |
| SCRIPT | |
| # script that runs mesos-master | |
| $master = <<SCRIPT | |
| sudo su | |
| /tmp/mesos/build/bin/mesos-master.sh --work_dir=/tmp --advertise_ip=#{IP} --log_dir=/tmp/mesos-logs & | |
| sleep 10 | |
| SCRIPT | |
| # script that runs mesos-slave | |
| $slave = <<SCRIPT | |
| sudo su | |
| /tmp/mesos/build/bin/mesos-slave.sh --master=#{IP}:5050 --containerizers=mesos,docker --advertise_ip=#{IP} --docker_stop_timeout=10secs --isolation=cgroups/cpu,cgroups/mem --log_dir=/tmp/mesos-logs & | |
| sleep 10 | |
| SCRIPT | |
| # script that runs marathon framework | |
| $marathon = <<SCRIPT | |
| sudo su | |
| MESOS_NATIVE_JAVA_LIBRARY=/tmp/mesos/build/src/.libs/libmesos.so /tmp/marathon-0.13.0/bin/start --hostname #{IP} --master #{IP}:5050 --zk zk://localhost:2181/marathon & | |
| sleep 10 | |
| SCRIPT | |
| #script that creates the python script that will be run in a "standalone" mesos app | |
| $python = <<SCRIPT | |
| sudo su | |
| echo '#!/usr/bin/python | |
| from time import sleep | |
| import signal | |
| import sys | |
| import datetime | |
| def sigterm_handler(_signo, _stack_frame): | |
| print "got %i" % _signo | |
| print datetime.datetime.now().time() | |
| sys.stdout.flush() | |
| sleep(2) | |
| print datetime.datetime.now().time() | |
| print "ending" | |
| sys.stdout.flush() | |
| sys.exit(0) | |
| signal.signal(signal.SIGTERM, sigterm_handler) | |
| signal.signal(signal.SIGINT, sigterm_handler) | |
| try: | |
| print "Hello" | |
| i = 0 | |
| while True: | |
| i += 1 | |
| print datetime.datetime.now().time() | |
| print "Iteration #%i" % i | |
| sys.stdout.flush() | |
| sleep(1) | |
| finally: | |
| print "Goodbye"' > /tmp/script.py | |
| chmod +x /tmp/script.py | |
| SCRIPT | |
| #creates standalone mesos app | |
| $standalone = <<SCRIPT | |
| sudo su | |
| curl -XPOST -d '{"args": ["/tmp/script.py"], "id": "python-standalone", "instances": 1, "cpus": 0.2}' -H "Content-Type: application/json" http://localhost:8080/v2/apps | |
| SCRIPT | |
| #creates dockerized mesos app | |
| $docker = <<SCRIPT | |
| sudo su | |
| curl -XPOST -d '{"args": ["./script.py"], "container": {"type": "DOCKER", "docker": {"image": "bydga/marathon-test-api"}}, "id": "python-docker", "instances": 1, "cpus": 0.2}' -H "Content-Type: application/json" http://localhost:8080/v2/apps | |
| SCRIPT | |
| # go go power rangers | |
| VAGRANTFILE_API_VERSION = "2" | |
| ENV['VAGRANT_DEFAULT_PROVIDER'] = 'virtualbox' | |
| Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | |
| config.vm.provider "virtualbox" do |vb| | |
| vb.memory = "4096" | |
| vb.cpus = "2" | |
| end | |
| config.vm.define "mesosdocker" do |mesosdocker| | |
| mesosdocker.vm.hostname = "mesosdocker" | |
| mesosdocker.vm.box = "trusty-server" | |
| mesosdocker.vm.box_url = "https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box" | |
| #mesosdocker.vm.box_url = "./ubuntu-14.04-amd64-vbox.box" | |
| end | |
| config.vm.network "private_network", ip: "#{IP}" | |
| config.vm.provision "shell", inline: $setup | |
| config.vm.provision "shell", inline: $master | |
| config.vm.provision "shell", inline: $slave | |
| config.vm.provision "shell", inline: $marathon | |
| config.vm.provision "shell", inline: $python | |
| config.vm.provision "shell", inline: $standalone | |
| config.vm.provision "shell", inline: $docker | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment