±¾ÎÄÖ÷Òª½éÉÜMesosºÍMarathonµÄ´î½¨ÒÔ¼°ÈçºÎÍê³ÉÕû¸ö³ÖÐø½»¸¶¹ý³Ì£¬ÒÔ¼°ºóÐø»¹¿ÉÒÔ×öÄÄЩ¸Ä½øºÍ¼ÓÇ¿¡£Õû¸öϵͳ´î½¨Íê³Éºó£¬Ó¦ÓôúÂëµÄ¸Ä±ä»á
×Ô¶¯´¥·¢Jenkins¹¹½¨Á÷³Ì£¬¼¸ÃëÖӺ󣬸ıä¾Í»áͨ¹ýJenkins¡¢Docker HubºÍMarathon´«µÝµ½MesosÖв¿ÊðÉÏÏߣ¬ÊDz»ÊǺܿ᣿
µÚÒ»²¿·Ö£¨ ÖÐÎÄ·Ò룩ÎÒÃǽéÉÜÁËÈçºÎDocker»¯Ò»¸öNode.jsÓ¦Óã¬ÈçºÎʹÓÃFig²¿ÊðJenkinsºÍDocker
Registry£¬ÒÔ¼°ÈçºÎʵÏÖNode.jsÓ¦ÓõijÖÐø¼¯³É¡£
±¾ÎÄÊǵڶþ²¿·Ö£¬½«¼ÌÐø½éÉÜMesosºÍMarathonµÄ´î½¨ÒÔ¼°ÈçºÎÍê³ÉÕû¸ö³ÖÐø½»¸¶¹ý³Ì¡£

Èç¹ûÄã²»Á˽âMesos»òÕßMarathon£¬¿ÉÒԲο¼ÈçÏÂÎÄÕ£º ÎÄÕÂ1¡¢ ÎÄÕÂ2ºÍ ÎÄÕÂ3¡£
ÏÖÔÚ£¬ÎÒÃÇÓÐÁ˹¦ÄÜÐÔ¿ª·¢ºÍ³ÖÐø¼¯³ÉµÄ»·¾³£¬¿ÉÒÔ¿ªÊ¼´î½¨Mesos¼¯ÈºÁË¡£
ÈçÏÂÊǰüº¬ÏµÍ³ËùÓв¿·ÖµÄfig.ymlÎļþ¡£ÔÚ֮ǰÅäÖúõÄJenkinsºÍDocker Registry»ù´¡Ö®ÉÏ£¬ÎÒÃÇ»¹ÓÐMesos
master¡¢Mesos slave¡¢Mesosphere MarathonºÍ¸ºÔðÄÚ²¿MesosͨÐŵÄZookeeper¡£
# Zookeeper: -p 2181:2181 -p 2888:2888 -p 3888:3888 zookeeper: image: jplock/zookeeper:3.4.5 ports: - "2181" master: image: redjack/mesos-master:0.21.0 hostname: master links: - zookeeper:zookeeper environment: - MESOS_ZK=zk://zookeeper:2181/mesos - MESOS_QUORUM=1 - MESOS_WORK_DIR=/var/lib/mesos - MESOS_LOG_DIR=/var/log ports: - "5050:5050" marathon: #image: garland/mesosphere-docker-marathon image: mesosphere/marathon links: - zookeeper:zookeeper ports: - "8080:8080" # this image does not respect MARATHON_ env variables, so adding the params via command command: --master zk://zookeeper:2181/mesos --zk zk://zookeeper:2181/marathon slave: image: redjack/mesos-slave:0.21.0 links: - zookeeper:zookeeper - master:master environment: - MESOS_MASTER=zk://zookeeper:2181/mesos - MESOS_EXECUTOR_REGISTRATION_TIMEOUT=5mins - MESOS_CONTAINERIZERS=docker,mesos - MESOS_ISOLATOR=cgroups/cpu,cgroups/mem - MESOS_LOG_DIR=/var/log volumes: - /var/run/docker.sock:/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /sys:/sys:ro - mesosslace-stuff:/var/log expose: - "5051" jenkins: image: containersol/jenkins_with_docker links: - marathon:marathon volumes: - jenkins-stuff:/var/jenkins_home - .:/var/jenkins_data - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker ports: - "8081:8080" registry: image: registry environment: - STORAGE_PATH=/registry volumes: - registry-stuff:/registry ports: - "5000:5000" |
fig.yml²»¶à×ö½âÊÍ¡£ËùÓл·¾³²ÎÊý¶¼ÊDzο¼Docker HubÉ϶ÔÓ¦¾µÏñµÄʹÓýéÉÜ¡£
Mesos slaveÈÝÆ÷»¹Ê¹ÓÃÁ˹ÒÔØsocketµÄ¼¼ÇÉ£¬²»¹ý²»ÐèÒª×ö±ðµÄ£¬ÒòΪslaveÊÇÓÃrootÓû§ÔËÐеģ¬ÓзÃÎÊsocketµÄȨÏÞ¡£
ҪעÒâJenkinsÈÝÆ÷Á¬½Óµ½ÁËMarathon¡£Õâ¾ÍÒªÇóÄܹ»´ÓJenkinsÈÝÆ÷·¢ËÍÇëÇóµ½MarathonÈÝÆ÷Àï¡£ÎÒÃÇÔÚÏÂÒ»Õ½éÉܲ¿ÊðµÄʱºò»áÏêϸ˵Ã÷¡£
ÏÖÔÚÖØÆôϵͳ£¬¿ÉÒÔ¿´µ½ÏµÍ³¿ªÊ¼ÔËÐУº
$ fig up Creating cddemo_registry_1... Recreating cddemo_zookeeper_1... Creating cddemo_master_1... Creating cddemo_slave_1... Recreating cddemo_marathon_1... Creating cddemo_jenkins_1... |
ÈÝÆ÷Æô¶¯·Ç³£¿ì£¬µ«ÊÇÒªµÈËùÓзþÎñ¶¼ÉÏÏß´ó¸Å»¨ÁË30Ã루ÔÚMacBook AirÉϵÄUbuntuÐéÄâ»úÀ¡£
MesosÔÚhttp://localhost:5050¡£ÈçϽØÍ¼Àï¿ÉÒÔ¿´µ½Ò»¸ö»î¶¯µÄslave¡£¸ÃslaveÔÚ±¾´ÎÅäÖÃÏÂûÓб©Â¶Èκζ˿ڡ£

