Swarm½éÉÜ
SwarmÊÇDocker¹«Ë¾ÔÚ2014Äê12Ô³õ·¢²¼µÄÒ»Ì×½ÏΪ¼òµ¥µÄ¹¤¾ß£¬ÓÃÀ´¹ÜÀíDocker¼¯Èº£¬Ëü½«Ò»ÈºDockerËÞÖ÷»ú±ä³ÉÒ»¸öµ¥Ò»µÄ£¬ÐéÄâµÄÖ÷»ú¡£SwarmʹÓñê×¼µÄDocker
API½Ó¿Ú×÷ΪÆäǰ¶Ë·ÃÎÊÈë¿Ú£¬»»ÑÔÖ®£¬¸÷ÖÖÐÎʽµÄDocker Client(dockerclient in
go, docker_py, dockerµÈ)¾ù¿ÉÒÔÖ±½ÓÓëSwarmͨÐÅ¡£Swarm¼¸ºõÈ«²¿ÓÃGoÓïÑÔÀ´Íê³É¿ª·¢£¬ÉÏÖÜÎ壬4ÔÂ17ºÅ£¬Swarm0.2·¢²¼£¬Ïà±È0.1°æ±¾£¬0.2°æ±¾Ôö¼ÓÁËÒ»¸öеIJßÂÔÀ´µ÷¶È¼¯ÈºÖеÄÈÝÆ÷£¬Ê¹µÃÔÚ¿ÉÓõĽڵãÉÏ´«²¥ËüÃÇ£¬ÒÔ¼°Ö§³Ö¸ü¶àµÄDockerÃüÁîÒÔ¼°¼¯ÈºÇý¶¯¡£
Swarm deamonÖ»ÊÇÒ»¸öµ÷¶ÈÆ÷£¨Scheduler£©ºÍ·ÓÉÆ÷(router),Swarm×Ô¼º²»ÔËÐÐÈÝÆ÷£¬ËüÖ»ÊǽÓÊÜdocker¿Í»§¶Ë·¢Ë͹ýÀ´µÄÇëÇ󣬵÷¶ÈÊʺϵĽڵãÀ´ÔËÐÐÈÝÆ÷£¬ÕâÒâζ×Å£¬¼´Ê¹SwarmÓÉÓÚijЩÔÒò¹ÒµôÁË£¬¼¯ÈºÖеĽڵãÒ²»áÕÕ³£ÔËÐУ¬µ±SwarmÖØÐ»ָ´ÔËÐÐÖ®ºó£¬Ëü»áÊÕ¼¯Öؽ¨¼¯ÈºÐÅÏ¢¡£ÏÂÃæÊÇSwarmµÄ½á¹¹Í¼£º
ÈçºÎʹÓÃSwarm


ÓÐ3̨»úÆ÷£¬sclu083£¬IPµØÖ·ÊÇ10.13.181.83,sclu084,IPµØÖ·ÊÇ10.13.181.84£¬atsg124
,IPµØÖ·ÊÇ10.32.105.124£¬ÀûÓÃÕâÈý̨»úÆ÷´´½¨Ò»¸öDocker¼¯Èº£¬ÆäÖÐsclu083ͬʱ³äµ±swarm
manager¹ÜÀí¼¯Èº.
Swarm°²×°
×î¼òµ¥µÄ°²×°SwarmµÄ·½Ê½¾ÍÊÇÓÃDocker¹Ù·½ÌṩµÄSwarm¾µÏñ£º
Docker¼¯Èº¹ÜÀíÐèÒª·þÎñ·¢ÏÖ(Discovery service backend)¹¦ÄÜ.SwarmÖ§³ÖÒÔϼ¸ÖÖdiscovery
service backend£ºDocker HubÉÏÃæÄÚÖõķþÎñ·¢ÏÖ¹¦ÄÜ£¬±¾µØµÄ¾²Ì¬ÎļþÃèÊö¼¯Èº(static
file describing the cluster),etcd(˳´øËµÒ»¾ä£¬etcdÕâÍæÒâÃ²ËÆºÜ»ðºÜÓÐǰ;£¬ÓÐʱ¼äÑо¿ÏÂ),consul,zookeeperºÍһЩ¾²Ì¬µÄipÁбí(a
static list of ips).±¾ÎÄ»áÏêϸ½éÉÜÇ°ÃæÁ½ÖÖ·½·¨backendµÄʹÓá£
ÔÚʹÓÃSwarm½øÐм¯Èº¹ÜÀí֮ǰ£¬ÐèÒªÏȰÑ×¼±¸¼ÓÈ뼯ȺµÄËùÓеĽڵãµÄdocker deamonµÄ¼àÌý¶Ë¿ÚÐÞ¸ÄΪ0.0.0.0:2375£¬¿ÉÒÔÖ±½ÓʹÓÃ
sudo docker ¨CH tcp://0.0.0.0:2375 &ÃüÁҲ¿ÉÒÔÔÚÅäÖÃÎļþÖÐÐÞ¸Ä
sudo vim /etc/default/docker |
ÔÚÎļþµÄ×îºóÃæÌí¼ÓÏÂÃæÕâ¾ä
D0OCKER_OPTS=¡±-H 0.0.0.0:2375 ¨CH unix:///var/run/docker.sock¡± |

