Docker¼¯Èº¹ÜÀíºÍ±àÅŵÄÌØÐÔÊÇͨ¹ýSwarmKit½øÐй¹½¨µÄ£¬
ÆäÖÐSwarm modeÊÇDocker EngineÄÚÖÃÖ§³ÖµÄÒ»ÖÖĬÈÏʵÏÖ¡£Docker 1.12ÒÔ¼°¸üеİ汾£¬¶¼Ö§³ÖSwarm
mode£¬ÎÒÃÇ¿ÉÒÔ»ùÓÚDocker EngineÀ´¹¹½¨Swarm¼¯Èº£¬È»ºó¾Í¿ÉÒÔ½«ÎÒÃǵÄÓ¦Ó÷þÎñ£¨Application
Service£©²¿Êðµ½Swarm¼¯ÈºÖС£´´½¨Swarm¼¯ÈºµÄ·½Ê½ºÜ¼òµ¥£¬Ïȳõʼ»¯Ò»¸öSwarm¼¯Èº£¬È»ºó½«ÆäËûµÄNode¼ÓÈëµ½¸Ã¼¯Èº¼´¿É¡£±¾ÎÄÖ÷Òª»ùÓÚDocker
Swarm¹ÙÍøÎĵµ£¬Ñ§Ï°×ܽᡣ
»ù±¾ÌØÐÔ
Docker Swarm¾ßÓÐÈçÏ»ù±¾ÌØÐÔ£º
¼¯Èº¹ÜÀí¼¯³É½øDocker Engine
ʹÓÃÄÚÖõļ¯Èº¹ÜÀí¹¦ÄÜ£¬ÎÒÃÇ¿ÉÒÔÖ±½Óͨ¹ýDocker CLIÃüÁîÀ´´´½¨Swarm¼¯Èº£¬È»ºóÈ¥²¿ÊðÓ¦Ó÷þÎñ£¬¶ø²»ÔÙÐèÒªÆäËüÍⲿµÄÈí¼þÀ´´´½¨ºÍ¹ÜÀíÒ»¸öSwarm¼¯Èº¡£
È¥ÖÐÐÄ»¯Éè¼Æ
Swarm¼¯ÈºÖаüº¬ManagerºÍWorkerÁ½ÀàNode£¬ÎÒÃÇ¿ÉÒÔÖ±½Ó»ùÓÚDocker EngineÀ´²¿ÊðÈκÎÀàÐ͵ÄNode¡£¶øÇÒ£¬ÔÚSwarm¼¯ÈºÔËÐÐÆÚ¼ä£¬ÎÒÃǼȿÉÒÔ¶ÔÆä×÷³öÈκθı䣬ʵÏÖ¶Ô¼¯ÈºµÄÀ©ÈݺÍËõÈݵȣ¬ÈçÌí¼ÓManager
Node£¬Èçɾ³ýWorker Node£¬¶ø×öÕâЩ²Ù×÷²»ÐèÒªÔÝÍ£»òÖØÆôµ±Ç°µÄSwarm¼¯Èº·þÎñ¡£
ÉùÃ÷ʽ·þÎñÄ£ÐÍ£¨Declarative Service Model£©
ÔÚÎÒÃÇʵÏÖµÄÓ¦ÓÃÕ»ÖУ¬Docker EngineʹÓÃÁËÒ»ÖÖÉùÃ÷µÄ·½Ê½£¬ÈÃÎÒÃÇ¿ÉÒÔ¶¨ÒåÎÒÃÇËùÆÚÍûµÄ¸÷ÖÖ·þÎñµÄ״̬£¬ÀýÈ磬ÎÒÃÇ´´½¨ÁËÒ»¸öÓ¦Ó÷þÎñÕ»£ºÒ»¸öWebǰ¶Ë·þÎñ¡¢Ò»¸öºó¶ËÊý¾Ý¿â·þÎñ¡¢Webǰ¶Ë·þÎñÓÖÒÀÀµÓÚÒ»¸öÏûÏ¢¶ÓÁзþÎñ¡£
·þÎñÀ©ÈÝËõÈÝ
¶ÔÓÚÎÒÃDz¿ÊðµÄÿһ¸öÓ¦Ó÷þÎñ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÃüÁîÐеķ½Ê½£¬ÉèÖÃÆô¶¯¶àÉÙ¸öDockerÈÝÆ÷È¥ÔËÐÐËü¡£ÒѾ²¿ÊðÍê³ÉµÄÓ¦Óã¬Èç¹ûÓÐÀ©ÈÝ»òËõÈݵÄÐèÇó£¬Ö»ÐèҪͨ¹ýÃüÁîÐÐÖ¸¶¨ÐèÒª¼¸¸öDockerÈÝÆ÷¼´¿É£¬Swarm¼¯ÈºÔËÐÐʱ±ãÄÜ×Ô¶¯µØ¡¢Áé»îµØ½øÐе÷Õû¡£
е÷Ô¤ÆÚ״̬Óëʵ¼Ê״̬µÄÒ»ÖÂÐÔ
Swarm¼¯ÈºManager Node»á²»¶ÏµØ¼à¿Ø¼¯ÈºµÄ״̬£¬Ðµ÷¼¯Èº×´Ì¬Ê¹µÃÎÒÃÇÔ¤ÆÚ״̬ºÍʵ¼Ê״̬±£³ÖÒ»Ö¡£ÀýÈçÎÒÃÇÆô¶¯ÁËÒ»¸öÓ¦Ó÷þÎñ£¬Ö¸¶¨·þÎñ¸±±¾Îª10£¬Ôò»áÆô¶¯10¸öDockerÈÝÆ÷È¥ÔËÐУ¬Èç¹ûij¸öWorker
NodeÉÏÃæÔËÐеÄ2¸öDockerÈÝÆ÷¹ÒµôÁË£¬ÔòSwarm Manager»áÑ¡Ôñ¼¯ÈºÖÐÆäËü¿ÉÓõÄWorker
Node£¬²¢´´½¨2¸ö·þÎñ¸±±¾£¬Ê¹Êµ¼ÊÔËÐеÄDockerÈÝÆ÷ÊýÈÔÈ»±£³ÖÓëÔ¤ÆÚµÄ10¸öÒ»Ö¡£
¶àÖ÷»úÍøÂç
ÎÒÃÇ¿ÉÒÔΪ´ý²¿ÊðÓ¦Ó÷þÎñÖ¸¶¨Ò»¸öOverlayÍøÂ磬µ±Ó¦Ó÷þÎñ³õʼ»¯»òÕß½øÐиüÐÂʱ£¬Swarm ManagerÔÚ¸ø¶¨µÄOverlayÍøÂçÖÐΪDockerÈÝÆ÷×Ô¶¯µØ·ÖÅäIPµØÖ·£¬Êµ¼ÊÊÇÒ»¸öÐéÄâIPµØÖ·£¨VIP£©¡£
·þÎñ·¢ÏÖ
Swarm Manager»á¸ø¼¯ÈºÖÐÿһ¸ö·þÎñ·ÖÅäÒ»¸öΨһµÄDNSÃû³Æ£¬¶ÔÔËÐÐÖеÄDockerÈÝÆ÷½øÐиºÔؾùºâ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýSwarmÄÚÖõÄDNS
Server£¬²éѯSwarm¼¯ÈºÖÐÔËÐеÄDockerÈÝÆ÷״̬¡£
¸ºÔؾùºâ
ÔÚSwarmÄÚ²¿£¬¿ÉÒÔÖ¸¶¨ÈçºÎÔÚ¸÷¸öNodeÖ®¼ä·Ö·¢·þÎñÈÝÆ÷£¨Service Container£©£¬ÊµÏÖ¸ºÔؾùºâ¡£Èç¹ûÏëҪʹÓÃSwarm¼¯ÈºÍⲿµÄ¸ºÔؾùºâÆ÷£¬¿ÉÒÔ½«·þÎñÈÝÆ÷µÄ¶Ë¿Ú±©Â¶µ½Íⲿ¡£
°²È«²ßÂÔ
ÔÚSwarm¼¯ÈºÄÚ²¿µÄNode£¬Ç¿ÖÆÊ¹ÓûùÓÚTLSµÄË«ÏòÈÏÖ¤£¬²¢ÇÒÔÚµ¥¸öNodeÉÏÒÔ¼°ÔÚ¼¯ÈºÖеÄNodeÖ®¼ä£¬¶¼½øÐа²È«µÄ¼ÓÃÜͨÐÅ¡£ÎÒÃÇ¿ÉÒÔÑ¡ÔñʹÓÃ×ÔÇ©ÃûµÄ¸ùÖ¤Ê飬»òÕßʹÓÃ×Ô¶¨ÒåµÄ¸ùCA£¨Root
CA£©Ö¤Êé¡£
¹ö¶¯¸üУ¨Rolling Update£©
¶ÔÓÚ·þÎñÐèÒª¸üеij¡¾°£¬ÎÒÃÇ¿ÉÒÔÔÚ¶à¸öNodeÉϽøÐÐÔöÁ¿²¿Êð¸üУ¬Swarm ManagerÖ§³Öͨ¹ýʹÓÃDocker
CLIÉèÖÃÒ»¸ödelayʱ¼ä¼ä¸ô£¬ÊµÏÖ¶à¸ö·þÎñÔÚ¶à¸öNodeÉÏÒÀ´Î½øÐв¿Êð¡£ÕâÑù¿ÉÒԷdz£Áé»îµØ¿ØÖÆ£¬Èç¹ûÓÐÒ»¸ö·þÎñ¸üÐÂʧ°Ü£¬ÔòÔÝÍ£ºóÃæµÄ¸üвÙ×÷£¬ÖØÐ»عöµ½¸üÐÂ֮ǰµÄ°æ±¾¡£
»ù±¾¼Ü¹¹
Docker SwarmÌṩÁË»ù±¾µÄ¼¯ÈºÄÜÁ¦£¬Äܹ»Ê¹¶à¸öDocker Engine×éºÏ³ÉÒ»¸ögroup£¬Ìṩ¶àÈÝÆ÷·þÎñ¡£SwarmʹÓñê×¼µÄDocker
API£¬Æô¶¯ÈÝÆ÷¿ÉÒÔÖ±½ÓʹÓÃdocker runÃüÁî¡£Swarm¸üºËÐĵÄÔòÊǹØ×¢ÈçºÎÑ¡ÔñÒ»¸öÖ÷»ú²¢ÔÚÆäÉÏÆô¶¯ÈÝÆ÷£¬×îÖÕÔËÐзþÎñ¡£
Docker Swarm»ù±¾¼Ü¹¹£¬ÈçÏÂͼËùʾ£¨À´×ÔÍøÂ磬Ïê¼ûºóÃæ²Î¿¼Á´½Ó£©£º