´Óhttp://localhost:8080¿ÉÒÔ·ÃÎÊMarathon¡£
²¿Êð
×îºóÒ»²½Êǽ«ÎÒÃÇÓÃMarathonÔÚMesosÉÏй¹½¨µÄDocker¾µÏñ²¿ÊðºÃ¡£
Ê×ÏÈÐèÒª´´½¨ÅäÖÃÎļþ½«Ó¦Óð²Åŵ½MarathonÉÏ£¬ÈçÏÂapp_marathon.json:
{ "id": "app", "container": { "docker": { "image": "localhost:5000/containersol/nodejs_app:latest", "network": "BRIDGE", "portMappings": [ {"containerPort": 8000, "servicePort": 8000} ] } }, "cpus": 0.2, "mem": 512.0, "instances": 1 } |
ÕâÀïÒ²ÓÐһЩÐèҪעÒâµÄµØ·½¡£±ÈÈ磬ûÓÐÌáµ½½¡¿µ¼ì²é£¬ÐèÒª¸æËßMarathonÓ¦ÓÃÔËÐкͲ»ÔËÐеÄʱ¼ä¡£
Ò»µ©ÎÒÃÇ·¢²¼ÁËÕâ¸öJSONÎļþ£¬¾Í¿ÉÒÔÔÚdeploy.shÀïÌí¼Ó×îеĽű¾£¬ÒƳý×î½üÔËÐеÄÓ¦Ó㬲¢ÇÒÓÃеľµÏñÖØÐ²¿ÊðËü¡£µ±È»ÓиüºÃµÄÉý¼¶²ßÂÔ£¬²»¹ý²»ÔÚÕâÀïÌÖÂÛ¡£
#!/bin/bash
if [ -z "${1}" ]; then
version="latest"
marathon="localhost"
else
version="${1}"
marathon=${MARATHON_PORT_8080_TCP_ADDR}
fi
# destroy old application
curl -X DELETE -H "Content-Type: application/json" http://${marathon}:8080/v2/apps/app
# I know this one is ugly. But it works for now.
sleep 1
# these lines will create a copy of app_marathon.json and update the image version
cp -f app_marathon.json app_marathon.json.tmp
sed -i "s/latest/${version}/g" app_marathon.json.tmp
# post the application to Marathon
curl -X POST -H "Content-Type: application/json" http://${marathon}:8080/v2/apps -d@app_marathon.json.tmp
|
×îºóÒ»²½Êǽ«deploy.shÌí¼Óµ½JenkinsµÄÅäÖÃÖв¢ÔËÐй¹½¨¡£
³É¹¦¹¹½¨Ö®ºó£¬¿ÉÒÔ¿´µ½Ó¦ÓÃÔËÐÐÔÚMarathonÉÏ£º

