2015Äê4Ô£¬´«ÎÅÐí¾ÃµÄBorgÂÛÎÄ×ÜËã³öÏÖÔÚÁËGoogle ResearchµÄÒ³ÃæÉÏ¡£ËäÈ»´«ÑÔBorg×÷ΪG¼ÒµÄ¡°ÀÏ¡±ÏîĿһֱÊDz۵ãÂúÂú£¬¶øÇÒ±¾ÉíµÄÖªÃû¶ÈºÍÓ°ÏìÁ¦Ò²Ó¦¸Ã±È²»Éϵ±ÄêµÄ¡°Èý´óÂÛÎÄ¡±£¬µ«ÊÇͬºÜ¶àºÃÆæµÄС»ï°éÒ»Ñù£¬±ÊÕß»¹ÊÇÈÄÓÐÐËȤµØ°ÑÕâÆª¡°·ÇµäÐÍ¡±ÂÛÎİݶÁÁËÒ»·¬¡£
×¢£º±¾ÎÄ×÷ÕßÕÅÀÚ½«ÔÚ8ÔÂ28ÈÕ~29ÈÕµÄCNUTÈ«ÇòÈÝÆ÷¼¼Êõ·å»áÉÏ·ÖÏíÌâΪ¡¶´Ó0µ½1£ºKubernetesʵս¡·µÄÑݽ²£¬Ñݽ²ÖÐËû½«ÖصãÆÊÎöKubernetesµÄºËÐÄÔÀíºÍʵ¼ù¾Ñ飬²¢·ÖÏí´ó¹æÄ£ÈÝÆ÷¼¯Èº¹ÜÀíËùÃæÁÙµÄÎÊÌâºÍ½â¾ö˼·¡£
1. BorgÔÚ½²Ê²Ã´¹ÊÊÂ
Æäʵ£¬Èç¹ûÕâÆªÂÛÎÄ·¢±íÔÚÁ½ÈýÄêǰ£¬BorgµÄ¹Ø×¢¶È¿ÖÅÂÕæÃ»ÓнñÌìÕâô¸ß¡£×÷Ϊһƪ±¾ÖÊÉÏÊǹØÓÚÊý¾ÝÖÐÐÄÀûÓÃÂʵİ빤³Ì¡¢°ëÑо¿ÐԵijɹû£¬Õâ¸öÁìÓòµÄ¹Ø×¢ÈËȺÀ´×Ô´ó³§µÄÔËά²¿ÒÔ¼°ÏµÍ³²¿µÄ¼¼ÊõͬÁÅ¿ÉÄÜÒªÕ¼ºÜ´óµÄ±ÈÀý¡£¶ø¶ÔÓÚ¾ø´ó¶àÊýÑо¿ÈËÔ±£¬ÆÕͨ¿ª·¢Õߣ¬ÉõÖÁ°üÀ¨Æ½Ì¨¿ª·¢Õß¶øÑÔ£¬BorgÂÛÎı¾ÉíµÄÎüÒýÁ¦Ó¦¸Ã˵¶¼ÊDZȽÏÓÐÏ޵ġ£
²»¹ý£¬Ò»µ©ÎÒÃǰÑBorg·Åµ½µ±Ç°Õâ¸öʱ¼äµãÉÏÀ´ÖØÐÂÉóÊÓ£¬ÕâÆª±¾¸ÃƽµµÄÂÛÎľÍÓµÓÐÁËÖÚ¶àÉî²ãÒâÒå¡£µ±È»£¬ÕâÒ»Çоø·ÇżȻ£¬´Ó2013ÄêÄ©ÒÔDockerΪ´ú±íµÄÈÝÆ÷¼¼ÊõµÄѸËÙÐËÆð£¬2014ÄêGoogleÈÝÆ÷¹ÜÀíÆ½Ì¨KubernetesºÍContainer
EngineµÄÇ¿ÊÆÀ©ÕÅ£¬ÔÙµ½Èç½ñÓÉMesosÒ»ÊÖ´òÔìµÄDCOS£¨Êý¾ÝÖÐÐIJÙ×÷ϵͳ£©¸ÅÄîµÄÖËÊÖ¿ÉÈÈ¡£ÈÝÆ÷¼¼ÊõÁîÈËÕ¦ÉàµÄ½ø»¯ËٶȺܿì¾Í½«Ò»¸öÔø¾²¢²»ÐèÒª±»´ó¶àÊý¿ª·¢ÈËÔ±¹Ø×¢µÄÎÊÌâ°Úµ½ÁËÌ¨Ãæ£º
ÎÒÃÇÓ¦¸ÃÈçºÎ¸ßЧµØ³éÏóºÍ¹ÜÀíÒ»¸öÆÄ¾ß¹æÄ£µÄ·þÎñ¼¯Èº£¿
Õ⣬ÕýÊÇBorgÈ«Á¦²ûÊöµÄºËÐÄÎÊÌâ¡£
˵µÃ¸üÈ·ÇÐÒ»µã£¬µ±ÎÒÃÇÖð²½½ÓÄÉÁËÒÔÈÝÆ÷Ϊµ¥Î»²¿ÊðºÍÔËÐÐÓ¦ÓÃÖ®ºó£¬ÔËάÈËÔ±ÖÕÓÚ¿ÉÒÔ´ÓÎÞÐÝÖ¹µÄ°ü¹ÜÀí£¬ÄªÃûÆäÃîµÄ»·¾³²îÒ죬·±ÔÓÖØ¸´µÄÅú´¦ÀíºÍÈÎÎñ×÷ÒµµÄÖÐÉÔ΢»Ø¹ýÒ»µãÉñÀ´£¬¿ªÊ¼ÖØÐÂÉóÊÓ×Ô¼ºÊÖÖеÄÎïÀí×ÊÔ´µÄ×éÖ¯ºÍµ÷¶È·½Ê½£º¼´ÎÒÃÇÄܲ»Äܽ«ÈÝÆ÷¿´×÷´«Í³²Ù×÷ϵͳµÄ½ø³Ì£¬°ÑËùÓеķþÎñÆ÷¼¯Èº³éÏó³ÉΪͳһµÄCPU¡¢ÄÚ´æ¡¢´ÅÅ̺ÍÍøÂç×ÊÔ´£¬È»ºó°´Ðè·ÖÅ䏸ÈÎÎñʹÓÃÄØ£¿
ËùÒÔ£¬×÷Ϊ¡¶Docker±³ºóµÄ¼¼Êõ½âÎö¡·ÏµÁÐÎÄÕµÄÌØ±ðƪ£¬±ÊÕß½«ºÍ¶ÁÕßÒ»Æð´ÓBorg³ö·¢£¬½áºÏËüµÄͬԴÏîÄ¿KubernetesÖг¢ÊÔ̽Ë÷Ò»ÏÂÕâ¸öÎÊÌâµÄ´ð°¸¡£
2. BorgµÄºËÐĸÅÄî
ͬ´ó¶àÊýPaaS¡¢ÔÆÆ½Ì¨ÀàÏîÄ¿Ðû³ÆµÄ¿ÚºÅÒ»Ñù£¬Borg×î»ù±¾µÄ³ö·¢µã»¹ÊÇ¡°Ï£ÍûÄÜÈÿª·¢Õß×î´ó¿ÉÄܵذѾ«Á¦¼¯ÖÐÔÚÒµÎñ¿ª·¢ÉÏ¡±£¬¶ø²»ÐèÒª¹ØÐÄÕâЩ´úÂëÖÆÆ·µÄ²¿Êðϸ½Ú¡£²»¹ý£¬ÁíÒ»·½Ã棬Borg·Ç³£Ç¿µ÷ÈçºÎ¶ÔÒ»¸ö´ó¹æÄ£µÄ·þÎñÆ÷¼¯Èº×ö³ö¸üºÏÀíµÄ³éÏó£¬Ê¹µÃ¿ª·¢Õß¿ÉÒÔÏñ¶Ô´ýһ̨PCÒ»Ñù·½±ãµØ¹ÜÀí×Ô¼ºµÄËùÓÐÈÎÎñ¡£ÕâÓëMesosÏÖÔÚÖ÷ÍÆµÄ¹ÛµãÊÇÒ»Öµģ¬Í¬Ê±Ò²ÊÇBorgͬPaaSÀàÏîÄ¿±ÈÈçFlynn¡¢Deis¡¢Cloud
FoundryµÈÇø±ð¿ªÀ´µÄÒ»¸öÖ÷ÒªÌØÕ÷£º¼´Borg£¬ÒÔ¼°KubernetesºÍMesosµÈ£¬¶¼²»ÊÇÒ»¸öÃæÏòÓ¦ÓõIJúÎï¡£
ʲô½ÐÃæÏòÓ¦Óã¿
¾ÍÊÇÒÔÓ¦ÓÃΪÖÐÐÄ¡£ÏµÍ³ÔÉúΪÓû§Ìá½»µÄÖÆÆ·ÌṩһϵÁеÄÉÏ´«¡¢¹¹½¨¡¢´ò°ü¡¢ÔËÐС¢°ó¶¨·ÃÎÊÓòÃûµÈ½Ó¹ÜÔËά¹ý³ÌµÄ¹¦ÄÜ¡£ÕâÀàϵͳһ°ã»áÇø·Ö¡±Ó¦Ó᰺͡±·þÎñ¡°£¬²¢ÇÒÒÔÆ½Ì¨×Ô¼º¶¨ÒåµÄ·½Ê½Îª¡±Ó¦Óá°£¨±ÈÈçJava³ÌÐò£©Ìṩ¾ßÌåµÄ¡±·þÎñ¡°£¨±ÈÈçMySQL·þÎñ£©¡£ÃæÏòÓ¦ÓÃÊÇPaaSµÄÒ»¸öºÜÖØÒªµÄÌØµã¡£
ÁíÒ»·½Ã棬BorgÇ¿µ÷µÄÊǹæÄ£¶þ×Ö¡£ÎÄÕÂͨƪ¶à´ÎÇ¿µ÷ÁËGoogleÄÚ²¿ÅÜÔÚBorgÉϵÄ×÷ÒµÊýÁ¿¡¢ÒÔ¼°±»BorgÍйܵĻúÆ÷ÊýÁ¿Ö®ÅÓ´ó¡£±ÈÈçÎÒÃÇ´«Í³ÈÏÖªÉϵġ°Éú²ú¼¶±ð¼¯Èº¡±ÔÚÎÄÕÂÖлù±¾ÉÏÊôÓÚTinyµÄ·¶³ë£¬¶øBorgËæ±ãÒ»¸öMediumµÄ¼ÆËãµ¥ÔªÄóöÀ´¶¼ÊÇÒ»¼ÒÖдóÐÍÆóÒµÊý¾ÝÖÐÐĵĹæÄ££¨10K¸ö»úÆ÷£©¡£ÕâÒ²Ó¦Ö¤ÁËÌÔ±¦±ÏÐþÀÏ´óÔø¾Ëµ¹ýµÄ£º¡°¹æÄ£¾ø¶ÔÊÇÍÆ¶¯¼¼Êõ·¢Õ¹µÄ×î¹Ø¼üÒòËØ¡±¡£
BorgÀï·þÎñÆ÷µÄ»®·ÖÈçÏ£º Site = Ò»×éÊý¾ÝÖÐÐÄ£¨Cluster£©£¬ Cluster = Ò»×鼯Ëãµ¥Ôª£¨Cell£©£¬
Cell = Ò»×é»úÆ÷¡£ ÆäÖмÆËãµ¥Ôª£¨Cell£©ÊÇ×î³£Óõļ¯ÈºÀà±ð¡£
2.1 Job£¬Task
¼ÈÈ»Borg²»¹ØÐÄ¡°Ó¦Óᱺ͡°·þÎñ¡±µÄÇø±ð£¬Ò²²»ÒÔÓ¦ÓÃΪÖÐÐÄ£¬ÄÇôËüÐèÒª½Ó¹ÜºÍÔËÐеÄ×÷ÒµÊÇʲô£¿
ÊÇJob¡£
BorgÎÄÕÂÀï¶ÔJobµÄ¶¨ÒåºÜ¼òµ¥£¬¾ÍÊǶà¸öÈÎÎñ£¨Task£©µÄ¼¯ºÏ£¬¶øËùνTask¾ÍÊÇÅÜÔÚLinuxÈÝÆ÷ÀïµÄÓ¦Óýø³ÌÁË¡£ÕâÑù¿´ÆðÀ´JobÊDz»ÊǾ͵ÈͬÓÚKubernetesÀïµÄPod£¨ÈÝÆ÷×飩Ĩ£¿
Æäʵ²»È»¡£JobÓ³Éäµ½KubernetesÖеϰ£¬ÆäʵµÈͬÓÚÓû§Ìá½»µÄ¡°Ó¦Óá±£¬ÖÁÓÚÕâ¸öÓ¦ÓÃÔËÐÐÁ˼¸¸ö¸±±¾Pod£¬Ã¿¸öPodÀïÓÖÔËÐÐ×ÅÄÄЩÈÝÆ÷£¬Óû§²¢²»ÐèÒª¹ØÐÄ¡£Óû§Ö»ÖªµÀ£¬ÎÒÃÇ·ÃÎÊÕâ¸ö·þÎñ£¬Ó¦¸Ã·µ»ØÄ³¸ö½á¹û£¬¾Í¹»ÁË¡£
¾Ù¸öÀý×Ó£¬ÒòΪ¸ß¿ÉÓõÈÔÒò£¬Óû§³£³£»áÔÚKubernetesÀï´´½¨²¢Æô¶¯Èô¸É¸öһģһÑùµÄPod£¨Õâ¸ö¹¦ÄÜÊÇͨ¹ýKubernetesµÄReplication
ControllerʵÏֵģ©¡£ÕâЩһģһÑùµÄPod¡°¸±±¾¡±µÄ¸÷ÏîÅäÖúÍÈÝÆ÷ÄÚÈݵȶ¼ÍêÈ«Ïàͬ£¬ËûÃdzéÏó³ÉÒ»¸öÂß¼ÉϵĸÅÄî¾ÍÊÇJob¡£
ÓÉÓÚJobÊÇÒ»¸öÂß¼ÉϵĸÅÄBorgʵ¼ÊÉϸºÔð¹ÜÀíºÍµ÷¶ÈµÄʵÌå¾ÍÊÇTask¡£Óû§µÄsubmit¡¢kill¡¢update²Ù×÷Äܹ»´¥·¢Task״̬»ú´ÓPendingµ½RunningÔÙµ½DeadµÄµÄ×ªÒÆ£¬ÕâÒ»µãÂÛÎÄÀïÓÐÏêϸµÄͼ½â¡£ÖµµÃÒ»ÌáµÄÊÇ£¬×÷Õß»¹Ç¿µ÷ÁËTaskÊÇͨ¹ýÏÈSIGTERM£¬Ò»¶¨Ê±¼äºóºóÔÙSIGKILLµÄ·½Ê½À´±»É±ËÀµÄ£¬ËùÒÔTaskÔÚ±»É±ËÀǰÓÐÒ»¶¨Ê±¼äÀ´½øÐС°ÇåÀí£¬±£´æ×´Ì¬£¬½áÊøÕýÔÚ´¦ÀíµÄÇëÇó²¢ÇҾܾøÐµÄÇëÇ󡱵Ť×÷¡£
2.2 Alloc
BorgÖУ¬ÕæÕýÓëPod¶ÔÓ¦µÄ¸ÅÄîÊÇAlloc¡£
AllocµÄÖ÷Òª¹¦ÄÜ£¬¾ÍÊÇÔÚһ̨»úÆ÷ÉÏ¡°»®¡±Ò»¿é×ÊÔ´³öÀ´£¬È»ºóÒ»×éTask¾Í¿ÉÒÔÔËÐÐÔÚÕⲿ·Ö×ÊÔ´ÉÏ¡£ÕâÑù£¬¡°³¬Ç×ÃÜ¡±¹ØÏµµÄTask¾Í¿ÉÒÔ±»·ÖÔÚͬһ¸öAllocÀ±ÈÈçÒ»¸ö¡°TomcatÓ¦ÓᱺÍËüµÄ¡°logstash·þÎñ¡±¡£
KubernetesÖÐPodµÄÉè¼ÆÓëAllocÈç³öÒ»ÕÞ£ºÊôÓÚͬһ¸öPodµÄDockerÈÝÆ÷¹²ÏíNetwork
NamepaceºÍvolume£¬ÕâЩÈÝÆ÷ʹÓÃlocalhostÀ´½øÐÐͨÐÅ£¬¿ÉÒÔ¹²ÏíÎļþ£¬ÈκÎʱºò¶¼»á±»µ±×÷Ò»¸öÕûÌåÀ´½øÐе÷¶È¡£
ËùÒÔ£¬AllocºÍPodµÄÉè¼ÆÆäʵ¶¼ÊÇÔÚ×ñÑ¡°Ò»¸öÈÝÆ÷Ò»¸ö½ø³Ì¡±µÄÄ£ÐÍ¡£¾³£ÓÐÈËÎÊ£¬ÎÒ¸ÃÈçºÎÔÚDockerÈÝÆ÷ÀïÅܶà¸ö½ø³Ì£¿Æäʵ£¬ÕâÖÖÐèÇó×îºÃÊÇͨ¹ýÀàËÆPodÕâÖÖ·½·¨À´½â¾ö£ºÃ¿¸ö½ø³Ì¶¼ÅÜÔÚÒ»¸öµ¥¶ÀµÄÈÝÆ÷ÀȻºóÕâЩÈÝÆ÷ÓÖͬÊôÓÚÒ»¸öPod£¬¹²ÏíÍøÂçºÍÖ¸¶¨µÄvolume¡£ÕâÑù¼ÈÄÜÂú×ãÕâЩ½ø³ÌÖ®¼äµÄ½ôÃÜÐ×÷£¨±ÈÈçͨ¹ýlocalhost»¥Ïà·ÃÎÊ£¬Ö±½Ó½øÐÐÎļþ½»»»£©£¬ÓÖÄܱ£Ö¤Ã¿¸ö½ø³Ì²»»á¼·Õ¼ÆäËû½ø³ÌµÄ×ÊÔ´£¬ËüÃÇ»¹ÄÜ×÷Ϊһ¸öÕûÌå½øÐйÜÀíºÍµ÷¶È¡£Èç¹ûûÓÐKubernetesµÄ»°£¬Pod¿ÉÒÔʹÓá°Docker
in Docker¡±µÄ°ì·¨À´Ä£Ä⣬¼´Ê¹ÓÃÒ»¸öDockerÈÝÆ÷×÷ΪPod£¬ÕæÕýÐèÒªÔËÐеĽø³Ì×÷ΪDockerÈÝÆ÷ǶÌ×ÔËÐÐÔÚÕâ¸öPodÈÝÆ÷ÖУ¬ÕâÑùËüÃÇÖ®¼ä»¥²»¸ÉÉæ£¬ÓÖÄÜ×÷ΪÕûÌå½øµ÷¶È¡£
ÁíÍ⣬Kubernetesʵ¼ÊÉÏûÓÐJobÕâ¸ö˵·¨£¬¶øÊÇÖ±½ÓÒÔPodºÍTaskÀ´³éÏóÓû§µÄÈÎÎñ£¬È»ºóʹÓÃÏàͬµÄLabelÀ´±ê¼ÇͬÖʵÄPod¸±±¾¡£ÕâºÜ´ó³Ì¶ÈÊÇÒòΪÔÚBorgÖÐJob
Task AllocµÄ×ö·¨À»á³öÏÖ¡°½»²æ¡±µÄÇé¿ö£¬±ÈÈçÊôÓÚ²»Í¬JobµÄTask¿ÉÄÜ»áÒòΪ¡°³¬Ç×ÃÜ¡±¹ØÏµ±»»®·Öµ½Í¬Ò»¸öAllocÖУ¬¾¡¹Ü´ËʱJobÖ»ÊǸöÂß¼¸ÅÄÕ⻹ÊÇ»á¸øÏµÍ³µÄ¹ÜÀí´øÀ´ºÜ¶à²»·½±ã¡£
2.3 JobµÄ·ÖÀà
BorgÖеÄJob°´ÕÕÆäÔËÐÐÌØÐÔ»®·ÖΪÁ½ÀࣺLRS£¨Long Running Service£©ºÍbatch
jobs¡£
ÉÏÊöÁ½ÖÖ»®·ÖÔÚ´«Í³µÄPaaSÖÐÒ²ºÜ³£¼û¡£LRSÀà·þÎñ¾ÍÏñÒ»¸ö¡°ËÀÑ»·¡±£¬±ÈÈçÒ»¸öWeb·þÎñ¡£ËüÍùÍùÐèÒª·þÎñÓÚÓû§»òÕ߯äËü×é¼þ£¬¹Ê¶ÔÑÓʱÃô¸Ð¡£µ±È»ÂÛÎÄÀïGoogle¾ÙµÄLRSÀý×Ó¾ÍÒª¸ß´óÉϲ»ÉÙ£¬±ÈÈçGmail¡¢Google
Docs¡£
¶øbatch jobsÀàÈÎÎñ×îµäÐ͵ľÍÊÇMap-ReduceµÄjob£¬»òÕ߯äËüÀàËÆµÄ¼ÆËãÈÎÎñ¡£ËüÃǵÄÖ´ÐÐÍùÍùÐèÒª³ÖÐøÒ»¶Îʱ¼ä£¬µ«ÊÇ×îÖÕ¶¼»áÍ£Ö¹£¬Óû§ÐèÒªËѼ¯²¢»ã×ÜÕâЩjob¼ÆËãµÃµ½µÄ½á¹û»òÕßÊÇjob³ö´íµÄÔÒò¡£ËùÒÔBorgÔÚGoogleÄÚ²¿Æðµ½ÁËYARNºÍMesosµÄ½ÇÉ«£¬ºÜ¶àÏîĿͨ¹ýÔÚBorgÖ®ÉϹ¹½¨frameworkÀ´Ìá½»²¢Ö´ÐÐÈÎÎñ¡£BorgÀïÃæ»¹Ö¸³ö£¬batch
job¶Ô·þÎñÆ÷˲ʱµÄÐÔÄܲ¨¶¯ÊDz»Ãô¸ÐµÄ£¬ÒòΪËü²»»áÏñLRSÒ»ÑùÐèÒªÁ¢¿ÌÏìÓ¦Óû§µÄÇëÇó£¬ÕâÒ»µã¿ÉÒÔÀí½â¡£
±È½ÏÓÐÒâ˼µÄÊÇ£¬BorgÖдó¶àÊýLRS¶¼»á±»¸³Óè¸ßÓÅÏȼ¶²¢»®·ÖΪÉú²ú»·¾³¼¶±ðµÄÈÎÎñ£¨prod£©£¬¶øbatch
jobÔò»á±»¸³ÓèµÍÓÅÏȼ¶£¨non-prod£©¡£ÔÚʵ¼Ê»·¾³ÖУ¬prodÈÎÎñ»á±»·ÖÅäºÍÕ¼Óô󲿷ֵÄCPUºÍÄÚ´æ×ÊÔ´¡£ÕýÊÇÓÉÓÚÓÐÁËÕâÑùµÄ»®·Ö£¬BorgµÄ¡°×ÊÔ´ÇÀÕ¼¡±Ä£ÐͲŵÃÒÔʵÏÖ£¬¼´prodÈÎÎñ¿ÉÒÔÕ¼ÓÃnon-prodÈÎÎñµÄ×ÊÔ´£¬ÕâÒ»µãÎÒÃǺóÃæ»áרÃÅ˵Ã÷¡£
¶Ô±ÈKubernetes£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖÔÚLRSÉ϶¨ÒåÉÏÊÇÓëBorgÀàËÆµÄ£¬µ«ÊÇĿǰKubernetesÈ´²»ÄÜÖ§³Öbatch
job£ºÒòΪ¶ÔÓ¦µÄJob Controller»¹Ã»ÓÐʵÏÖ¡£ÕâÒâζ×ŵ±Ç°KubernetesÉÏÒ»¸öÈÝÆ÷ÖеÄÈÎÎñÖ´ÐÐÍê³ÉÍ˳öºó£¬»á±»Replication
ControllerÎÞÌõ¼þÖØÆô¡£KubernetesÉв»Äܰ´ÕÕÓû§µÄÐèÇóÈ¥ËѼ¯ºÍ»ã×ÜÕâЩÈÎÎñÖ´ÐеĽá¹û¡£
2.4 ÓÅÏȼ¶ºÍÅä¶î
Ç°ÃæÒѾÌáµ½ÁËBorgÈÎÎñÓÅÏȼ¶µÄ´æÔÚ£¬ÕâÀïÏêϸ½éÉÜÒ»ÏÂÓÅÏȼ¶µÄ»®·Ö¡£
BorgÖаÑÓÅÏȼ¶·ÖÀàΪ¼à¿Ø¼¶¡¢Éú²ú¼¶¡¢ÅúÈÎÎñ¼¶¡¢¾¡Á¦¼¶£¨Ò²½Ð²âÊÔ¼¶£©¡£ÆäÖÐ¼à¿Ø¼¶ºÍÉú²ú¼¶µÄÈÎÎñ¾ÍÊÇÇ°ÃæËù˵µÄprodÈÎÎñ¡£ÎªÁ˱ÜÃâÔÚÇÀÕ¼×ÊÔ´µÄ¹ý³ÌÖгöÏÖ¼¶ÁªµÄÇé¿ö´¥·¢Á¬Ëø·´Ó¦£¨AÇÀÕ¼B£¬BÇÀÕ¼C£¬CÔÙÇÀÕ¼D£©£¬Borg¹æ¶¨prodÈÎÎñ²»ÄÜ»¥ÏàÇÀÕ¼¡£
Èç¹û˵ÓÅÏȼ¶¾ö¶¨Á˵±Ç°¼¯ÈºÀïµÄÈÎÎñµÄÖØÒªÐÔ£¬Åä¶îÔò¾ö¶¨ÁËÈÎÎñÊÇ·ñ±»ÔÊÐíÔËÐÐÔÚÕâ¸ö¼¯ÈºÉÏ¡£
¾¡¹ÜÎÒÃǶ¼ÖªµÀ£¬¶ÔÓÚÈÝÆ÷À´Ëµ£¬CGroupÖеÄÅä¶îÖ»ÊÇÒ»¸öÏÞÖÆ¶ø²¢·ÇÕæÕý¸î¾ÝµÄ×ÊÔ´Á¿£¬µ«ÊÇÎÒÃDZØÐëΪ¼¯ÈºÉ趨һ¸ö±ê×¼À´±£Ö¤Ìá½»À´ÈÎÎñ²»»áÏò¼¯ÈºË÷Òª¹ý·Ö¶àµÄ×ÊÔ´¡£BorgÖÐÅä¶îµÄÃèÊö·½·¨ÊÇ£º¸ÃÓû§µÄÈÎÎñÔÚÒ»¶Îʱ¼äÄÚÔÚijһ¸ö¼ÆËãµ¥ÔªÉÏÔÊÐíÇëÇóµÄ×î´ó×ÊÔ´Á¿¡£ÐèÒªÔÙ´ÎÖØÉ꣬Åä¶îÒ»¶¨ÊÇÈÎÎñÌύʱ¾ÍÐèÒªÑéÖ¤µÄ£¬ËüÊÇÈÎÎñºÏ·¨ÐÔµÄÒ»²¿·Ö¡£
¼ÈÈ»ÊÇÅä¶î£¬¾Í´æÔÚ³¬ÂôµÄÇé¿ö¡£ÔÚBorgÖУ¬ÔÊÐí±»³¬ÂôµÄÊÇnon-prodµÄÈÎÎñ£¬¼´ËüÃÇÔÚij¸ö¼ÆËãµ¥ÔªÉÏÇëÇóµÄ×ÊÔ´¿ÉÄܳ¬³öÁËÔÊÐíµÄ¶î¶È£¬µ«ÊÇÔÚÔÊÐí³¬ÂôµÄÇé¿öÏÂËüÃÇÈÔÈ»ÓпÉÄܱ»ÏµÍ³½ÓÊÜ£¨ËäÈ»ºÜ¿ÉÄÜÓÉÓÚ×ÊÔ´²»×ã¶øÔÝʱ½øÈëPending״̬£©¡£¶øÓÅÏȼ¶×î¸ßµÄÈÎÎñÔò±»BorgÈÏΪÊÇÏíÓÐÎÞÏÞÅä¶îµÄ¡£
ÓëKubernetesÀàËÆµÄÊÇ£¬BorgµÄÅä¶îÒ²ÊǹÜÀíÔ±¾²Ì¬·ÖÅäµÄ¡£Kubernetesͨ¹ýÓû§¿Õ¼ä£¨namespace£©À´ÊµÏÖÁËÒ»¸ö¼òµ¥µÄ¶à×â»§Ä£ÐÍ£¬È»ºóΪÿһ¸öÓû§¿Õ¼äÖ¸¶¨Ò»¶¨µÄÅä¶î£¬±ÈÈ磺
apiVersion: v1beta3 kind: ResourceQuota metadata: name: quota spec: hard: cpu: "20" memory: 10Gi pods: "10" replicationcontrollers: "20" resourcequotas: "1" services: "5" |
µ½ÕâÀÎÒÃÇÓбØÒª¶à˵һ¾ä¡£ÏñBorg¡¢KubernetesÒÔ¼°MesosÕâÀàÏîÄ¿£¬ËüÃǰÑϵͳÖÐËùÓÐÐèÒª¶ÔÏó¶¼³éÏó³ÉÁËÒ»ÖÖ¡°×ÊÔ´¡±±£´æÔÚ¸÷×Եķֲ¼Ê½¼üÖµ´æ´¢ÖУ¬¶ø¹ÜÀíÔ±ÔòʹÓÃÈçÉÏËùʾµÄ¡°×ÊÔ´ÃèÊöÎļþ¡±À´½øÐÐÕâЩ¶ÔÏóµÄ´´½¨ºÍ¸üС£ÕâÑù£¬Õû¸öϵͳµÄÔËÐж¼ÊÇÎ§ÈÆ×Å¡°×ÊÔ´¡±µÄÔöɾ¸Ä²éÀ´Íê³ÉµÄ£¬¸÷×é¼þµÄÖ÷Ñ»·×ñÑ×Å¡°¼ì²é¶ÔÏ󡱡¢¡°¶ÔÏó±ä»¯¡±¡¢¡°´¥·¢Ê¼þ¡±¡¢¡°´¦Àíʼþ¡±ÕâÑùµÄÖÜÆÚÀ´Íê³ÉÓû§µÄÇëÇó¡£ÕâÑùµÄϵͳÓÐ×ÅÒ»¸öÃ÷ÏÔµÄÌØµã¾ÍÊÇËüÃÇÒ»°ã¶¼Ã»ÓÐÒýÈëÒ»¸öÏûϢϵͳÀ´½øÐÐʼþÁ÷µÄÐ×÷£¬¶øÊÇʹÓá°ectd¡±»òÕß¡°Zookeeper¡±×÷ΪʼþϵͳµÄºËÐIJ¿·Ö¡£
2.5 Ãû×Ö·þÎñºÍ¼à¿Ø
ÓëMesosµÈ²»Í¬£¬BorgÖÐʹÓõÄÊÇ×Ô¼ÒµÄÒ»ÖÂÐÔ´æ´¢ÏîÄ¿ChubbyÀ´×÷Ϊ·Ö²¼Ê½Ðµ÷×é¼þ¡£ÕâÆäÖд洢µÄÒ»¸öÖØÒªÄÚÈݾÍÊÇΪÿһ¸öTask±£´æÁËÒ»¸öDNSÃû×Ö£¬ÕâÑùµ±TaskµÄÐÅÏ¢·¢Éú±ä»¯Ê±£¬±ä¸üÄܹ»Í¨¹ýChubby¼°Ê±¸üе½TaskµÄ¸ºÔؾùºâÆ÷¡£ÕâͬKubernetesͨ¹ýWatch¼àÊÓetcdÖÐPodµÄÐÅÏ¢±ä»¯À´¸üзþÎñ´úÀíµÄÔÀíÊÇÒ»ÑùµÄ£¬µ«ÊÇÓÉÓÚʹÓÃÁËÃûΪ¡°Service¡±µÄ·þÎñ´úÀí»úÖÆ£¨Service¿ÉÒÔÀí½âΪÄܹ»×Ô¶¯¸üеĸºÔؾùºâ×é¼þ£©£¬KubernetesÖÐĬÈϲ¢Ã»ÓÐÄÚÖÃÃû×Ö·þÎñÀ´½øÐÐÈÝÆ÷¼äͨÐÅ£¨µ«ÊÇÌṩÁ˲å¼þʽµÄDNS·þÎñ¹©¹ÜÀíԱѡÓã©¡£
ÔÚ¼à¿Ø·½Ã棬BorgÖеÄËùÓÐÈÎÎñ¶¼ÉèÖÃÁËÒ»¸ö½¡¿µ¼ì²éURL£¬Ò»µ©Borg¶¨ÆÚ·ÃÎÊij¸öTaskµÄURLʱ·¢ÏÖ·µ»Ø²»·ûºÏÔ¤ÆÚ£¬Õâ¸öTask¾Í»á±»ÖØÆô¡£Õâ¸ö¹ý³ÌͬKubernetesÔÚPodÖÐÉèÖÃhealth_checkÊÇÒ»ÑùµÄ£¬±ÈÈçÏÂÃæÕâ¸öÀý×Ó£º
apiVersion: v1beta3 kind: Pod metadata: name: pod-with-healthcheck spec: containers: - name: nginx image: nginx # defines the health checking livenessProbe: # an http probe httpGet: path: /_status/healthz port: 80 # length of time to wait for a pod to initialize # after pod startup, before applying health checking initialDelaySeconds: 30 timeoutSeconds: 1 ports: - containerPort: 80 |
ÕâÖÖ×ö·¨µÄÒ»¸öСȱµãÊÇTaskÖзþÎñµÄ¿ª·¢ÕßÐèÒª×Ô¼º¶¨ÒåºÃÕâЩ/healthzURLºÍ¶ÔÓ¦µÄÏìÓ¦Âß¼¡£µ±È»£¬ÁíÒ»ÖÖ×ö·¨ÊÇ¿ÉÒÔÔÚÈÝÆ÷ÀïÄÚÖÃһЩ¡°Ì½Õ롱À´Íê³ÉºÜ¶à½¡¿µ¼ì²é¹¤×÷¶ø×öµ½¶ÔÓû§µÄ¿ª·¢¹ý³Ì͸Ã÷¡£
³ýÁ˽¡¿µ¼ì²é£¬Borg¶ÔÈÕÖ¾µÄ´¦ÀíÒ²ºÜÖµµÃ½è¼ø¡£BorgÖÐTaskµÄÈÕÖ¾»áÔÚTaskÍ˳öºó±£ÁôÒ»¶Îʱ¼ä£¬·½±ãÓû§½øÐе÷ÊÔ¡£Ïà±ÈÖ®ÏÂĿǰ´ó¶àÊýPaaS»òÕßÀàËÆÏîÄ¿µÄÈÝÆ÷Í˳öºóÈÕÖ¾¶¼»áÁ¢¼´±»É¾³ý£¨³ý·ÇÓû§×¨ÃÅ×öÁËÈÕÖ¾´æ´¢·þÎñ£©¡£
×îºó£¬BorgÇáÃèµÐ´µØ´ø¹ýÁ˱£´æevent×öÉ󼯵ŦÄÜ¡£ÕâÆäʵÓëKubernetesµÄevent¹¦ÄÜÒ²ºÜÀàËÆ£¬±ÈÈçKubeµÄÒ»ÌõeventµÄ¸ñʽÀàËÆÓÚ£º
·¢Éúʱ¼ä ½áÊøÊ±¼ä ÖØ¸´´ÎÊý ×ÊÔ´Ãû³Æ ×ÊÔ´ÀàÐÍ ×Óʼþ ·¢ÆðÔÒò ·¢ÆðÕß
ʼþÈÕÖ¾
3. BorgµÄ¼Ü¹¹ÓëÉè¼Æ
BorgµÄ¼Ü¹¹ÓëKubernetesµÄÏàËÆ¶ÈºÜ¸ß£¬ÔÚÿһ¸öCell£¨¹¤×÷µ¥Ôª£©ÀÔËÐÐ×ÅÉÙÁ¿Master½ÚµãºÍ´óÁ¿Worker½Úµã¡£ÆäÖУ¬Borgmaster¸ºÔðÏìÓ¦Óû§ÇëÇóÒÔ¼°ËùÓÐ×ÊÔ´¶ÔÏóµÄµ÷¶È¹ÜÀí£»¶øÃ¿¸ö¹¤×÷½ÚµãÉÏÔËÐÐ×ÅÒ»¸ö³ÆÎªBorgletµÄAgent£¬ÓÃÀ´´¦ÀíÀ´×ÔMasterµÄÖ¸Áî¡£ÕâÑùµÄÉè¼ÆÓëKubernetesÊÇÒ»Öµģ¬KubernetesÕâÁ½ÖÖ½ÚµãÉϵŤ×÷½ø³Ì·Ö±ðÊÇ£º
Master£º apiserver, controller-manager, scheduler Minion£º kube-proxy, kubelet |
ËäÈ»ÎÒÃDz»Çå³þBorgÔËÐÐ×ŵŤ×÷½ø³ÌÓÐÄÄЩ£¬µ«µ¥´Ó¹¦ÄÜÃèÊöÀïÃæÎÒÃDz»ÄÑÍÆ²âµ½ÖÁÉÙÔÚMaster½ÚµãÉÏÁ½ÕߵŤ×÷½ø³ÌÓ¦¸ÃÊÇÀàËÆµÄ¡£²»¹ý£¬Èç¹ûÉîÈëµ½ÂÛÎÄÖеÄϸ½ÚµÄ»°£¬ÎÒÃǻᷢÏÖBorgÔÚMaster½ÚµãÉϵŤ×÷Òª±ÈKubernetesÍêÉÆºÜ¶à¡£
3.1 Borgmaster
Ê×ÏÈ£¬BorgmasterÓÉÒ»¸ö¶ÀÁ¢µÄschedulerºÍÖ÷Borgmaster½ø³Ì×é³É¡£ÆäÖУ¬Ö÷½ø³Ì¸ºÔðÏìÓ¦À´×Ô¿Í»§¶ËµÄRPCÇëÇ󣬲¢ÇÒ½«ÕâЩÇëÇó·ÖΪ¡°±ä¸üÀࡱºÍ¡°Ö»¶Á¡±Àà¡£
ÔÚÕâÒ»µãÉÏKubernetesµÄapiserver´¦Àí·½·¨ÀàËÆ£¬kuberµÄAPI·þÎñ±»·ÖΪ¡°¶Áд¡±£¨GET£¬POST£¬PUT£¬DELETE£©ºÍ¡°Ö»¶Á¡±£¨GET£©Á½ÖÖ£¬·Ö±ðÓÉ6443ºÍ7080Á½¸ö²»Í¬µÄ¶Ë¿Ú¸ºÔðÏìÓ¦£¬²¢ÇÒÒªÇó¡°¶Áд¡±¶Ë¿Ú6443Ö»ÄÜÒÔHTTPS·½Ê½½øÐзÃÎÊ¡£Í¬Ñù£¬KubernetesµÄschedulerÒ²ÊÇÒ»¸öµ¥¶ÀµÄ½ø³Ì¡£
µ«ÊÇ£¬Ïà±ÈKubernetesµÄµ¥µãMaster£¬BorgmasterÊÇÒ»¸öÓÉÎå¸ö¸±±¾×é³ÉµÄ¼¯Èº¡£Ã¿Ò»¸ö¸±±¾¶¼ÔÚÄÚ´æÖж¼±£´æÁËÕû¸öCellµÄ¹¤×÷״̬£¬²¢ÇÒʹÓûùÓÚPaxosµÄChubbyÏîÄ¿À´±£´æÕâЩÐÅÏ¢ºÍ±£Ö¤ÐÅÏ¢µÄÒ»ÖÂÐÔ¡£BorgmasterÖеÄLeaderÊÇÒ²ÊǼ¯Èº´´½¨µÄʱºòÓÉPaxosÑ¡¾Ù³öÀ´µÄ£¬Ò»µ©Õâ¸öLeaderʧ°Ü£¬Chubby½«¿ªÊ¼ÐÂÒ»ÂÖµÄÑ¡¾Ù¡£ÂÛÎÄÖÐÖ¸³ö£¬Õâ¸öÖØÑ¡¾Ùµ½»Ö¸´Õý³£µÄ¹ý³ÌÒ»°ãºÄʱ10s£¬µ«ÊÇÔڱȽϴóµÄCellÀïµÄ¼¯Èº»áÓÉÓÚÊý¾ÝÁ¿ÅÓ´ó¶øÑÓ³¤µ½Ò»·ÖÖÓ¡£
¸üÓÐÒâ˼µÄÊÇ£¬Borgmaster»¹½«Ä³Ò»Ê±¿ÌµÄ״̬ͨ¹ý¶¨Ê±×ö¿ìÕյķ½Ê½±£´æ³ÉÁËcheckpointÎļþ£¬ÒÔ±ã¹ÜÀíÔ±»Ø¹öBorgmasterµÄ״̬£¬´Ó¶ø½øÐе÷ÊÔ»òÕ߯äËûµÄ·ÖÎö¹¤×÷¡£»ùÓÚÉÏÊö»úÖÆ£¬Borg»¹Éè¼ÆÁËÒ»¸ö³ÆÎªFauxmasterµÄ×é¼þÀ´¼ÓÔØcheckpointÎļþ£¬´Ó¶øÖ±½Ó½øÈëijʱ¿ÌBorgmasterµÄÀúʷ״̬¡£ÔÙ¼ÓÉÏFauxmaster±¾ÉíΪkubeletµÄ½Ó¿ÚʵÏÖÁË¡°×®¡±£¬ËùÒÔ¹ÜÀíÔ±¾Í¿ÉÒÔÏòÕâ¸öFauxmaster·¢ËÍÇëÇóÀ´Ä£Äâ¸ÃÀúʷ״̬Êý¾ÝÏÂBorgmasterµÄ¹¤×÷Çé¿ö£¬ÖØÏÖµ±Ê±ÏßÉϵÄϵͳ״¿ö¡£Õâ¸ö¶ÔÓÚϵͳµ÷ÊÔÀ´ËµÕæµÄÊǷdz£ÓÐÓᣴËÍ⣬ÉÏÊöFauxmaster»¹¿ÉÒÔÓÃÀ´×öÈÝÁ¿¹æ»®£¬²âÊÔBorgϵͳ±¾ÉíµÄ±ä¸üµÈµÈ¡£Õâ¸öFauxmasterÒ²ÊÇÂÛÎÄÖеÚÒ»´¦ÁíÎÒÃÇÑÛǰһÁÁµÄµØ·½¡£
ÉÏÊöÐ©ÌØÐÔʹµÃBorgÔÚMaster½ÚµãµÄÆóÒµ¼¶ÌØÐÔÉÏÃ÷ÏÔ±ÈKubernetesÒª³ÉÊìµÃ¶à¡£µ±È»£¬ÖµµÃÆÚ´ýµÄÊÇKubeµÄ¸ß¿ÉÓð汾µÄMasterÒ²ÒѾ½øÈëÁË×îºó½×¶Î£¬Ó¦¸ÃºÜ¿ì¾ÍÄÜ·¢²¼ÁË¡£
3.2 BorgµÄµ÷¶È»úÖÆ
Óû§¸øBorgÐÂÌá½»µÄÈÎÎñ»á±»±£´æÔÚ»ùÓÚPaxosµÄÒ»ÖÂÐÔ´æ´¢Öв¢¼ÓÈëµ½µÈ´ý¶ÓÁС£BorgµÄscheduler»áÒì²½µØÉ¨ÃèÕâ¸ö¶ÓÁÐÖеÄÈÎÎñ£¬²¢¼ì²éµ±Ç°ÕýÔÚ±»É¨ÃèµÄÕâ¸öÈÎÎñÊÇ·ñ¿ÉÒÔÔËÐÐÔÚij̨»úÆ÷ÉÏ¡£ÉÏÊöɨÃèµÄ˳Ðò°´ÕÕÈÎÎñÓÅÏȼ¶´Ó¸ßµ½µÍÀ´Round-Robin£¬ÕâÑùÄܹ»±£Ö¤¸ßÓÅÏȼ¶ÈÎÎñµÄ¿ÉÂú×ãÐÔ£¬±ÜÃâ¡°ÏßÍ·×èÈû¡±µÄ·¢Éú£¨Ä³¸öÈÎÎñÒ»Ö±²»ÄÜÍê³Éµ÷¶Èµ¼ÖÂËüºóÃæµÄËùÓÐÈÎÎñ¶¼±ØÐë½øÐеȴý£©¡£Ã¿É¨Ãèµ½Ò»¸öÈÎÎñ£¬Borg¼´Ê¹Óõ÷¶ÈËã·¨À´¿¼²ìµ±Ç°CellÖеÄËùÓлúÆ÷£¬×îÖÕÑ¡ÔñÒ»¸öºÏÊʵĽڵãÀ´ÔËÐÐÕâ¸öÈÎÎñ¡£
´ËËã·¨·ÖÁ½½×¶Î£º
µÚÒ»£¬¿ÉÐÐÐÔ¼ì²é¡£Õâ¸ö¼ì²éÿ¸ö»úÆ÷ÊÇËùÓзûºÏÈÎÎñ×ÊÔ´ÐèÇóºÍÆäËüÔ¼Êø£¨±ÈÈçÖ¸¶¨µÄ´ÅÅÌÀàÐÍ£©£¬ËùÒԵõ½µÄ½á¹ûÒ»°ãÊǸö»úÆ÷ÁÐ±í¡£ÐèҪעÒâµÄÊÇÔÚ¿ÉÐÐÐÔ¼ì²éÖУ¬Ò»Ì¨»úÆ÷¡°×ÊÔ´ÊÇ·ñ¹»ÓᱻῼÂǵ½ÇÀÕ¼µÄÇé¿ö£¬ÕâÒ»µãÎÒÃǺóÃæ»áÏêϸ½éÉÜ¡£
µÚ¶þ£¬´ò·Ö¡£Õâ¸ö¹ý³Ì´ÓÉÏÊö¿ÉÐеĻúÆ÷ÁбíÖÐͨ¹ý´ò·ÖÑ¡Ôñ³ö·ÖÊý×î¸ßµÄÒ»¸ö¡£
ÕâÀïÖØµã¿´´ò·Ö¹ý³Ì¡£BorgÉè¼ÆµÄ´ò·Ö±ê×¼ÓÐÈçϼ¸ÖÖ£º
1.¾¡Á¿±ÜÃâ·¢ÉúµÍÓÅÏȼ¶ÈÎÎñµÄ×ÊÔ´±»ÇÀÕ¼£»Èç¹û±ÜÃâ²»ÁË£¬ÔòÈñ»ÇÀÕ¼µÄÈÎÎñÊýÁ¿×îÉÙ¡¢ÓÅÏȼ¶×îµÍ£»
2.ÌôÑ¡ÒѾ°²×°ÁËÈÎÎñÔËÐÐËùÐèÒÀÀµµÄ»úÆ÷£»
3.ʹÈÎÎñ¾¡Á¿·Ö²¼ÔÚ²»Í¬µÄ¸ß¿ÉÓÃÓòµ±ÖУ»
4.»ìºÏ²¿Êð¸ßÓÅÏȼ¶ºÍµÍÓÅÏȼ¶ÈÎÎñ£¬ÕâÑùÔÚÁ÷Á¿·åֵͻȻ³öÏֺ󣬸ßÓÅÏȼ¶¿ÉÒÔÇÀÕ¼µÍÓÅÏȼ¶µÄ×ÊÔ´£¨ÕâÒ»µãºÜÓÐÒâ˼£©¡£
BorgÆäÊµÔø¾Ê¹ÓùýE-PVMÄ£ÐÍ£¨¼òµ¥µÄ˵¾ÍÊǰÑËùÓдò·Ö¹æÔò°´ÕÕÒ»¶¨Ëã·¨×ۺϳÉÒ»ÖÖ¹æÔò£©À´½øÐдò·ÖµÄ¡£µ«ÊÇÕâÖÖµ÷¶ÈµÄ½á¹ûÊÇÈÎÎñ×îÖÕ±»Æ½¾ùµÄ·ÖÉ¢µ½ÁËËùÓлúÆ÷ÉÏ£¬²¢ÇÒÿ̨»úÆ÷ÉÏÁô³öÁËÒ»¶¨µÄ¿ÕÏпռäÀ´Ó¦¶ÔѹÁ¦·åÖµ¡£ÕâÖ±½ÓÔì³ÉÁËÕû¸ö¼¯Èº×ÊÔ´µÄË鯬»¯¡£
ÓëÉÏÊö×ö·¨µÄÏà·´µÄÊÇÁíÒ»¸ö¼«¶Ë£¬¼´¾¡Á¿ÈÃËùÓеĻúÆ÷¶¼ÌîÂú¡£µ«ÊÇÕ⽫µ¼ÖÂÈÎÎñ²»ÄܺܺõÄÓ¦¶ÔÍ»·¢·åÖµ¡£¶øÇÒBorg»òÕßÓû§¶ÔÓÚÈÎÎñËùÐèµÄ×ÊÔ´Åä¶îµÄ¹À¼ÆÍùÍù²»ÊǺÜ׼ȷ£¬ÓÈÆäÊǶÔÓÚbatch
jobÀ´Ëµ£¬ËüÃÇËùÇëÇóµÄ×ÊÔ´Á¿Ä¬ÈÏÊǺÜÉٵģ¨ÌرðÊÇCPU×ÊÔ´£©¡£ËùÒÔÔÚÕâÖÖµ÷¶È²ßÂÔÏÂbatch job»áºÜÈÝÒ×±»Ìî³äÔÚÏÁСµÄ×ÊÔ´·ì϶ÖУ¬Õâʱһµ©Óöµ½Ñ¹Á¦·åÖµ£¬²»½öbatch
job»á³öÎÊÌ⣬ÓëËüÔËÐÐÔÚͬһ̨»úÆ÷ÉϵÄLRSÒ²»áÔâÑê¡£
¶øBorg²ÉÓõÄÊÇ¡°»ì²¿¼ÓÇÀÕ¼¡±µÄģʽ£¬ÕâÖÖ×ö·¨¼¯³ÉÁËÉÏÊöÁ½ÖÖÄ£Ð͵ÄÓŵ㣺¼æ¹Ë¹«Æ½ÐÔºÍÀûÓÃÂÊ¡£ÕâÆäÖУ¬LRSºÍbatch
jobµÄ»ì²¿ÒÔ¼°ÓÅÏȼ¶ÌåϵµÄ´æÔÚΪ×ÊÔ´ÇÀÕ¼ÌṩÁË»ù´¡¡£ÕâÑù£¬BorgÔÚ¡°¿ÉÐÐÐÔ¼ì²é¡±½×¶Î¾Í¿ÉÒÔ¿¼ÂÇÒѾÔÚ´Ë»úÆ÷ÉÏÔËÐеÄÈÎÎñµÄ×ÊÔ´Äܱ»ÇÀÕ¼¶àÉÙ¡£Èç¹ûËãÉÏ¿ÉÒÔÇÀÕ¼µÄÕⲿ·Ö×ÊÔ´ºó´Ë»úÆ÷¿ÉÒÔÂú×ã´ýµ÷¶ÈÈÎÎñµÄÐèÇóµÄ»°£¬ÈÎÎñ¾Í»á±»ÈÏΪ¡°¿ÉÐС±¡£½ÓÏ£¬Borg»á°´ÓÅÏȼ¶µÍµ½¸ß¡°kill¡±Õą̂»úÆ÷ÉϵÄÈÎÎñÖ±µ½Âú×ã´ýÔËÐÐÈÎÎñµÄÐèÇó£¬Õâ¾ÍÊÇÇÀÕ¼µÄ¾ßÌåʵʩ¹ý³Ì¡£µ±È»£¬±»¡°kill¡±µÄÈÎÎñ»áÖØÐ½øÈëÁ˵÷¶È¶ÓÁУ¬µÈ´ýÖØÐµ÷¶È¡£
ÁíÒ»·½ÃæBorgÒ²Ö¸³öÔÚÈÎÎñµ÷¶È²¢Æô¶¯µÄ¹ý³ÌÖУ¬°²×°ÒÀÀµ°üµÄ¹ý³Ì»á¹¹³É80%µÄÆô¶¯ÑÓʱ£¬ËùÒÔµ÷¶ÈÆ÷»áÓÅÏÈÑ¡ÔñÒѾ°²×°ºÃÁËÕâЩÒÀÀµµÄ»úÆ÷¡£ÕâÈÃÎÒÏëÆðÀ´ÒÔǰʹÓÃVMware¿ª·¢µÄ±àÅÅϵͳBOSHʱ£¬ËüµÄÿһ¸öJob¶¼»áͨ¹ýspecÃèÊö×Ô¼ºÒÀÀµÄÄЩ°ü£¬±ÈÈçGCC¡£ËùÒÔµ±Ê±ÎªÁ˽Úʡʱ¼ä£¬ÎÒÃÇ»áÔÚ²¿Êð¿ªÊ¼Ç°Ê¹Óýű¾²¢·¢µØÔÚËùÓÐÄ¿±ê»úÆ÷Éϰ²×°ºÃͨÓõÄÒÀÀµ£¬±ÈÈçRuby¡¢GCCÕâЩ£¬È»ºó²Å¿ªÊ¼ÕæÕýµÄ²¿Êð¹ý³Ì¡£
ÊÂʵÉÏ£¬BorgÒ²ÓÐÒ»¸öÀàËÆµÄ°ü·Ö·¢µÄ¹ý³Ì£¬¶øÇÒʹÓõÄÊÇÀàËÆBitTorrentµÄÐÒé¡£
ÕâʱÎÒÃǻص½KubernetesÉÏÀ´£¬²»ÄÑ·¢ÏÖËüÓëBorgµÄµ÷¶È»úÖÆ»¹±È½ÏºÜÀàËÆµÄ¡£Õ⵱ȻҲ¾ÍÒâζ×ÅKubernetesÖÐûÓÐ½è¼ø´«ËµÖеÄOmega¹²Ïí״̬µ÷¶È£¨·´µ¹ÊÇMesosµÄRoadmapÀï³öÏÖÁËÀàËÆ¡±ÀÖ¹Û²¢·¢¿ØÖÆ¡°µÄ¸ÅÄ¡£
KubernetesµÄµ÷¶ÈËã·¨Ò²·ÖΪÁ½¸ö½×¶Î£º
1.¡°Predicates¹ý³Ì¡±£ºÉ¸Ñ¡³öºÏ¸ñµÄMinion£¬ÀàËÆBorgµÄ¡°¿ÉÐÐÐÔ¼ì²é¡±¡£ÕâÒ»½×¶ÎKubernetesÖ÷ÒªÐèÒª¿¼²ìÒ»¸öMinionµÄÌõ¼þ°üÀ¨£º
2.ÈÝÆ÷ÉêÇëµÄÖ÷»ú¶Ë¿ÚÊÇ·ñ¿ÉÓÃ
3.Æä×ÊÔ´ÊÇ·ñÂú×ãPodÀïËùÓÐÈÝÆ÷µÄÐèÇ󣨽ö¿¼ÂÇCPUºÍMemory£¬ÇÒûÓÐÇÀÕ¼»úÖÆ£©
4.volumeÊÇ·ñ³åÍ»
5.ÊÇ·ñÆ¥ÅäÓû§Ö¸¶¨µÄLabel
6.ÊDz»ÊÇÖ¸¶¨µÄhostname
¡°Priorities¹ý³Ì¡±£º¶Ôͨ¹ýÉÏÊöɸѡµÄMinon´ò·Ö£¬Õâ¸ö´ò·ÖµÄ±ê׼ĿǰºÜ¼òµ¥£º
1.Ñ¡Ôñ×ÊÔ´¿ÕÏиü¶àµÄ»úÆ÷
2.ÊôÓÚͬһ¸öÈÎÎñµÄ¸±±¾Pod¾¡Á¿·Ö²¼ÔÚ²»Í¬»úÆ÷ÉÏ
´Óµ÷¶ÈË㷨ʵÏÖÉϲîÒìÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½KubernetesÓëBorgµÄ¶¨Î»ÓÐ×ÅÃ÷ÏԵIJ»Í¬¡£BorgµÄµ÷¶ÈËã·¨ÖÐ×ÊÔ´ÇÀÕ¼ºÍÈÎÎñ»ì²¿ÊÇÁ½¸ö¹Ø¼üµã£¬ÕâÓ¦ÊÇ¿¼Âǵ½ÁËÕâЩ²ßÂÔÔÚGoogleÅÓ´óµÄ»úÆ÷¹æÄ£ÉÏËùÄÜ´øÀ´µÄ¾Þ´óµÄ³É±¾Ï÷¼õ¡£ËùÒÔBorgÔÚËã·¨µÄÉè¼ÆÉÏÇ¿µ÷Á˻첿״̬϶Ô×ÊÔ´·ÖÅäºÍÈÎÎñ·Ö²¼µÄÓÅ»¯¡£¶øKubernetesÃ÷ÏÔÏë°Ñµ÷¶È¹ý³Ì¾¡Á¿¼ò»¯£¬ÆäÁ½¸ö½×¶ÎµÄµ÷¶ÈÒÀ¾Ý¶¼²ÉÓÃÁ˼òµ¥´Ö±©µÄÓ²ÐÔ×ÊÔ´±ê×¼£¬¶øÃ»ÓÐÖ§³ÖÈκÎÇÀÕ¼²ßÂÔ£¬Ò²Ã»ÓÐÓÅÏȼ¶µÄ˵·¨¡£µ±È»£¬ÓÐÒ»²¿·ÖÔÒòÊÇ¿ªÔ´ÏîÄ¿µÄÓû§Ò»°ã¶¼Ï²»¶¶¨ÖÆ×Ô¼ºµÄµ÷¶ÈËã·¨£¬´ÓÕâÒ»µãÉÏÀ´ËµÈ·ÊµÊÇ¡°less
is more¡±¡£×ÜÖ®£¬×îÖյĽá¹ûÊǾ¡¹Ü±£ÁôÁËBorgµÄÓ°×Ó£¨±Ï¾¹×÷Õߺܶ඼ÊÇÒ»»ïÈË£©£¬Kubernetesµ÷¶ÈÆ÷µÄʵÏÖÉÏÈ´ÍêÈ«ÊÇÁíÍâÒ»ÌõµÀ·£¬È·ÇеÄ˵¸üÏñSwarmÕâÖÖÆ«Ïò¿ª·¢ÕߵıàÅÅÏîÄ¿¡£
´ËÍ⣬»¹ÓÐÒ»¸ö·Ç³£ÖØÒªµÄÒòËØ²»µÃ²»ÌᣬÄǾÍÊÇDockerµÄ¾µÏñ»úÖÆ¡£BorgÔÚGoogle·þÒÛÆÚ¼äËùʹÓõÄLinuxÈÝÆ÷ËäȻӦÓü«¹ãÇÒ¹æÄ£ÅӴ󣬵«ºËÐŦÄÜ»¹ÊÇLXCµÄ±äÌå»òÕßÇ¿»¯°æ£¬Ç¿µ÷µÄÊǸôÀ빦ÄÜ¡£ÕâÒ»µã´ÓËüµÄ¿ªÔ´°æÏîÄ¿lmctfyµÄʵÏÖ£¬ÒÔ¼°ÂÛÎÄÀïÌáµ½ÐèÒª¿¼ÂÇÈÎÎñÒÀÀµ°üµÈϸ½ÚÉÏÎÒÃǶ¼¿ÉÒÔÍÆ¶Ï³öÀ´¡£¿ÉÊÇDockerµÄÀ÷º¦Ö®´¦¾ÍÔÚÓÚÖ±½Ó·â×°ÁËÕû¸öJobµÄÔËÐл·¾³£¬ÕâʹµÃKubernetesÔÚµ÷¶Èʱ¿ÉÒÔ²»±Ø¿¼ÂÇÒÀÀµ°üµÄ·Ö²¼Çé¿ö£¬²¢ÇÒ¿ÉÒÔʹÓÃPodÕâÑùµÄ¡°Ô×ÓÈÝÆ÷×顱¶ø²»Êǵ¥¸öÈÝÆ÷×÷Ϊµ÷¶Èµ¥Î»¡£µ±È»£¬ÕâÒ²ÌáʾÁËÎÒÃǽ«À´½øÐÐDockerÈÝÆ÷µ÷¶Èʱ£¬ÆäʵҲ¿ÉÒ԰ѾµÏñµÄ·Ö²¼¿¼ÂÇÔÚÄÚ£º±ÈÈçÊÂÏÈÔÚËùÓй¤×÷½ÚµãÉÏ´«»ù´¡¾µÏñ£»ÔÚ´ò·Ö½×¶ÎÓÅÏÈÑ¡ÔñÈÎÎñËùÐè»ù´¡¾µÏñ¸üÍ걸µÄ½Úµã¡£
Èç¹û¶ÁÕßÏë¸ÐÊÜÒ»ÏÂûÓоµÏñµÄDockerÈÝÆ÷ÊÇʲôÊָУ¬²»·ÁÈ¥ÊÔÓÃÒ»ÏÂDockerConÉϸոչÙÐûµÄruncÏîÄ¿£¨https://github.com/opencontainers/runc£©¡£runcÍêÈ«ÊÇÒ»¸ölibcontainerµÄÖ±½Ó·â×°£¬ÌṩËùÓеÄDockerÈÝÆ÷±Ø±¸¹¦ÄÜ£¬µ«ÊÇûÓоµÏñµÄ¸ÅÄ¼´Óû§ÐèÒª×Ô¼ºÖ¸¶¨rootfs»·¾³£©£¬ÕâÊ®·ÖÌù½ülmctfyµÈ½öרעÓÚ¸ôÀë»·¾³µÄÈÝÆ÷ÏîÄ¿¡£
3.3 Borglet
À뿪ÁËBorgmaster½Úµã£¬ÎÒÃǽÓÏÂÀ´¿´Ò»Ï¹¤×÷½ÚµãÉϵÄBorglet×é¼þ£¬ËüµÄÖ÷Òª¹¤×÷°üÀ¨£º
ÆôÍ£ÈÝÆ÷£¬½øÐÐÈÝÆ÷ʧ°Ü»Ö¸´£¬Í¨¹ýkernel²ÎÊý²Ù×÷ºÍ¹ÜÀíOS×ÊÔ´£¬ÇåÀíϵͳÈÕÖ¾£¬ÊÕ¼¯»úÆ÷״̬¹©Borgmaster¼°ÆäËû¼à¿Ø·½Ê¹Óá£
Õâ¸ö¹ý³ÌÖУ¬Borgmaster»áͨ¹ý¶¨ÆÚÂÖѯÀ´¼ì²é»úÆ÷µÄ״̬¡£ÕâÖÖÖ÷¶¯pollµÄ×ö·¨ºÃ´¦ÊÇÄܹ»´óÁ¿BorgletÖ÷¶¯»ã±¨×´Ì¬Ôì³ÉÁ÷Á¿ÓµÈû£¬²¢ÇÒÄÜ·ÀÖ¹¡°»Ö¸´·ç±©¡±£¨±ÈÈç´óÁ¿Ê§°Üºó»Ö¸´¹ýÀ´µÄ»úÆ÷»áÔÚͬ¶Îһʱ¼ä²»Í£µØÏòBorgmaster·¢ËÍ´óÁ¿µÄ»Ö¸´Êý¾ÝºÍÇëÇó£¬Èç¹ûûÓкÏÀíµÄÓµÈû¿ØÖÆÊֶΣ¬ÕߺܿÉÄÜ»á×èÈûÕû¸öÍøÂç»òÕßÖ±½Ó°ÑmasterÍÏ¿åµô£©¡£Ò»µ©ÊÕµ½»ã±¨ÐÅÏ¢ºó£¬³äµ±leaderµÄBorgmaster»á¸ù¾ÝÕâЩÐÅÏ¢¸üÐÂ×Ô¼º³ÖÓеÄCell״̬Êý¾Ý¡£
Õâ¸ö¹ý³ÌÀ¼¯ÈºBorgmasterµÄ¡°ÓÅÔ½ÐÔ¡±Ôٴεõ½ÁËÌåÏÖ¡£BorgmasterµÄÿ¸ö½Úµãά»¤ÁËÒ»·ÝÎÞ״̬µÄ¡°Á´½Ó·ÖƬ£¨link
shard£©¡±¡£Ã¿¸ö·ÖƬֻ¸ºÔðÒ»²¿·ÖBorglet»úÆ÷µÄ״̬¼ì²é£¬¶ø²»ÊÇÕû¸öCell¡£¶øÇÒÕâЩ·ÖƬ»¹Äܹ»»ã¼¯²¢diifÕâЩ״̬ÐÅÏ¢£¬×îºóÖ»ÈÃleader»ñÖª²¢¸üÐÂÄÇЩ·¢ÉúÁ˱仯µÄÊý¾Ý¡£ÕâÖÖ×ö·¨ÓÐЧµØ½µµÍÁËBorgmasterµÄ¹¤×÷¸ºÔØ¡£
µ±È»£¬Èç¹ûÒ»¸öBorgletÔÚ¼¸¸öpollÖÜÆÚÄÚ¶¼Ã»ÓлØÓ¦£¬Ëû¾Í»á±»ÈÏΪ崻úÁË¡£Ô±¾ÔËÐÐÔÚÕû¸ö½ÚµãÉϵÄÈÎÎñÈÝÆ÷»á½øÈëÖØµ÷¶ÈÖÜÆÚ¡£Èç¹û´ËÆÚ¼äBorgletÓëmasterµÄͨÐŻָ´ÁË£¬ÄÇômaster»áÇëÇóɱËÀÄÇЩ±»Öص÷¶ÈµÄÈÎÎñÈÝÆ÷£¬ÒÔ·ÀÖØ¸´¡£BorgletµÄÔËÐв¢²»ÐèÒªÒÀÀµÓÚBorgmaster£¬¼°Ê±masterÈ«²¿å´»ú£¬ÈÎÎñÒÀÈ»¿ÉÒÔÕý³£ÔËÐС£
ÓëBorgÏà±È£¬KubernetesÔòÑ¡ÔñÁË·½ÏòÏà·´µÄ״̬»ã±¨²ßÂÔ¡£µ±Ò»¸ökubelet½ø³ÌÆô¶¯ºó£¬Ëü»áÖ÷¶¯½«×Ô¼º×¢²á¸ømaster½ÚµãÉϵÄapiserver¡£½ÓÏÂÀ´£¬kubelet»á¶¨ÆÚÏòapiserver¸üÐÂ×Ô¼º¶ÔÓ¦µÄnodeµÄÐÅÏ¢£¬Èç¹ûÒ»¶Îʱ¼äÄÚûÓиüУ¬Ôòmaster¾Í»áÈÏΪ´Ë¹¤×÷½ÚµãÒѾ·¢Éú¹ÊÕÏ¡£ÉÏÊö»ã±¨ÐÅÏ¢µÄÊÕ¼¯Ö÷ÒªÒÀÀµÓÚÿ¸ö½ÚµãÉÏÔËÐеÄCAdvisor½ø³Ì£¬¶ø²¢·ÇÖ±½ÓÓë²Ù×÷ϵͳ½øÐн»»¥¡£
ÊÂʵÉÏ£¬²»Ö¹kubelet½ø³Ì»áÕâô×ö¡£KubernetesÀïµÄËùÓÐ×é¼þÐ×÷£¬¶¼»á²ÉÓÃÖ÷¶¯È¥¸úapiServer½¨Á¢ÁªÏµ£¬½ø¶øÍ¨¹ýapiserverÀ´¼àÊÓ¡¢²Ù×÷etcdµÄ×ÊÔ´À´Íê³ÉÏàÓ¦µÄ¹¦ÄÜ¡£
¾Ù¸öÀý×Ó£¬Óû§Ïòapiserver·¢ÆðÇëÇó±íʾҪ´´½¨Ò»¸öPod£¬ÔÚµ÷¶ÈÆ÷Ñ¡ÔñºÃÁËij¸ö¿ÉÓõÄminionºóapiserver²¢²»»áÖ±½Ó¸æËßkubelet˵ÎÒÒªÔÚÕâ¸ö»úÆ÷ÉÏ´´½¨ÈÝÆ÷£¬¶øÊÇ»á¼ä½ÓÔÚetcdÖд´½¨Ò»¸ö¡°boundPod¡±¶ÔÏó£¨Õâ¸ö¶ÔÏóµÄÒâ˼ÊÇÎÒÒªÔÚij¸ökubelet»úÆ÷Éϰ󶨲¢ÔËÐÐij¸öPod£©¡£Óë´Ëͬʱ£¬kubeletÔò¶¨Ê±µØÖ÷¶¯¼ì²éÓÐûÓиú×Ô¼ºÓйصġ°boundPod¡±£¬Ò»µ©·¢ÏÖÓУ¬Ëü¾Í»á°´ÕÕÕâ¸ö¶ÔÏó±£´æµÄÐÅÏ¢ÏòDocker
Daemon·¢Æð´´½¨ÈÝÆ÷µÄÇëÇó¡£
ÕâÕýÊÇKubernetesÉè¼ÆÖС°Ò»ÇнÔ×ÊÔ´¡±µÄÌåÏÖ£¬¼´ËùÓÐʵÌå¶ÔÏó£¬ÏûÏ¢µÈ¶¼ÊÇ×÷ΪetcdÀï±£´æÆðÀ´µÄÒ»ÖÖ×ÊÔ´À´¶Ô´ý£¬ÆäËûËùÓÐÐ×÷ÕßҪôͨ¹ý¼àÊÓÕâЩ×ÊÔ´µÄ±ä»¯À´²ÉÈ¡¶¯×÷£¬ÒªÃ´¾ÍÊÇͨ¹ýapiserverÀ´¶ÔÕâЩ×ÊÔ´½øÐÐÔöɾ¸Ä²é¡£
ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔ°ÑKubernetesµÄʵÏÖ·½·¨ÃèÊöΪ¡°ÃæÏòetcdµÄ±à³Ìģʽ¡±¡£ÕâÒ²ÊÇKubernetesÓëBorgÉè¼ÆÉϵÄÓÖÒ»¸ö²»Í¬µã£¬Ëµµ½µ×»¹ÊǹæÄ£´æÔڵIJîÒ죺¼´KubernetesÈÏΪËü¹ÜÀíµÄ¼¯ÈºÖв»»á´æÔÚÄÇô¶à»úÆ÷ͬʱÏòapiserver·¢Æð´óÁ¿µÄÇëÇó¡£ÕâÒ²´ÓÁíÒ»¸ö·½Ãæ±íÏÖ³öÁË×÷ÕßÃǶÔetcdÏìÓ¦ÄÜÁ¦»¹ÊDZȽÏÓÐÐÅÐĵġ£
3.4 ¿ÉÀ©Õ¹ÐÔ
ÕâÒ»½ÚÀïÓëÆä˵ÔÚBorgµÄ¿ÉÀ©Õ¹ÐÔ£¬µ¹²»Èç˵ÔÚ½²ËüÈçºÎͨ¹ý¸÷ÖÖÓÅ»¯ÊµÏÖÁ˸ü¸ßµÄ¿ÉÀ©Õ¹ÐÔ¡£
Ê×ÏÈÊǶÔBorgmasterµÄ¸Ä½ø¡£×î³õµÄBorgmaster¾ÍÊÇÒ»¸öͬ²½Ñ»·£¬ÔÚÑ»·¹ý³ÌÖÐ˳Ðò½øÐÐÓû§ÇëÇóÏìÓ¦¡¢µ÷¶È¡¢Í¬Borglet½»»¥µÈ¶¯×÷¡£ËùÒÔBorgµÄµÚÒ»¸ö¸Ä½ø¾ÍÊǽ«µ÷¶ÈÆ÷¶ÀÁ¢³öÀ´£¬´Ó¶øÄܹ»Í¬ÆäËû¶¯×÷²¢ÐÐÖ´ÐС£¸Ä½øºóµÄµ÷¶ÈÆ÷ʹÓÃCell¼¯Èº×´Ì¬µÄ»º´æÊý¾ÝÀ´²»¶ÏÖØ¸´ÒÔϲÙ×÷£º
1.´ÓBorgmaster½ÓÊܼ¯ÈºµÄ״̬±ä»¯
2.¸üб¾µØµÄ¼¯Èº×´Ì¬»º´æÊý¾Ý
3.¶ÔÖ¸¶¨µÄTaskÖ´Ðе÷¶È¹¤×÷
4.½«µ÷¶È½á¹û¸æËßBorgmaster
ÕâЩ²Ù×÷×é³ÉÁ˵÷¶ÈÆ÷µÄÍêÕû¹¤×÷ÖÜÆÚ¡£
Æä´Î£¬BorgmasterÉϸºÔðÏìÓ¦Ö»¶ÁÇëÇóºÍͬBorglet½øÐн»»¥µÄ½ø³ÌÒ²±»¶ÀÁ¢³öÀ´£¬Í¨¹ýÖ°ÔðµÄµ¥Ò»ÐÔÀ´±£Ö¤¸÷×ÔµÄÖ´ÐÐЧÂÊ¡£ÕâЩ½ø³Ì»á±»·ÖÅäÔÚBorgmasterµÄ²»Í¬¸±±¾½ÚµãÉÏÀ´½øÒ»²½Ìá¸ßЧÂÊ£¨Ö»¸ºÔðͬ±¾¸±±¾½ÚµãËù¹ÜÀíµÄÄDz¿·ÖWorker½Úµã½øÐн»»¥£©¡£
×îºóÊÇרÃÅÕë¶Ôµ÷¶ÈÆ÷µÄÓÅ»¯¡£
»º´æ»úÆ÷µÄ´ò·Ö½á¹û¡£±Ï¾¹Ã¿´Îµ÷¶È¶¼¸øËùÓлúÆ÷ÖØÐ´òÒ»´Î·ÖȷʵºÜÎÞÁÄ¡£Ö»Óе±»úÆ÷ÐÅÏ¢»òÕßTask·¢ÉúÁ˱仯£¨±ÈÈçÈÎÎñ±»´ÓÕâ¸ö»úÆ÷Éϵ÷¶È×ßÁË£©Ê±£¬µ÷¶ÈÆ÷»º´æµÄ»úÆ÷·ÖÊý²Å»á·¢Éú¸üС£¶øÇÒ£¬Borg»áºöÂÔÄÇЩ²»Ì«Ã÷ÏÔµÄ×ÊÔ´±ä»¯£¬¼õÉÙ»º´æµÄ¸üдÎÊý¡£
»®·ÖTaskµÈ¼ÛÀà¡£BorgµÄµ÷¶ÈËã·¨Õë¶ÔµÄÊÇÒ»×éÐèÇóºÍÔ¼Êø¶¼Ò»ÑùµÄTask£¨µÈ¼ÛÀࣩ¶ø²»Êǵ¥¸öTaskÀ´Ö´Ðеġ£
Ëæ»úÑ¡ÔñÒ»×é»úÆ÷À´×öµ÷¶È¡£ÕâÊǺÜÓÐÒâ˼µÄÒ»ÖÖ×ö·¨£¬¼´Borgµ÷¶ÈÆ÷²¢²»»á°ÑCellÀïµÄËùÓлúÆ÷ÄùýÀ´°¤¸ö½øÐпÉÐÐÐÔ¼ì²é£¬¶øÊDz»¶ÏµØËæ»úÌôѡһ¸ö»úÆ÷À´¼ì²é¿ÉÐÐÐÔ£¬ÅжÏÊÇ·ñͨ¹ý£¬ÔÙÌôÑ¡ÏÂÒ»¸ö£¬Ö±µ½Í¨¹ýɸѡµÄ»úÆ÷´ïµ½Ò»¶¨µÄÊýÄ¿¡£È»ºóÔÙÔÚÕâЩͨ¹ýɸѡµÄ»úÆ÷¼¯ºÏÀï½øÐдò·Ö¹ý³Ì¡£Õâ¸ö²ßÂÔÓëÖøÃûµÄSparrowµ÷¶ÈÆ÷µÄ×ö·¨ºÜÀàËÆ¡£
ÕâЩÓÅ»¯·½·¨´ó´óÌá¸ßÁËBorgµÄ¹¤×÷ЧÂÊ£¬×÷ÕßÔÚÂÛÎÄÖÐÖ¸³öÔÚÉÏÊö¹¦Äܱ»½ûµô£¬ÓÐЩÔÀ´¼¸°ÙÃëÍê³ÉµÄµ÷¶È¹¤×÷ÐèÒª¼¸Ìì²ÅÄÜÍêÈ«Íê³É¡£
4. ¿ÉÓÃÐÔ
BorgÔÚÌá¸ß¿ÉÓÃÐÔ·½ÃæËù×öµÄŬÁ¦Óë´ó¶àÊý·Ö²¼Ê½ÏµÍ³µÄ×ö·¨Ïàͬ¡£±ÈÈ磺
1.×Ô¶¯Öص÷¶Èʧ°ÜµÄÈÎÎñ
2.½«Í¬Ò»JobµÄ²»Í¬ÈÎÎñ·Ö²¼ÔÚ²»Í¬µÄ¸ß¿ÉÓÃÓò
3.ÔÚ»úÆ÷»òÕß²Ù×÷ϵͳÉý¼¶µÄ¹ý³ÌÖÐÏÞÖÆÔÊÐíµÄÈÎÎñÖжϵĴÎÊýºÍͬʱÖжϵÄÈÎÎñÊýÁ¿
4.±£Ö¤²Ù×÷µÄÃݵÈÐÔ£¬ÕâÑùµ±¿Í»§¶Ëʧ°ÜʱËü¿ÉÒÔ·ÅÐĵķ¢ÆðÖØÊÔ²Ù×÷
5.µ±Ò»Ì¨»úÆ÷ʧÁªºó£¬ÈÎÎñÖØµ÷¶ÈµÄËٶȻᱻ¼ÓÒÔÏÞÖÆ£¬ÒòΪBorg²»ÄÜÈ·¶¨Ê§ÁªµÄÔÒòÊÇ´ó¹æÄ£µÄ»úÆ÷ʧ°Ü£¨±ÈÈç¶Ïµç£©£¬»¹ÊDz¿·ÖÍøÂç´íÎó¡£
6.ÈÎÎñʧ°Üºó£¬ÔÚÒ»¶Îʱ¼äÄÚÔÚ±¾µØ´ÅÅ̱£ÁôÈÕÖ¾¼°ÆäËû¹Ø¼üÊý¾Ý£¬ÄÄŶÔÓ¦µÄÈÎÎñÒѾ±»É±ËÀ»òÕßµ÷¶Èµ½ÆäËûµØ·½ÁË¡£
×îºóÒ²ÊÇ×îÖØÒªµÄ£¬BorgletµÄÔËÐв»ÒÀÀµÓÚmaster£¬ËùÒÔÄÄÅ¿ØÖƽڵãÈ«²¿å´»ú£¬Óû§Ìá½»µÄÈÎÎñÒÀÈ»Õý³£ÔËÐС£
ÔÚÕâÒ»²¿·Ö£¬KubernetesҲûÓÐÌØ±ðµÄÉè¼Æ¡£±Ï¾¹£¬ÔÚÈÎÎñ¶¼ÒѾÈÝÆ÷»¯µÄÇé¿öÏ£¬Ö»ÒªÕýÈ·µØ´¦ÀíºÃÈÝÆ÷µÄµ÷¶ÈºÍ¹ÜÀí¹¤×÷£¬ÈÎÎñ¼¶±ð¸ß¿ÉÓõĴï³É²¢²»ËãÊ®·ÖÀ§ÄÑ¡£
ÖÁ´Ë£¬ÂÛÎĵÄǰËÄÕÂÎÒÃǾͽéÉÜÍêÁË¡£Í¨¹ýÓëKubernetesµÄʵÏÖ×÷±È½Ï£¬ÎÒÃÇËÆºõÄܵõ½Ò»¸ö¡°Ã²ºÏÉñÀ롱µÄ½áÂÛ¡£¼´KubernetesÓëBorg´Ó±íÃæÉÏ¿´·Ç³£ÏàËÆ£ºÏàͬµÄ¼Ü¹¹£¬ÏàËÆµÄµ÷¶ÈËã·¨£¬µ±È»»¹ÓÐͬһ»ï¿ª·¢ÈËÔ±¡£µ«ÊÇÒ»µ©ÎÒÃÇÈ¥ÉîÈëһЩϸ½Ú¾Í»á·¢ÏÖ£¬ÔÚÄ³Ð©ÖØÒªµÄÉè¼ÆºÍʵÏÖÉÏ£¬BorgËÆºõÓÐןÍKubernetes½ØÈ»²»Í¬µÄÈÏʶ£º±ÈÈçÍêÈ«Ïà·´µÄ×ÊÔ´»ã±¨·½Ïò£¬¸´ÔӶȸù±¾²»ÔÚÒ»¸öˮƽÉϵÄMasterʵÏÖ£¨¼¯ÈºVSµ¥µã£©£¬¶Ôbatch
jobµÄÖ§³Ö£¨KubernetesĿǰ²»Ö§³Öbatch job£©£¬¶ÔÓÚÈÎÎñÓÅÏȼ¶ºÍ×ÊÔ´ÇÀÕ¼µÄ¿´·¨µÈµÈ¡£
ÕâЩ±¾À´¿ÉÒÔÕÕ°áµÄ¶«Î÷£¬ÎªÊ²Ã´ÔÚKubernetesÓÖ±»ÖØÐÂÉè¼ÆÁËÒ»±éÄØ£¿ÔÚ±¾Îĵĵڶþ²¿·Ö£¬ÎÒÃǽ«Ò»²½²½´øÁì¶ÁÕßÁìÎòÔì³ÉÕâЩ²îÒìµÄÔÒò£¬¼´£º×ÊÔ´»ØÊÕºÍÀûÓÃÂÊÓÅ»¯¡£¾´Çë¹Ø×¢¡£
|