×¢Ò⣺һ¶¨ÊÇÒªÔÚËùÓеĽڵãÉϽøÐÐÐÞ¸Ä,ÐÞ¸ÄÖ®ºóÒªÖØÆôdocker deamon
sudo service docker restart |
µÚÒ»ÖÖ·½·¨£ºÊ¹ÓÃDocker HubÉÏÃæÄÚÖõķþÎñ·¢ÏÖ¹¦ÄÜ
µÚÒ»²½£ºÔÚÈκÎһ̨½ÚµãÉÏÃæÖ´ÐÐswarm createÃüÁîÀ´´´½¨Ò»¸ö¼¯Èº±êÖ¾¡£ÕâÌõÃüÁîÖ´ÐÐÍê±ÏÖ®ºó£¬swarm»áǰÍùDocker
HubÉÏÄÚ½¨µÄ·¢ÏÖ·þÎñÖлñȡһ¸öÈ«ÇòΨһµÄtoken,ÓÃÒÔΨһµÄ±êʶswarm¹ÜÀíµÄDocker¼¯Èº¡£
sudo docker run ¨C-rm swarm create |
ÎÒÃÇÔÚsclu084 Õą̂»úÆ÷ÉÏÖ´ÐÐÉÏÃæµÄÃüÁî,Ч¹ûÈçÏ£º

·µ»ØµÄtokenÊÇd947b55aa8fb9198b5d13ad81f61ac4d£¬Õâ¸ötokenÒ»¶¨Òª¼Çס£¬ÒòΪ½ÓÏÂÀ´µÄ²Ù×÷¶¼»áÓõ½ÕâÒ»¸ötoken¡£
µÚ¶þ²½£ºÔÚËùÓеÄÒª¼ÓÈ뼯ȺµÄ»úÆ÷ÉÏÃæÖ´ÐÐswarm joinÃüÁ°Ñ»úÆ÷¼ÓÈ뼯Ⱥ
±¾´ÎÊÔÑé¾ÍÊÇÒªÔÚËùÓеÄÈý̨»úÆ÷ÉÏÖ´ÐÐÃüÁ
sudo docker run ¨C-rm swarm join ¨Caddr=ip_address :2375 token://d947b55aa8fb9198b5d13ad81f61ac4d |
ÔÚIPµØÖ·Îª10.13.181.84»úÆ÷ÉÏÃæÖ´ÐеÄЧ¹ûÈçÏÂͼ£º

Ö´ÐÐÕâÌõÃüÁîºó²»»áÁ¢¼´·µ»Ø £¬ÎÒÃÇÊÖ¶¯Í¨¹ýCtrl+C·µ»Ø¡£
µÚÈý²½£ºÆô¶¯swarm manager
ÒòΪÎÒÃÇÊÇÒªÈÃsclu083³äµ±Swarm¹ÜÀí½Úµã£¬ËùÒÔÎÒÃÇÒªÔÚÕâÌõ»úÆ÷ÉÏÃæÖ´ÐÐswarm manageÕâÌõÃüÁ
sudo docker run ¨Cd ¨Cp 2376:2375 swarm manage token:// d947b55aa8fb9198b5d13ad81f61ac4d |
ÐèҪעÒâµÄÊÇ£ºÔÚÕâÌõÃüÁîÖУ¬µÚÒ»£ºÒªÒÔdaemonµÄÐÎʽÔËÐÐswarm¡£µÚ¶þ£º¶Ë¿ÚÓ³É䣺2376¿ÉÒÔ¸ü»»³ÉÈκÎÒ»¸ö±¾»úûÓÐÕ¼ÓõĶ˿ڣ¬Ò»¶¨²»ÄÜÊÇ2375¡£·ñÔò¾Í»á³öÎÊÌâ¡£
Ö´Ðнá¹ûÈçÏÂÈçËùʾ£º