ÈçÉÏͼËùʾ£¬Swarm Node±íʾ¼ÓÈëSwarm¼¯ÈºÖеÄÒ»¸öDocker EngineʵÀý£¬»ùÓÚ¸ÃDocker
Engine¿ÉÒÔ´´½¨²¢¹ÜÀí¶à¸öDockerÈÝÆ÷¡£ÆäÖУ¬×ʼ´´½¨Swarm¼¯ÈºµÄʱºò£¬Swarm Manager±ãÊǼ¯ÈºÖеĵÚÒ»¸öSwarm
Node¡£ÔÚËùÓеÄNodeÖУ¬ÓÖ¸ù¾ÝÆäÖ°ÄÜ»®·ÖΪManager NodeºÍWorker Node£¬¾ßÌå·Ö±ðÈçÏÂËùʾ£º
Manager Node
Manager Node¸ºÔðµ÷¶ÈTask£¬Ò»¸öTask±íʾҪÔÚSwarm¼¯ÈºÖеÄij¸öNodeÉÏÆô¶¯DockerÈÝÆ÷£¬Ò»¸ö»ò¶à¸öDockerÈÝÆ÷ÔËÐÐÔÚSwarm¼¯ÈºÖеÄij¸öWorker
NodeÉÏ¡£Í¬Ê±£¬Manager Node»¹¸ºÔð±àÅÅÈÝÆ÷ºÍ¼¯Èº¹ÜÀí¹¦ÄÜ£¨»òÕ߸ü׼ȷµØËµ£¬ÊǾßÓÐManager¹ÜÀíÖ°ÄܵÄNode£©£¬Î¬»¤¼¯ÈºµÄ״̬¡£ÐèҪעÒâµÄÊÇ£¬Ä¬ÈÏÇé¿öÏ£¬Manager
NodeÒ²×÷Ϊһ¸öWorker NodeÀ´Ö´ÐÐTask¡£SwarmÖ§³ÖÅäÖÃManagerÖ»×÷Ϊһ¸öרÓõĹÜÀíNode£¬ºóÃæÎÒÃÇ»áÏêϸ˵Ã÷¡£
Worker Node
Worker Node½ÓÊÕÓÉManager Nodeµ÷¶È²¢Ö¸ÅɵÄTask£¬Æô¶¯Ò»¸öDockerÈÝÆ÷À´ÔËÐÐÖ¸¶¨µÄ·þÎñ£¬²¢ÇÒWorker
NodeÐèÒªÏòManager Node»ã±¨±»Ö¸ÅɵÄTaskµÄÖ´ÐÐ״̬¡£
¹¹½¨Swarm¼¯Èº
ÎÒÃÇʵ¼ùSwarm¼¯Èº£¬°üÀ¨Èý¸ö½ÚNode£¬¶ÔÓ¦µÄÖ÷»úÃûºÍIPµØÖ··Ö±ðÈçÏÂËùʾ£º
manager 192.168.1.107 worker1 192.168.1.108 worker2 192.168.1.109 |
Ê×ÏÈ£¬ÐèÒª±£Ö¤¸÷¸öNodeÉÏ£¬docker daemon½ø³ÌÒѾÕý³£Æô¶¯£¬Èç¹ûûÓÐÔòÖ´ÐÐÈçÏÂÃüÁîÆô¶¯£º
½ÓÏÂÀ´¾Í¿ÉÒÔ´´½¨Swarm¼¯Èº£¬´´½¨SwarmµÄÃüÁ¸ñʽÈçÏÂËùʾ£º
docker swarm init --advertise-addr <MANAGER-IP> |
ÎÒÃÇÔÚ×¼±¸ºÃµÄmanager NodeÉÏ£¬µÇ¼µ½¸ÃNode£¬´´½¨Ò»¸öSwarm£¬Ö´ÐÐÈçÏÂÃüÁ
docker swarm init --advertise-addr 192.168.1.107 |
ÉÏÃæ¨Cadvertise-addrÑ¡ÏîÖ¸¶¨Manager Node»ápublishËüµÄµØÖ·Îª192.168.1.107£¬ºóÐøWorker
Node¼ÓÈëµ½¸ÃSwarm¼¯Èº£¬±ØÐëÒªÄܹ»·ÃÎʵ½ManagerµÄ¸ÃIPµØÖ·¡£¿ÉÒÔ¿´µ½£¬ÉÏÊöÃüÁîÖ´Ðнá¹û£¬ÈçÏÂËùʾ£º
Swarm initialized: current node (5pe2p4dlxku6z2a6jnvxc4ve6) is now a manager.
To add a worker to this swarm, run the following
command:
docker swarm join \
--token SWMTKN-1-4dm09nzp3xic15uebqja69o2552b75pcg7or0g9t2eld9ehqt3-1kb79trnv6fbydvl9vif3fsch
\
192.168.1.107:2377
To add a manager to this swarm, run 'docker swarm
join-token manager' and follow the instructions. |
¸Ã½á¹ûÖиø³öÁ˺óÐø²Ù×÷Òýµ¼ÐÅÏ¢£¬¸æËßÎÒÃÇÈçºÎ½«Ò»¸öWorker Node¼ÓÈëµ½Swarm¼¯ÈºÖС£Ò²¿ÉÒÔͨ¹ýÈçÏÂÃüÁÀ´»ñÈ¡¸ÃÌáʾÐÅÏ¢£º
docker swarm join-token worker |
ÔÚÈκÎʱºò£¬Èç¹ûÎÒÃÇÐèÒªÏòÒѾ´´½¨µÄSwarm¼¯ÈºÖÐÔö¼ÓWorker Node£¬Ö»ÒªÐÂÔöÒ»¸öÖ÷»ú£¨ÎïÀí»ú¡¢ÔÆÖ÷»úµÈ¶¼¿ÉÒÔ£©£¬²¢ÔÚÆäÉϰ²×°ºÃDocker
Engine²¢Æô¶¯£¬È»ºóÖ´ÐÐÉÏÊödocker swarm joinÃüÁ¾Í¿ÉÒÔ¼ÓÈëµ½Swarm¼¯ÈºÖС£
Õâʱ£¬ÎÒÃÇÒ²¿ÉÒԲ鿴µ±Ç°Manager NodeµÄ»ù±¾ÐÅÏ¢£¬Ö´ÐÐdocker infoÃüÁÊä³öÐÅÏ¢ÖпÉÒÔ¿´µ½£¬°üº¬ÈçϹØÓÚSwarmµÄ״̬ÐÅÏ¢£º
Swarm: active NodeID: qc42f6myqfpoevfkrzmx08n0r Is Manager: true ClusterID: qi4i0vh7lgb60qxy3mdygb27f Managers: 1 Nodes: 1 |
¿ÉÒÔ¿´³ö£¬Ä¿Ç°Swarm¼¯ÈºÖ»ÓÐManagerÒ»¸öNode£¬¶øÇÒ״̬ÊÇactive¡£Ò²¿ÉÒÔÔÚManager
NodeÉÏÖ´ÐÐdocker node lsÃüÁî²é¿´Node״̬£¬ÈçÏÂËùʾ£º
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS qc42f6myqfpoevfkrzmx08n0r * manager Ready Active Leader |
½ÓÏÂÀ´£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÉÏÃæÌáʾÐÅÏ¢£¬ÎÒÃÇ·Ö±ðÔÚworker1¡¢worker2Á½¸öWorker Node ÉÏ£¬Ö´ÐÐÃüÁWorker
Node¼ÓÈëµ½Swarm¼¯ÈºÖУ¬ÃüÁîÈçÏÂËùʾ£º
docker swarm join \ --token SWMTKN-1-4dm09nzp3xic15uebqja69o2552b75pcg7or0g9t2eld9ehqt3-1kb79trnv6fbydvl9vif3fsch \ 192.168.1.107:2377 |
Èç¹û³É¹¦£¬¿ÉÒÔ¿´µ½³É¹¦¼ÓÈëSwarm¼¯ÈºµÄÐÅÏ¢¡£Õâʱ£¬Ò²¿ÉÒÔÔÚManager NodeÉÏ£¬²é¿´Swarm¼¯ÈºµÄÐÅÏ¢£¬Ê¾ÀýÈçÏÂËùʾ£º
Swarm: active NodeID: qc42f6myqfpoevfkrzmx08n0r Is Manager: true ClusterID: qi4i0vh7lgb60qxy3mdygb27f Managers: 1 Nodes: 3 |
ÏëÒª²é¿´Swarm¼¯ÈºÖÐÈ«²¿NodeµÄÏêϸ״̬ÐÅÏ¢£¬¿ÉÒÔÖ´ÐÐÈçÏÂËùʾÃüÁ
Swarm¼¯ÈºNodeµÄ״̬ÐÅÏ¢£¬ÈçÏÂËùʾ£º
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS oibbiiwrgwjkw0ni38ydrfsre worker1 Ready Active oocli2uzdt2hy6o50g5z6j7dq worker2 Ready Active qc42f6myqfpoevfkrzmx08n0r * manager Ready Active Leader |
ÉÏÃæÐÅÏ¢ÖУ¬AVAILABILITY±íʾSwarm SchedulerÊÇ·ñ¿ÉÒÔÏò¼¯ÈºÖеÄij¸öNodeÖ¸ÅÉTask£¬¶ÔÓ¦ÓÐÈçÏÂÈýÖÖ״̬£º
Active£º¼¯ÈºÖиÃNode¿ÉÒÔ±»Ö¸ÅÉTask
Pause£º¼¯ÈºÖиÃNode²»¿ÉÒÔ±»Ö¸ÅÉеÄTask£¬µ«ÊÇÆäËûÒѾ´æÔÚµÄTask±£³ÖÔËÐÐ
Drain£º¼¯ÈºÖиÃNode²»¿ÉÒÔ±»Ö¸ÅÉеÄTask£¬Swarm SchedulerÍ£µôÒѾ´æÔÚµÄTask£¬²¢½«ËüÃǵ÷¶Èµ½¿ÉÓõÄNodeÉÏ
²é¿´Ä³Ò»¸öNodeµÄ״̬ÐÅÏ¢£¬¿ÉÒÔÔÚ¸ÃNodeÉÏÖ´ÐÐÈçÏÂÃüÁ
ÎÒÃÇÔÚManager NodeÉÏÖ´ÐÐÉÏÊöÃüÁ²é¿´µÄ״̬ÐÅÏ¢ÈçÏÂËùʾ£º
[ { "ID": "qc42f6myqfpoevfkrzmx08n0r", "Version": { "Index": 9 }, "CreatedAt": "2017-03-12T15:25:51.725341879Z", "UpdatedAt": "2017-03-12T15:25:51.84308356Z", "Spec": { "Role": "manager", "Availability": "active" }, "Description": { "Hostname": "manager", "Platform": { "Architecture": "x86_64", "OS": "linux" }, "Resources": { "NanoCPUs": 1000000000, "MemoryBytes": 1912082432 }, "Engine": { "EngineVersion": "17.03.0-ce", "Plugins": [ { "Type": "Network", "Name": "bridge" }, { "Type": "Network", "Name": "host" }, { "Type": "Network", "Name": "macvlan" }, { "Type": "Network", "Name": "null" }, { "Type": "Network", "Name": "overlay" }, { "Type": "Volume", "Name": "local" } ] } }, "Status": { "State": "ready", "Addr": "127.0.0.1" }, "ManagerStatus": { "Leader": true, "Reachability": "reachable", "Addr": "192.168.1.107:2377" } } ] |
¹ÜÀíSwarm Node
SwarmÖ§³ÖÉèÖÃÒ»×éManager Node£¬Í¨¹ýÖ§³Ö¶àManager NodeʵÏÖHA¡£ÄÇôÕâЩManager
NodeÖ®¼äµÄ״̬µÄÒ»ÖÂÐԾͷdz£ÖØÒªÁË£¬¶àManager NodeµÄWarm¼¯Èº¼Ü¹¹£¬ÈçÏÂͼËùʾ£¨³ö×ÔDocker¹ÙÍø£©£º