´Óhttp://localhost:31000¿ÉÒÔ·ÃÎÊÎÒÃÇ×Ô¼ºµÄÓ¦Óãº
ÏÖÔÚ¿ÉÒÔÊÔןıäÓ¦Óò¢ÇÒ´¥·¢JenkinsÈ¥¹¹½¨build¡£¼¸ÃëÖÓºó£¬Õâ¸ö¸Ä±ä¾Í»áͨ¹ýJenkins¡¢Docker
HubºÍMarathon´«µÝµ½MesosÀ
¸Ä½ø
ÒªÏë¸Ä½øÕâ¸öϵͳÓÐÁ½¸ö´ó·½Ïò£ºÌí¼Ó¸ü¶àµÄ¹¦ÄÜÒÔ¼°ÌáÉý´î½¨ÖÊÁ¿£¨deepening
the quality of the setup£©¡£¿ÉÄܵÄÀ©Õ¹Óкܶ࣬ÎÒÃÇÖ»ÁÐÁ˼¸¸öÀý×Ó£º
½«HelloWorldʾÀýÀ©Õ¹ÎªÒ»¸ö±ê×¼WebÓ¦ÓÃ
¶àÓïÑÔÖ§³Ö
¶à²ã´ÎµÄ×Ô¶¯»¯²âÊÔ£¨µ¥Ôª²âÊÔ¡¢ÏµÍ³²âÊÔ¡¢ÐÔÄܲâÊԵȵȡ££©
ÓÃGit hook×Ô¶¯´¥·¢Jenkins build
²¿Êðµ½¹«ÓÐÔÆÀ±ÈÈçGCE¡¢AWSµÈ
ÔÚ¶àÖ÷»úÉÏÔËÐÐ
HAProxy´î½¨
ÓÃJmeterʵÏÖ¸ºÔØÄ£ÄâϵÄ×Ô¶¯À©Õ¹
²¿ÊðÒ»¸ö»ùÓÚ΢·þÎñµÄϵͳ
ʹÓÃFlocker×ö³Ö¾Ã»¯´æ´¢
ʹÓÃWeave×÷ÎªÍøÂçÈÝÆ÷
ʹÓÃConsulʵÏÖ×Ô¶¯·þÎñ·¢ÏÖ
Ìí¼Óϵͳ¼à¿Ø
Ìí¼Ó¼¯ÖÐʽÈÕÖ¾
ÎÒµÄÏÂÒ»²½Ïëʹϵͳ¿ÉÒÔÃæÏòÍⲿÓû§£¬Ìí¼ÓHAProxyºÍ×Ô¶¯À©Õ¹µÄÄÜÁ¦£¬ÈçÏÂͼËùʾ£º
×îºóµÄ»°
Ò»¿ªÊ¼´î½¨Õâ¸öϵͳÖ÷ÒªÊÇÏë°ïÖú¿ª·¢ºÍÔËάÈËԱѧϰÈçºÎÔÚ³ÖÐø½»¸¶ÁìÓòʹÓÃDockerºÍMesos¡£ÔÚ¼¸¸öÔµĹý³ÌÖÐÎÒ·¢ÏÖÍêÕûµÄϵͳºÜ¸´ÔÓ£¬ºÜÄѽâÊÍ£¬¸üÄѴºÍʹÓá£
ÎÒÃÇÇë Marta marszal´´½¨Á˱¾ÎĵÄͼ±í£¬ÒÔÈÃÎÄÕ¸üÈÝÒ×Àí½â¡£
Èç¹ûÓиĽø±¾Ê¾ÀýϵͳµÄ½¨Ò飬ÇëÒ»¶¨¸æËßÎÒÃÇ¡£
|