Ö´ÐÐÍêÕâ¸öÃüÁîÖ®ºó£¬Õû¸ö¼¯ÈºÒѾÆô¶¯ÆðÀ´ÁË¡£
ÏÖÔÚ¿ÉÒÔÔÚÈκÎһ̨½ÚµãÉϲ鿴¼¯ÈºÉϵÄËùÓнڵãÁË¡£

Ö®ºó¿ÉÒÔÔÚÈκÎһ̨°²×°ÁËdockerµÄ»úÆ÷ÉÏÃæÍ¨¹ýÃüÁî(ÃüÁîÖÐÒªÖ¸Ã÷swarm maneger »úÆ÷µÄIPµØÖ·ºÍ¶Ë¿Ú)ÔÚÕâ¸ö¼¯ÈºÉÏÃæÔËÐÐDcokerÈÝÆ÷²Ù×÷¡£
ÏÖÔÚÔÚ10.13.181.85Õą̂»úÆ÷ÉÏÃæ²é¿´¼¯ÈºµÄ½ÚµãµÄÐÅÏ¢¡£infoÃüÁî¿ÉÒÔ»»³ÉÈκÎÒ»¸öSwarmÖ§³ÖµÄdockerÃüÁÕâЩÃüÁî¿ÉÒԲ鿴¹Ù·½Îĵµ
sudo docker ¨CH 10.13.181.83:2376 info |

ÓÉÉÏͼµÄ½á¹û£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖÒ»¸öÎÊÌ⣺Ã÷Ã÷Õâ¸öС¼¯ÈºÖÐÊÇÓÐ3¸ö½ÚµãµÄ£¬µ«ÊÇinfoÃüÁîÖ»ÏÔʾÁË2¸ö½Úµã¡£»¹È±ÉÙ½Úµã10.32.105.124¡£ÎªÊ²Ã´»á³öÏÖÕâ¸öÇé¿öÄØ£¿
ÒòΪ10.32.105.124Õą̂»úÆ÷ûÓÐÉèÖÃÉÏÃæµÄdocker daemon¼àÌý0.0.0.0:2375Õâ¸ö¶Ë¿Ú£¬ËùÒÔSwarmû°ì·¨°ÉÕâ¸ö½Úµã¼ÓÈ뼯ȺÖÐÀ´¡£
ÔÚʹÓÃDocker HubÄÚÖõķ¢ÏÖ·þÎñʱ£¬»á³öÏÖÒ»¸öÎÊÌ⣬¾ÍÊÇʹÓÃswarm createʱ»á³öÏÖ
time="2015-04-21T08:56:25Z" level=fatal msg="Get https://discovery-stage.hub.docker.com/v1/clusters/ d947b55aa8fb9198b5d13ad81f61ac4d: dial tcp: i/o timeout" |
ÀàËÆÓÚÕâÑùµÄ´íÎ󣬲»ÖªµÀÊÇʲôÔÒò£¬Óдý½â¾ö¡£
µ±Ê¹ÓÃDocker HubÄÚÖõķþÎñ·¢ÏÖ¹¦ÄܳöÏÖÎÊÌâʱ£¬¿ÉÒÔʹÓÃÏÂÃæµÄµÚ¶þÖÖ·½·¨¡£
µÚ¶þÖÖ·½·¨£ºÊ¹ÓÃÎļþ
µÚ¶þÖÖ·½·¨Ïà¶Ô¶øÑԱȵÚÒ»ÖÖ·½·¨Òª¼òµ¥£¬Ò²¸ü²»ÈÝÒ׳öÏÖtimeoutµÄÎÊÌâ¡£
µÚÒ»²½£ºÔÚsclu083Õą̂»úÆ÷ÉÏн¨Ò»¸öÎļþ£¬°ÑÒª¼ÓÈ뼯ȺµÄ»úÆ÷µÄIPµØÖ·Ð´½øÈ¥

µÚ¶þ²½£ºÔÚsclu083Õą̂»úÆ÷ÉÏÃæÖ´ÐÐswarm manageÃüÁ
sudo docker run ¨Cd ¨Cp 2376:2375 ¨Cv $(pwd)/cluster:/tmp/ cluster swarm manage file:///tmp/cluster |