ͨ¹ýÉÏͼ¿ÉÒÔ¿´µ½£¬SwarmʹÓÃÁËRaftÐÒéÀ´±£Ö¤¶à¸öManagerÖ®¼ä״̬µÄÒ»ÖÂÐÔ¡£»ùÓÚRaftÐÒ飬Manager
Node¾ßÓÐÒ»¶¨µÄÈÝ´í¹¦ÄÜ£¬¼ÙÉèSwarm¼¯ÈºÖÐÓиöN¸öManager Node£¬ÄÇôÕû¸ö¼¯Èº¿ÉÒÔÈÝÈÌ×î¶àÓÐ(N-1)/2¸ö½ÚµãʧЧ¡£Èç¹ûÊÇÒ»¸öÈýManager
NodeµÄSwarm¼¯Èº£¬Ôò×î¶àÖ»ÄÜÈÝÈÌÒ»¸öManager Node¹Òµô¡£
ÏÂÃæ£¬ÎÒÃǰ´ÕÕ¶ÔNodeµÄ²»Í¬²Ù×÷£¬Í¨¹ýÃüÁîµÄ·½Ê½À´Ïêϸ˵Ã÷£º
£¨1£©Node״̬±ä¸ü¹ÜÀí
Ç°ÃæÎÒÃÇÒѾÌáµ½¹ý£¬NodeµÄAVAILABILITYÓÐÈýÖÖ״̬£ºActive¡¢Pause¡¢Drain£¬¶Ôij¸öNode½øÐбä¸ü£¬¿ÉÒÔ½«ÆäAVAILABILITYֵͨ¹ýDocker
CLIÐÞ¸ÄΪ¶ÔÓ¦µÄ״̬¼´¿É£¬ÏÂÃæÊdz£¼ûµÄ±ä¸ü²Ù×÷£º
ÉèÖÃManager NodeÖ»¾ßÓйÜÀí¹¦ÄÜ
¶Ô·þÎñ½øÐÐÍ£»úά»¤£¬¿ÉÒÔÐÞ¸ÄAVAILABILITYΪDrain״̬
ÔÝÍ£Ò»¸öNode£¬È»ºó¸ÃNode¾Í²»ÔÙ½ÓÊÕеÄTask
»Ö¸´Ò»¸ö²»¿ÉÓûòÕßÔÝÍ£µÄNode
ÀýÈ磬½«Manager NodeµÄAVAILABILITYÖµÐÞ¸ÄΪDrain״̬£¬Ê¹ÆäÖ»¾ß±¸¹ÜÀí¹¦ÄÜ£¬Ö´ÐÐÈçÏÂÃüÁ
docker node update --availability drain manager |
ÕâÑù£¬Manager Node²»Äܱ»Ö¸ÅÉTask£¬Ò²¾ÍÊDz»Äܲ¿Êðʵ¼ÊµÄDockerÈÝÆ÷À´ÔËÐзþÎñ£¬¶øÖ»ÊÇ×÷Ϊ¹ÜÀíNodeµÄ½ÇÉ«¡£
£¨2£©¸øNodeÌí¼Ó±êǩԪÊý¾Ý
ÿ¸öNodeµÄÖ÷»úÅäÖÃÇé¿ö¿ÉÄܲ»Í¬£¬±ÈÈçÓеÄÊʺÏÔËÐÐCPUÃܼ¯ÐÍÓ¦Óã¬ÓеÄÊʺÏÔËÐÐIOÃܼ¯ÐÍÓ¦Óã¬SwarmÖ§³Ö¸øÃ¿¸öNodeÌí¼Ó±êǩԪÊý¾Ý£¬ÕâÑù¿ÉÒÔ¸ù¾ÝNodeµÄ±êÇ©£¬À´Ñ¡ÔñÐԵص÷¶Èij¸ö·þÎñ²¿Êðµ½ÆÚÍûµÄÒ»×éNodeÉÏ¡£
¸øSWarm¼¯ÈºÖеÄij¸öWorker NodeÌí¼Ó±êÇ©£¬Ö´ÐÐÈçÏÂÃüÁî¸ñʽÈçÏ£º
docker node update --label-add ¼üÃû³Æ=Öµ |
ÀýÈ磬worker1Ö÷»úÔÚÃû³ÆÎªbjidcÕâ¸öÊý¾ÝÖÐÐÄ£¬Ö´ÐÐÈçÏÂÃüÁîÌí¼Ó±êÇ©£º
docker node update --label-add datacenter=bjidc |
£¨3£©NodeÌáȨ/½µÈ¨
¸Ä±äNodeµÄ½ÇÉ«£¬Worker Node¿ÉÒÔ±äΪManager Node£¬ÕâÑùʵ¼ÊWorker NodeÓй¤×÷Node±ä³ÉÁ˹ÜÀíNode£¬¶ÔÓ¦ÌáȨ²Ù×÷£¬ÀýÈ罫worker1ºÍworker2¶¼Éý¼¶ÎªManager
Node£¬Ö´ÐÐÈçÏÂÃüÁ
docker node promote worker1 worker2 |
¶ÔÉÏÃæÒÑÌáȨµÄworker1ºÍworker2Ö´ÐнµÈ¨£¬ÐèÒªÖ´ÐÐÈçÏÂÃüÁ
docker node demote worker1 worker2 |
£¨4£©Í˳öSwarm¼¯Èº
Èç¹ûManagerÏëÒªÍ˳öSwarm¼¯Èº£¬ ÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁ
¾Í¿ÉÒÔÍ˳ö¼¯Èº£¬Èç¹û¼¯ÈºÖл¹´æÔÚÆäËüµÄWorker Node£¬»¹Ï£ÍûManagerÍ˳ö¼¯Èº£¬Ôò¼ÓÉÏÒ»¸öÇ¿ÖÆÑ¡ÏÃüÁîÐÐÈçÏÂËùʾ£º
docker swarm node leave --force |
ͬÑù£¬Èç¹ûWorkerÏëÒªÍ˳öSwarm¼¯Èº£¬ÔÚWorker NodeÉÏ£¬Ö´ÐÐÈçÏÂÃüÁ
¼´Ê¹ManagerÒѾÍ˳öSWarm¼¯Èº£¬Ö´ÐÐÉÏÊöÃüÁîÒ²¿ÉÒÔʹµÃWorker NodeÍ˳ö¼¯Èº£¬È»ºóÓÖ¿ÉÒÔ¼ÓÈëµ½ÆäËüн¨µÄSwarm¼¯ÈºÖС£
¹ÜÀí·þÎñ
ÔÚSwarm¼¯ÈºÉϲ¿Êð·þÎñ£¬±ØÐëÔÚManager NodeÉϽøÐвÙ×÷¡£ÏÈ˵Ã÷Ò»ÏÂService¡¢Task¡¢Container£¨ÈÝÆ÷£©Õâ¸öÈý¸ö¸ÅÄîµÄ¹ØÏµ£¬ÈçÏÂͼ£¨³ö×ÔDocker¹ÙÍø£©·Ç³£ÇåÎúµØÃèÊöÁËÕâ¸öÈý¸ö¸ÅÄîµÄº¬Ò壺