×¢Ò⣺ÕâÀïÒ»¶¨ÒªÊ¹ÓÃ-vÃüÁÒòΪclusterÎļþÊÇÔÚ±¾»úÉÏÃæ£¬Æô¶¯µÄÈÝÆ÷ĬÈÏÊÇ·ÃÎʲ»µ½µÄ£¬ËùÒÔҪͨ¹ý-vÃüÁî¹²Ïí¡£»¹ÓУ¬file:///ǧÍò²»ÄÜÍü¼ÇÁË
¿ÉÒÔ¿´µ½£¬swarmÒѾÔËÐÐÆðÀ´ÁË¡£ÏÖÔÚ¿ÉÒԲ鿴ϼ¯Èº½ÚµãÐÅÏ¢ÁË£¬Ê¹ÓÃÃüÁ
sudo docker run ¨Crm ¨Cv $(pwd)/cluster:/tmp/cluster swarm list file:///tmp/cluster |

(ÔÚʹÓÃÎļþ×÷Ϊ·þÎñ·¢ÏÖµÄʱºò£¬Ã²ËÆmanage listÃüÁîÖ»ÄÜÔÚswarm manage½ÚµãÉÏʹÓã¬ÔÚÆäËû½ÚµãÉϺÃÏñÊÇÓò»ÁË)
ºÃÁË£¬ÏÖÔÚ¼¯ÈºÒ²ÒѾÔËÐÐÆðÀ´ÁË£¬¿ÉÒÔ¸úµÚÒ»ÖÖ·½·¨Ò»ÑùÔÚÆäËû»úÆ÷ÉÏʹÓü¯ÈºÁË¡£Í¬ÑùÔÚsclu085 »úÆ÷ÉÏ×ö²âÊÔ:

¿ÉÒÔ¿´µ½£¬³É¹¦·ÃÎʲ¢ÇÒ½ÚµãÐÅÏ¢ÊÇÕýÈ·µÄ¡£½ÓÏÂÀ´¿ÉÒÔ°ÑÉÏÃæµÄinfoÃüÁîÌæ»»³ÉÆäËûdocker¿ÉÖ´ÐÐÃüÁîÀ´Ê¹ÓÃÕâ¸öÏþµÃDocker¼¯ÈºÁË¡£
Swarmµ÷¶È²ßÂÔ
SwarmÔÚschedule½ÚµãÔËÐÐÈÝÆ÷µÄʱºò£¬»á¸ù¾ÝÖ¸¶¨µÄ²ßÂÔÀ´¼ÆËã×îÊʺÏÔËÐÐÈÝÆ÷µÄ½Úµã£¬Ä¿Ç°Ö§³ÖµÄ²ßÂÔÓУºspread,binpack,random.
Random¹ËÃû˼Ò壬¾ÍÊÇËæ»úÑ¡ÔñÒ»¸öNodeÀ´ÔËÐÐÈÝÆ÷£¬Ò»°ãÓÃ×÷µ÷ÊÔÓã¬spreadºÍbinpack²ßÂÔ»á¸ù¾Ý¸÷¸ö½ÚµãµÄ¿ÉÓõÄCPU,RAMÒÔ¼°ÕýÔÚÔËÐеÄÈÝÆ÷µÄÊýÁ¿À´¼ÆËãÓ¦¸ÃÔËÐÐÈÝÆ÷µÄ½Úµã¡£
ÔÚͬµÈÌõ¼þÏ£¬Spread²ßÂÔ»áÑ¡ÔñÔËÐÐÈÝÆ÷×îÉÙµÄÄÇ̨½ÚµãÀ´ÔËÐÐеÄÈÝÆ÷£¬binpack²ßÂÔ»áÑ¡ÔñÔËÐÐÈÝÆ÷×ÖеÄÄÇ̨»úÆ÷À´ÔËÐÐеĽڵã(The
binpack strategy causes Swarm to optimize for the container
which is most packed.)¡£
ʹÓÃSpread²ßÂÔ»áʹµÃÈÝÆ÷»á¾ùºâµÄ·Ö²¼ÔÚ¼¯ÈºÖеĸ÷¸ö½ÚµãÉÏÔËÐУ¬Ò»µ©Ò»¸ö½Úµã¹ÒµôÁËÖ»»áËðʧÉÙ²¿·ÖµÄÈÝÆ÷¡£
Binpack²ßÂÔ×î´ó»¯µÄ±ÜÃâÈÝÆ÷Ë鯬»¯£¬¾ÍÊÇ˵binpack²ßÂÔ¾¡¿ÉÄܵİѻ¹Î´Ê¹ÓõĽڵãÁô¸øÐèÒª¸ü´ó¿Õ¼äµÄÈÝÆ÷ÔËÐУ¬¾¡¿ÉÄܵİÑÈÝÆ÷ÔËÐÐÔÚÒ»¸ö½ÚµãÉÏÃæ¡£
Constraint Filter
ͨ¹ýlabelÀ´ÔÚÖ¸¶¨µÄ½ÚµãÉÏÃæÔËÐÐÈÝÆ÷¡£ÕâЩlabelÊÇÔڵض´docker daemonʱָ¶¨µÄ£¬Ò²¿ÉÒÔÐ¶ÔØ/etc/default/dockerÕâ¸öÅäÖÃÎļþÀïÃæ¡£
sudo docker run ¨CH 10.13.181.83:2376 run ¨Cname redis_083 ¨Cd ¨Ce constraint :label==083 redis |
Affinity Filter
ʹÓÃ-e affinity:container==container_name / container_id
¨C-name container_1¿ÉÒÔÈÃÈÝÆ÷container_1½ô°¤×ÅÈÝÆ÷container_name
/ container_idÖ´ÐУ¬Ò²¾ÍÊÇ˵Á½¸öÈÝÆ÷ÔÚÒ»¸önodeÉÏÃæÖ´ÐÐ(You can schedule
2 containers and make the container #2 next to the container
#1.)
ÏÈÔÚһ̨»úÆ÷ÉÏÆô¶¯Ò»¸öÈÝÆ÷
sudo docker -H 10.13.181.83:2376 run --name redis_085
-d -e constraint:label==085 redis |
½ÓÏÂÀ´Æô¶¯ÈÝÆ÷redis_085_1£¬ÈÃredis_085_1½ô°¤×Åredis_085ÈÝÆ÷ÔËÐУ¬Ò²¾ÍÊÇÔÚÒ»¸ö½ÚµãÉÏÔËÐÐ
sudo docker ¨CH 10.13.181.83:2376 run ¨Cd ¨Cname redis_085_1 ¨Ce affinity :container==redis_085 redis |
ͨ¹ý-e affinity:image=image_nameÃüÁî¿ÉÒÔÖ¸¶¨Ö»ÓÐÒѾÏÂÔØÁËimage_nameµÄ»úÆ÷²ÅÔËÐÐÈÝÆ÷(You
can schedule a container only on nodes where the images
are already pulled)
ÏÂÃæÃüÁîÔÚÖ»ÓÐredis¾µÏñµÄ½ÚµãÉÏÃæÆô¶¯redisÈÝÆ÷:
sudo docker ¨CH 100.13.181.83:2376 run ¨Cname redis1 ¨Cd ¨Ce affinity:image==redis redis |
ÏÂÃæÕâÌõÃüÁî´ïµ½µÄЧ¹ûÊÇ£ºÔÚÓÐredis¾µÏñµÄ½ÚµãÉÏÃæÆô¶¯Ò»¸örÃû×Ö½Ð×öredisµÄÈÝÆ÷£¬Èç¹ûÿ¸ö½ÚµãÉÏÃæ¶¼Ã»ÓÐredisÈÝÆ÷£¬¾Í°´ÕÕĬÈϵIJßÂÔÆô¶¯redisÈÝÆ÷¡£
sudo docker -H 10.13.181.83:2376 run -d --name redis -e affinity:image==~redis redis |
Port filter
PortÒ²»á±»ÈÏΪÊÇÒ»¸öΨһµÄ×ÊÔ´
sudo docker -H 10.13.181.83:2376 run -d -p 80:80 nginx |
Ö´ÐÐÍêÕâÌõÃüÁÈκÎʹÓÃ80¶Ë¿ÚµÄÈÝÆ÷¶¼ÊÇÆô¶¯Ê§°Ü¡£
½áÊøÓ
±¾ÎÄÏêϸ½éÉÜÁËÁ½ÖÖ·½·¨À´Ê¹ÓÃSwarm¹ÜÀíDocker¼¯Èº¡£µ«ÊÇSwarmÊÇÒ»¸ö±È½ÏеÄÏîÄ¿£¬Ä¿Ç°»¹´¦ÓÚÑз¢½×¶Î£¬SwarmµÄ·¢Õ¹Ê®·Ö¿ìËÙ£¬¹¦ÄܺÍÌØÐԵıä¸üµü´ú»¹·Ç³£Æµ·±¡£Òò´Ë£¬¿ÉÒÔ˵Swarm»¹²»ÍƼö±»ÓÃÓÚÉú²ú»·¾³ÖУ¬µ«¿ÉÒԿ϶¨µÄÊÇSwarmÊÇÒ»ÏîºÜÓÐǰ;µÄ¼¼Êõ¡£
|