ÔÚSwarm modeÏÂʹÓÃDocker£¬¿ÉÒÔʵÏÖ²¿ÊðÔËÐзþÎñ¡¢·þÎñÀ©ÈÝËõÈÝ¡¢É¾³ý·þÎñ¡¢¹ö¶¯Éý¼¶µÈ¹¦ÄÜ£¬ÏÂÃæÎÒÃÇÏêϸ˵Ã÷¡£
£¨1£©´´½¨·þÎñ
´´½¨Docker·þÎñ£¬¿ÉÒÔʹÓÃdocker service createÃüÁîʵÏÖ£¬ÀýÈ磬ÎÒÃÇÒª´´½¨ÈçÏÂÁ½¸ö·þÎñ£¬Ö´ÐÐÈçÏÂÃüÁ
docker service create --replicas 1 --name myapp alpine ping shiyanjun.cn docker service create --replicas 2 --name myredis redis |
µÚÒ»¸öÃüÁîÐУ¬´ÓDocker¾µÏñalpine´´½¨ÁËÒ»¸öÃû³ÆÎªmyappµÄ·þÎñ£¬ÆäÖÐÖ¸¶¨·þÎñ¸±±¾ÊýΪ1£¬Ò²¾ÍÊÇÆô¶¯Ò»¸öDockerÈÝÆ÷À´ÔËÐи÷þÎñ¡£µÚ¶þ¸öÃüÁîÐУ¬
´´½¨Ò»¸öRedis·þÎñ£¬·þÎñ¸±±¾ÊýΪ2£¬ÄÇô»áÆô¶¯Á½¸öDockerÈÝÆ÷À´ÔËÐÐmyredis·þÎñ¡£²é¿´µ±Ç°£¬ÒѾ²¿ÊðÆô¶¯µÄÈ«²¿Ó¦Ó÷þÎñ£¬Ö´ÐÐÈçÏÂÃüÁ
Ö´Ðнá¹û£¬ÈçÏÂËùʾ£º
ID NAME MODE REPLICAS IMAGE kilpacb9uy4q myapp replicated 1/1 alpine:latest vf1kcgtd5byc myredis replicated 2/2 redis |
Ò²¿ÉÒÔ²éѯָ¶¨·þÎñµÄÏêϸÐÅÏ¢£¬Ö´ÐÐÈçÏÂÃüÁ
docker service ps myredis |
²é¿´½á¹ûÐÅÏ¢£¬ÈçÏÂËùʾ£º
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 0p3r9zm2uxpl myredis.1 redis manager Running Running 48 seconds ago ty3undmoielo myredis.2 redis worker1 Running Running 44 seconds ago |
ÉÏÃæÐÅÏ¢ÖУ¬ÔÚmanagerºÍworker1ÕâÁ½¸öNodeÉϲ¿ÊðÁËmyredisÕâ¸öÓ¦Ó÷þÎñ£¬Ò²°üº¬ÁËËüÃǶÔÓ¦µÄµ±Ç°×´Ì¬ÐÅÏ¢¡£´Ëʱ£¬Ò²¿ÉÒÔͨ¹ýÖ´ÐÐdocker
psÃüÁÔÚManager NodeÉϲ鿴µ±Ç°Æô¶¯µÄDockerÈÝÆ÷£º
ÔÚWorker1Éϲ鿴µ±Ç°Æô¶¯µÄDockerÈÝÆ÷£¬Ò²¾ÍÊÇÎÒÃǵÄÁíÒ»¸ömyredisʵÀýÔÚ¸ÃNodeÉÏ£º
´´½¨·þÎñʱ£¬ÎÒÃÇ¿ÉÒÔ¶ÔÔËÐÐʱ·þÎñÈÝÆ÷½øÐÐÅäÖã¬ÀýÈçÈçÏÂÃüÁ
docker service create --name helloworld \ --env MYVAR=myvalue \ --workdir /tmp \ --user my_user \ alpine ping docker.com |
ÉÏÃæ£¬Í¨¹ý --env Ñ¡ÏîÀ´ÉèÖû·¾³±äÁ¿£¬Í¨¹ý --workdir Ñ¡ÏîÀ´ÉèÖù¤×÷Ŀ¼£¬Í¨¹ý --user
Ñ¡ÏîÀ´ÉèÖÃÓû§ÐÅÏ¢¡£
£¨2£©À©ÈÝËõÈÝ·þÎñ
Docker SwarmÖ§³Ö·þÎñµÄÀ©ÈÝËõÈÝ£¬Swarmͨ¹ý --mode Ñ¡ÏîÉèÖ÷þÎñÀàÐÍ£¬ÌṩÁËÁ½ÖÖģʽ£ºÒ»ÖÖÊÇreplicated£¬ÎÒÃÇ¿ÉÒÔÖ¸¶¨·þÎñTaskµÄ¸öÊý£¨Ò²¾ÍÊÇÐèÒª´´½¨¼¸¸öÈßÓั±¾£©£¬ÕâÒ²ÊÇSwarmĬÈÏʹÓõķþÎñÀàÐÍ£»ÁíÒ»ÖÖÊÇglobal£¬ÕâÑù»áÔÚSwarm¼¯ÈºµÄÿ¸öNodeÉ϶¼´´½¨Ò»¸ö·þÎñ¡£ÈçÏÂͼËùʾ£¨³ö×ÔDocker¹ÙÍø£©£¬ÊÇÒ»¸ö°üº¬replicatedºÍglobalģʽµÄSwarm¼¯Èº£º

ÉÏͼÖУ¬»ÆÉ«±íʾµÄreplicatedģʽϵÄService Replicas£¬»ÒÉ«±íʾglobalģʽÏÂServiceµÄ·Ö²¼¡£
·þÎñÀ©ÈÝËõÈÝ£¬ÔÚManager NodeÉÏÖ´ÐÐÃüÁîµÄ¸ñʽ£¬ÈçÏÂËùʾ£º
docker service scale ·þÎñID=·þÎñTask×ÜÊý |
ÀýÈ磬½«Ç°ÃæÎÒÃDz¿ÊðµÄ2¸ö¸±±¾µÄmyredis·þÎñ£¬À©Èݵ½3¸ö¸±±¾£¬Ö´ÐÐÈçÏÂÃüÁ
docker service scale myredis=3 |
ͨ¹ýÃüÁîdocker service ls ²é¿´£¬À©ÈݲÙ×÷½á¹ûÈçÏÂËùʾ£º
ID NAME MODE REPLICAS IMAGE kilpacb9uy4q myapp replicated 1/1 alpine:latest vf1kcgtd5byc myredis replicated 3/3 redis |
½øÒ»²½Í¨¹ýdocker service ps myredis²é¿´Ò»ÏÂmyredisµÄ¸÷¸ö¸±±¾µÄ״̬ÐÅÏ¢£¬ÈçÏÂËùʾ£º
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 0p3r9zm2uxpl myredis.1 redis manager Running Running 14 minutes ago ty3undmoielo myredis.2 redis worker1 Running Running 14 minutes ago zxsvynsgqmpk myredis.3 redis worker2 Running Running less than a second ago |
¿ÉÒÔ¿´µ½£¬ÎÒÃÇĿǰ3¸öNodeµÄSwarm¼¯Èº£¬Ã¿¸öNodeÉ϶¼ÓÐÒ»¸ömyredisÓ¦Ó÷þÎñµÄ¸±±¾£¬¿É¼ûҲʵÏÖÁ˺ܺõĸºÔؾùºâ¡£
ËõÈÝ·þÎñ£¬Ö»ÐèÒª½«¸±±¾ÊýСÓÚµ±Ç°Ó¦Ó÷þÎñÓµÓеĸ±±¾Êý¼´¿ÉʵÏÖ£¬´óÓÚÖ¸¶¨ËõÈݸ±±¾ÊýµÄ¸±±¾»á±»É¾³ý¡£
£¨3£©É¾³ý·þÎñ
ɾ³ý·þÎñ£¬Ö»ÐèÒªÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁî¼´¿É£º
ÀýÈ磬ɾ³ýmyredisÓ¦Ó÷þÎñ£¬Ö´ÐÐdocker service rm myredis£¬ÔòÓ¦Ó÷þÎñmyredisµÄÈ«²¿¸±±¾¶¼»á±»É¾³ý¡£
£¨4£©¹ö¶¯¸üÐÂ
·þÎñµÄ¹ö¶¯¸üУ¬ÕâÀïÎҲο¼¹ÙÍøÎĵµµÄÀý×Ó˵Ã÷¡£ÔÚManager NodeÉÏÖ´ÐÐÈçÏÂÃüÁ
docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ redis:3.0.6 |
ÉÏÃæÍ¨¹ýÖ¸¶¨ --update-delay Ñ¡Ï±íʾÐèÒª½øÐиüеķþÎñ£¬Ã¿´Î³É¹¦²¿ÊðÒ»¸ö£¬ÑÓ³Ù10ÃëÖÓ£¬È»ºóÔÙ¸üÐÂÏÂÒ»¸ö·þÎñ¡£Èç¹ûij¸ö·þÎñ¸üÐÂʧ°Ü£¬ÔòSwarmµÄµ÷¶ÈÆ÷¾Í»áÔÝÍ£±¾´Î·þÎñµÄ²¿Êð¸üС£
ÁíÍ⣬Ҳ¿ÉÒÔ¸üÐÂÒѾ²¿ÊðµÄ·þÎñËùÔÚÈÝÆ÷ÖÐʹÓõÄImageµÄ°æ±¾£¬ÀýÈçÖ´ÐÐÈçÏÂÃüÁ
docker service update --image redis:3.0.7 redis |
½«Redis·þÎñ¶ÔÓ¦µÄImage°æ±¾ÓÐ3.0.6¸üÐÂΪ3.0.7£¬Í¬Ñù£¬Èç¹û¸üÐÂʧ°Ü£¬ÔòÔÝÍ£±¾´Î¸üС£
£¨5£©Ìí¼ÓOverlayÍøÂç
ÔÚSwarm¼¯ÈºÖпÉÒÔʹÓÃOverlayÍøÂçÀ´Á¬½Óµ½Ò»¸ö»ò¶à¸ö·þÎñ¡£¾ßÌåÌí¼ÓOverlayÍøÂ磬Ê×ÏÈ£¬ÎÒÃÇÐèÒª´´½¨ÔÚManager
NodeÉÏ´´½¨Ò»¸öOverlayÍøÂ磬ִÐÐÈçÏÂÃüÁ
docker network create --driver overlay my-network |
´´½¨ÍêOverlayÍøÂçmy-networkÒÔºó£¬Swarm¼¯ÈºÖÐËùÓеÄManager Node¶¼¿ÉÒÔ·ÃÎʸÃÍøÂ硣Ȼºó£¬ÎÒÃÇÔÚ´´½¨·þÎñµÄʱºò£¬Ö»ÐèÒªÖ¸¶¨Ê¹ÓõÄÍøÂçΪÒÑ´æÔÚµÄOverlayÍøÂç¼´¿É£¬ÈçÏÂÃüÁîËùʾ£º
docker service create \ --replicas 3 \ --network my-network \ --name myweb \ nginx |
ÕâÑù£¬Èç¹ûSwarm¼¯ÈºÖÐÆäËûNodeÉϵÄDockerÈÝÆ÷ҲʹÓÃmy-networkÕâ¸öÍøÂ磬ÄÇô´¦ÓÚ¸ÃOverlayÍøÂçÖеÄËùÓÐÈÝÆ÷Ö®¼ä£¬Í¨¹ýÍøÂç¿ÉÒÔÁ¬Í¨¡£ |