KubernetesµÄÌØµã
½üÄêÀ´DockerÈÝÆ÷×÷ΪһÖÖÇáÁ¿¼¶ÐéÄ⻯¼¼Êõ¸ïÐÂÁËÕû¸öITÁìÓòÈí¼þ¿ª·¢²¿ÊðÁ÷³Ì£¬ÈçºÎ¸ßЧ×Ô¶¯¹ÜÀíÈÝÆ÷ºÍÏà¹ØµÄ¼ÆËã¡¢´æ´¢µÈ×ÊÔ´£¬½«ÈÝÆ÷¼¼ÊõÕæÕýÂ䵨ÉÏÏߣ¬ÔòÐèÒªÒ»Ì×Ç¿´óÈÝÆ÷±àÅÅ·þÎñ£¬µ±Ç°´óºì´ó×ϵÄKubernetesÒѾ±»¹«ÈÏΪÕâ¸öÁìÓòµÄÁìµ¼Õß¡£Google»ùÓÚÄÚ²¿BorgÊ®¶àÄê´ó¹æÄ£¼¯Èº¹ÜÀí¾ÑéÔÚ2014ÄêÇ××ÔÇãÐÄ´òÔìÁËKubernetesÕâ¸ö¿ªÔ´ÏîÄ¿£¬ÓûÒÐÖ®ÓëAWSÔÚÔÆ¼ÆËã2.0ʱ´úÒ»Õù¸ßÏ£¬¼´±ãÈç´Ë£¬KubernetesµÄ¶¨Î»Ö÷ÒªÊÇÃæÏò˽ÓÐÔÆÊг¡£¬Ëü×îµäÐ͵IJ¿ÊðģʽÊÇÔÚGCE»òAWSƽ̨ÉÏ»ùÓÚÔÆÖ÷»ú¡¢ÔÆÍøÂç¡¢ÔÆÓ²Å̼°¸ºÔؾùºâµÈ¼¼Êõ¸øÓû§µ¥¶À²¿ÊðÒ»ÕûÌ×KubernetesÈÝÆ÷¹ÜÀí¼¯Èº£¬Æä±¾ÖÊÉÏÊÇÂôµÄIAAS·þÎñ£¬Kubernetes¼¯Èº»¹ÊÇÐèÒª¿¿Óû§×Ô¼ºÎ¬»¤£¬´ó¼ÒÖªµÀKubernetesËäÈ»¹¦ÄÜÇ¿´óµ«Ê¹ÓᢹÜÀí¡¢ÔËάÃż÷Ò²¸ß£¬³öÎÊÌâÁË´ó¶àÊýÓû§»áÊøÊÖÎ޲ߡ£
Õ⼸Äê¹úÄÚÈÝÆ÷ÔÆÁìÓòÒ²ÊÇȺÐÛ¸î¾Ý£¬µ«¶àÊý»¹ÊÇÒÔ˽ÓÐÔÆÎªÖ÷£¬Ìṩ¹«ÓÐÔÆÈÝÆ÷·þÎñµÄÈ´ºÜÉÙ£¬Ö÷ÒªÊǹ«ÓÐÔÆÒª¿¼ÂǵÄÎÊÌâ¶à¡¢ÌôÕ½´ó¡£ËäÈ»Èç´Ë£¬ÍøÒ×ÔÆµÄ»¹ÊÇÌṩÁ˹«ÓÐÔÆÄ£Ê½µÄÈÝÆ÷·þÎñ¡£ÍøÒ×ÔÆ´Ó2015Ä꿪ʼ×öÈÝÆ÷·þÎñʱҲ±»KubernetesÇ¿´óµÄ¹¦ÄÜ¡¢²å¼þ»¯Ë¼ÏëºÍ±³ºóÇ¿´óµÄ¼¼ÊõʵÁ¦ËµÎüÒý£¬ÖÁ½ñÒѾ¸úËæKubernetesÒ»Æð×ß¹ýÁ½Äê¶à£¬»ýÀÛÁ˲»ÉÙ¾Ñé¡£ÒòΪÎÒÃÇÌØ±ðÏ£ÍûÒÔ¹«ÓÐÔÆµÄ·½Ê½ÌṩһÖÖ¸üÒ×ÓÃÈÝÆ÷·þÎñ£¬ÈκζÔÈÝÆ÷¸ÐÐËȤµÄÓû§¶¼ÄÜ¿ìËÙÉÏÊÖ£¬Îª´ËÒ²Óöµ½Á˺ܶà˽ÓÐÔÆÏ²»»á³öÏÖµÄÎÊÌâ¡£
Áоټ¸¸öKubernetesÔÚ¹«ÓÐÔÆÈÝÆ÷³¡¾°ÏµÄÐèÒªÌØ±ð½â¾öµÄ¹Ø¼üÎÊÌâ¡£Ò»ÊÇKubernetesÀïûÓÐÓû§£¨×â»§£©µÄ¸ÅÄֻÓÐÒ»¸öºÜÈõµÄÃüÃû¿Õ¼äÀ´×öÂß¼¸ôÀë¡£¶þÊÇKubernetesºÍDockerµÄ°²È«ÎÊÌâºÜÍ»³ö£¬API·ÃÎÊ¿ØÖƽÏÈõÇÒûÓÐÓû§Á÷¿Ø»úÖÆ£¬Ò»Ð©×ÊÔ´È«¾Ö¿É¼û¡£¶øDockerÈÝÆ÷ÓëËÞÖ÷»ú¹²ÏíÄں˵ÄÇáÁ¿¼¶¸ôÀë´Ó¸ù±¾ÉÏû·¨×öµ½³¹µ×°²È«¡£ÈýÊÇKubernetes¼¯ÈºËùÐèÒªIAAS×ÊÔ´£¨ÈçNode£¬PV£©¶¼ÒªÔ¤ÏÈ×¼±¸×ã¹»£¬·ñÔòÈÝÆ÷ËæÊ±»á´´½¨Ê§°Ü£¬¹«ÓÐÔÆÕâÑùµÄ»°»áÔì³ÉÑÏÖØµÄ×ÊÔ´ÀË·Ñ£¬²úÉú¾Þ´óµÄ³É±¾ÎÊÌâ¡£ËÄÊÇKubernetesµ¥¸ö¼¯ÈºÄÜÖ§³ÅµÄ½Úµã×ÜÊýÓÐÏÞ£¬×î´ó°²È«¹æÄ£Ö»ÓÐ5ǧ¸öNode£¬¹«ÓÐÔÆÏÂÀ©Õ¹ÐÔ½«»áÓÐÎÊÌâ¡£
ÍøÒ×ÔÆÈÝÆ÷ÈçºÎ½â¾öKubernetesÔÚ¹«ÓÐÔÆÉϵÄÎÊÌâ
ÏÈ¿´ÏÂÍøÒ×ÔÆÈÝÆ÷·þÎñµÄ¼Ü¹¹Í¼£¨Èçͼ1£©£¬ÕâÀïµÄKubernetes´¦ÓڵײãIAAS·þÎñºÍÉϲãÈÝÆ÷ƽ̨µÄÖм䣬ÒòΪÎÒÃǵÄÈÝÆ÷·þÎñ²»½ö½öÌṩKubernetes±¾ÉíÈÝÆ÷±àÅŹÜÀí¹¦ÄÜ£¬¸üÊÇΪÌṩһÕûÌ×רҵµÄÈÝÆ÷½â¾ö·½°¸£¬»¹°üÀ¨ÈÝÆ÷¾µÏñ·þÎñ£¬¸ºÔؾùºâ·þÎñ£¬Í¨¹ýʹÓÃDevOps
¹¤¾ßÁ´¸ßЧ¹ÜÀí΢·þÎñ¼Ü¹¹¡£¿¼Âǵ½Kubernetes¸ÅÄî½Ï¶à¡¢ÆÕͨÓû§Ê¹Óø´ÔÓ£¬Ò²ÎªÁ˱ãÓÚÕûºÏÆäËûÅäÌ×·þÎñ£¬ÎÒÃDz¢Ã»ÓÐÖ±½Ó±©Â¶KubernetesµÄAPIºÍËùÓиÅÄî¸øÆÕͨÓû§¡£

¹«ÓÐÔÆ×â»§¸ÅÄî
ÍøÒ×ÔÆÈÝÆ÷·þÎñ»ùÓÚKubernetesÒÑÓеÄNamespaceµÄÂß¼¸ôÀëÌØÐÔ£¬ÐéÄâ³öÒ»¸ö×â»§µÄ¸ÅÄ²¢ÓëNamespace½øÐÐÓÀ¾Ã°ó¶¨£ºÒ»¸öNamespaceÖ»ÄÜÊôÓÚÒ»¸ö×â»§£¬Ò»¸ö×â»§Ôò¿ÉÒÔÓжà¸öNamespace¡£ÕâÑùKubernetesÀﲻͬ×â»§Ö®¼äµÄPod¡¢Service¡¢Secret¾ÍÄÜ×ÔÈ»·Ö¸î£¬¶øÇÒ¿ÉÒÔÖ±½ÓÔÚÔÉúµÄNamespace/Resouce¼¶±ðµÄÈÏÖ¤ÊÚȨÉϽøÐÐ×â»§¼¶±ðµÄ°²È«¸ÄÔì¡£

¶à×â»§°²È«ÎÊÌâ
¹ØÓÚKubernetesµÄAPIµÄ°²È«·ÃÎÊ¿ØÖÆ£¬¾¡¹ÜÍøÒ×ÔÆÈÝÆ÷ûÓÐÖ±½Ó±©Â¶KubernetesµÄAPI¸øÓû§£¬µ«Óû§ÈÝÆ÷ËùÔÚµÄNode¶ËÒ²¶¼Òª·ÃÎÊAPI£¬Node±¾ÖʾÍÊÇÓû§µÄ×ÊÔ´¡£ÎÒÃÇÔÚ×îÔç»ùÓÚKubernetes
1.0¿ª·¢µÄʱºò¾ÍרÃÅÔö¼ÓÁËÒ»Ì×ÇáÁ¿¼¶À©Õ¹ÊÚȨ¿ØÖƲå¼þ£º»ùÓÚ¹æÔò·ÃÎÊ¿ØÖÆ£¬±ÈÈçÅäÖø÷×â»§Ö»ÄÜGetºÍWatchÊôÓÚ×Ô¼ºNamespaceϵÄPod×ÊÔ´£¬½â¾ö¶ÔKubernetes×ÊÔ´APIȨÏÞ¿ØÖÆÁ£¶È²»¹»¾«È·ÇÒÎÞ·¨¶¯Ì¬Ôö¼õ×â»§µÄÎÊÌâ¡£ÖµµÃÐÀοµÄÊǼ¸¸öÔÂǰ¹Ù·½·¢²¼µÄ1.
6ÐÂÍÆ³öRBAC£¨»ùÓÚ½ÇÉ«·ÃÎÊ¿ØÖÆ£©¹¦ÄÜ£¬Ê¹µÃÊÚȨ¹ÜÀí»úÖÆµÃÒÔÔöÇ¿£¬µ«·þÎñ¶Ë¶ÔÓû§Node¶Ë·ÃÎʵÄÒì³£Á÷Á¿¿ØÖƵÄȱ·¦ÒÀÈ»ÊÇÒ»¸öÒþ»¼£¬Îª´Ë£¬ÎÒÃÇÒ²ÔÚapiserver¶ËÔö¼ÓÇëÇóÊýÀ´Ô´·ÖÀàͳ¼ÆºÍ¿ØÖÆÄ£¿é£¬±ÜÃâÓв»Á¼Óû§´ÓÈÝÆ÷ÀïÌÓÒݵ½NodeÉϽøÐжñÒâ¹¥»÷¡£
ÔÉúµÄkube-proxyÌṩµÄÄÚ²¿¸ºÔرØÐëÒªList&Watch¼¯ÈºËùÓÐServiceºÍEndpoint£¬µ¼Ö¾ÍËãÔÚ¶à×â»§³¡¾°ÏÂServiceºÍEndpointҲҪȫ²¿±©Â¶£¬Í¬Ê±µ¼ÖÂiptables¹æÔòÅòÕÍת·¢Ð§Âʼ«µÍ£»Îª´ËÎÒÃǶÔkube-proxyÒ²×öÁËÓÅ»¯¸ÄÔ죺ÿ¸ö×â»§µÄNodeÉÏÖ»»áList&Watch×Ô¼ºµÄÏà¹ØNamespaceÏÂ×ÊÔ´¼´¿É£¬ÕâÑù¼È½â¾öÁ˰²È«ÎÊÌâÓÖÓÅ»¯ÐÔÄÜ£¬Ò»¼ýË«µñ¡£
ÖÁÓÚDockerµÄ¸ôÀë²»³¹µ×µÄÎÊÌ⣬ÎÒÃÇÔòÑ¡ÔñÁË×î³¹µ×µÄ×ö·¨£ºÔÚÈÝÆ÷Íâ¼ÓÁËÒ»²ãÓû§¿´²»¼ûµÄÐéÄâ»ú£¬Í¨¹ýIAAS²ãÐéÄâ»úµÄOS
Äں˸ôÀë±£Ö¤ÈÝÆ÷µÄ°²È«¡£
ÈÝÆ÷µÄIAAS×ÊÔ´¹ÜÀí
ÈÝÆ÷ÔÆ×÷ΪÐÂÒ»´úµÄ»ù´¡ÉèÊ©ÔÆ·þÎñ£¬×ÊÔ´¹ÜÀí±ØÈ»Ò²ÊǷdz£¹Ø¼üµÄ¡£Ë½ÓÐÔÆ³¡¾°ÏÂÕû¸ö¼¯Èº×ÊÔ´¶¼ÊôÓÚÆóÒµ×Ô¼º£¬Ô¤ÁôµÄËùÓÐ×ÊÔ´¶¼¿ÉÒÔÒ»ÆðÖ±½ÓʹÓá¢ÊÍ·Å¡¢ÖØÓã»¶ø¹«ÓÐÔÆ¶à×⻧ϵÄËùÓÐ×ÊÔ´Ê×ÏÈÊÇÒª½øÐÐ×â»§»®·ÖµÄ£¬Ò»µ©¼ÓÈëkubernetes¼¯Èº£¬Node¡¢PV¡¢NetworkµÄÊôÖ÷×â»§±ãÒÑÈ·¶¨²»±ä£¬Èç¹û¸øÃ¿¸ö×â»§¶¼Ô¤Áô×ÊÔ´£¬º£Á¿×â»§ÀÛ¼ÆÆðÀ´¾Í·Ç³£¿Ö²ÀÁË£¬Ã»·¨½ÓÊÜ¡£µ±È»£¬¿ÉÒÔÈù«ÓÐÔÆÓû§ÔÚ´´½¨ÈÝÆ÷ǰ£¬Ìáǰ°ÑËùÓÐÐèÒªµÄ×ÊÔ´¶¼×¼±¸ºÃ£¬µ«ÕâÑùÓÖ»áÈÃÓû§ÓÃÆðÀ´¸ü¸´ÔÓ£¬ÓëÈÝÆ÷ƽ̨Ò×ÓÃÐԵijõÖÔ²»·û£¬ÎÒÃǸüÏ£ÍûÄܰïÓû§°Ñ¾«Á¦»¨ÔÚÒµÎñ±¾Éí¡£
ÓÚÊÇÎÒÃÇÐèÒª¸ÄÔìkubernetes£¬ÒÔÖ§³Ö°´Ð趯̬ÉêÇë¡¢ÊÍ·Å×ÊÔ´¡£¼ÈȻҪ°´ÐèʵʱÉêÇë×ÊÔ´£¬ÄǾÍÏÈÀíÏÂÈÝÆ÷µÄ´´½¨Á÷³Ì£¬¼òµ¥Æð¼û£¬ÎÒÃÇÖ±½Ó´´½¨PodÀ´ËµÃ÷Õâ¸ö¹ý³Ì£¬Èçͼ3Ëùʾ¡£

Pod´´½¨³öÀ´ºó£¬Ê×ÏÈ¿ØÖÆÆ÷»á¼ì²éÊÇ·ñÓÐPV£¨ÍøÒ×ÔÆÈÝÆ÷Ϊ֧³ÖÍøÂç¸ôÀ뻹Ôö¼Ó×â»§Network×ÊÔ´£©£¬PV×ÊÔ´ÊÇ·ñÆ¥Å䣬²»Æ¥ÅäÔòµÈ´ý¡£Èç¹ûPod²»ÐèÒªPV»òÕßPVÆ¥Åäºóµ÷¶ÈÆ÷²ÅÄÜÕý³£µ÷¶ÈPod£¬È»ºóscheduler´Ó¼¯ÈºËùÓÐReadyµÄ
NodeÁбíÕÒºÏÊÊNode°ó¶¨µ½PodÉÏ£¬Ã»ÓÐÔòµ÷¶Èʧ°Ü£¬²¢´Ó1Ã뿪ʼÒÔ2µÄÖ¸Êý±¶»ØÍË£¨backoff£©µÈ´ý²¢ÖØÐ¼ÓÈëµ÷¶È¶ÓÁУ¬Ö±µ½µ÷¶È³É¹¦¡£×îºóÔÚµ÷¶ÈµÄNodeµÄkubeletÉÏÀ¾µÏñ²¢°ÑÈÝÆ÷´´½¨²¢ÔËÐÐÆðÀ´¡£
ͨ¹ý·ÖÎöÉÏÊöÁ÷³Ì¿ÉÒÔ·¢ÏÖ£¬¿ÉÒÔÔÚ¿ØÖÆÆ÷ÉÏÆ¥ÅäPV»òNetworkʱʵʱ´´½¨×ÊÔ´£¬È»ºóÔÚµ÷¶ÈÆ÷ÒòȱÉÙNode¶øµ÷¶Èʧ°ÜʱÔÙʵʱ´´½¨Node£¨ÐéÄâ»úVM£©£¬ÔÙµÈÏ´Îʧ°ÜbackoffÖØÐµ÷¶È¡£µ«ÊÇ×Ðϸ·ÖÎöºó»á·¢ÏÖ»¹ÓкܶàÎÊÌ⣬Ê×ÏÈÊÇIAASÖмä²ãÌṩµÄ´´½¨×ÊÔ´½Ó¿Ú¶¼ÊÇÒì²½µÄ£¬ÂÖѯµÈ´ýЧÂÊ»áºÜ¶à£¬¶øÇÒPV£¬Network£¬Node¶¼´®ÐÐÉêÇë»á·Ç³£Âý£¬ÈÝÆ÷±¾À´¾ÍÊÇÃë¼¶Æô¶¯£¬²»Äܵ½ÔÆ·þÎñÉϾͱä³É·ÖÖÓ¼¶±ð£»Æä´ÎNode´Ó´´½¨VM£¬³õʼ»¯°²×°Docker¡¢kubelet¡¢kube-proxyµ½Æô¶¯½ø³Ì²¢×¢²áµ½KubernetesÉÏʱ¼äÂþ³¤£¬µ÷¶ÈÆ÷backoffÖØÐµ÷¶È¶à´ÎÒ²²»Ò»¶¨¾ÍÐ÷£¬×îºó£¬»ùÓÚKubernetesµÄÐÞ¸ÄÒª¿¼ÂÇÉÙÇÖÈ룬KubernetesÉçÇø¼«¶È»îÔ¾Ò»Ö±±£³Ö3¸öÔ·¢²¼Ò»¸ö´ó°æ±¾µÄ½Ú×࣬Ҫ¸úÉÏÉçÇø·¢Õ¹¿ÉÄÜÐèÒª²»¶ÏÉý¼¶ÏßÉϰ汾¡£
×îÖÕ£¬ÎÒÃÇͨ¹ýÔö¼Ó¶ÀÁ¢µÄResourceController£¬½èÖúwatch»úÖÆ²ÉÓÃÈ«Òì²½·Ç×èÈû¡¢È«Ê¼þÇý¶¯Ä£Ê½¡£×ÊÔ´²»×ã¾Í·¢Æð×ÊÔ´Òì²½ÉêÇ룬²¢½Ó×Å´¦ÀíºóÃæÁ÷³Ì£¬¶ø×ÊÔ´Ò»µ©¾ÍÐ÷Á¢Âí´¥·¢ÔÙµ÷¶È£¬ÉêÇëNodeʱÖмä²ãÒ²Ìáǰ׼±¸ÐéÄâ»ú×ÊÔ´³Ø£¬²¢½«Node³õʼ»¯¡¢°²×°²½ÖèÔ¤ÏÈÔÚÐéÄâ»ú¾µÏñÖÐ×¼±¸ºÃ¡£ÓÚÊÇ£¬ÎÒÃÇÏêϸµÄ´´½¨Á÷³ÌÑݱäΪͼ4Ëùʾ¡££¨×¢£º×îÐÂKubernetes
ÒѾͨ¹ýStorageClassÀàÐÍÖ§³ÖPV dynamic provisioning£©

ÓëÔÉúµÄKubernetesÏà±È£¬ÎÒÃÇÔö¼ÓÁËÒ»¸ö¶ÀÁ¢µÄ ResourceController¹ÜÀíËùÓÐIAAS×ÊÔ´Ïà¹ØµÄÊÂÇ飬¾ßÌåµÄPod´´½¨²½ÖèÈçÏ£º
1¡¢ÉϲãclientÇëÇóapiserver´´½¨Ò»¸öPod¡£
2¡¢ResourceController watchµ½ÓÐÐÂÔöPod£¬¼ì²éPVºÍNetworkÊÇ·ñÒѾ´´½¨£»
ͬʱ£¬ÁíÒ»±ßµÄschedulerÒ²·¢ÏÖÓÐÐÂPodÉÐδµ÷¶È£¬Ò²³¢ÊÔ¶ÔPod½øÐе÷¶È¡£
3¡¢ÒòΪ×ÊÔ´¶¼Ã»ÓÐÌáǰ׼±¸£¬×î³õResourceController¼ì²éʱ·¢ÏÖûÓÐÓëPodÆ¥ÅäµÄPVºÍNetwork£¬»áÏòIAASÖмä²ãÇëÇó´´½¨ÔÆÅ̺ÍÍøÂç×ÊÔ´£»
scheduler ÔòÒ²ÒòΪÕÒ²»µ½¿Éµ÷¶ÈµÄNodeҲͬʱÏòIAASÖмä²ãÇëÇó´´½¨¶ÔÓ¦¹æ¸ñµÄVM×ÊÔ´£¨Node£©£¬ÕâʱPodÒ²²»ÔÙÖØÈëµ÷¶È¶ÓÁУ¬ºóÃæÒ»ÇÐ×¼±¸¾ÍÐ÷²Å»áÖØµ÷¶È¡£
4¡¢ÒòΪIAASÖмä²ã´´½¨×ÊÔ´Ïà¶Ô½ÏÂý£¬Ò²Ö»ÌṩÒì²½½Ó¿Ú£¬´ýµ×²ã×ÊÔ´×¼±¸Íê±Ï£¬±ãÁ¢¼´Í¨¹ýapiserver×¢²áPV¡¢Network¡¢Node×ÊÔ´
5~6¡¢ResourceControllerµ±·¢ÏÖPVºÍNetwork¶¼Âú×ãÁË£¬¾Í½«ËûÃÇÓëPod°ó¶¨£»µ±·¢ÏÖPodÉêÇëµÄNode×¢²áÉÏÀ´£¬ÇÒPVºÍNetwork¾ù°ó¶¨£¬»á°ÑPodÉèÖÃΪResourceReady¾ÍÐ÷״̬
7¡¢SchedulerÔÙ´Îwatchµ½Pod´¦ÓÚResourceReady״̬£¬ÔòÖØÐ´¥·¢µ÷¶È¹ý³Ì£¬
8¡¢Podµ÷¶È³É¹¦Óëж¯Ì¬´´½¨Node½øÐаó¶¨
9~10¡¢¶ÔÓ¦NodeµÄkubelet watchµ½Ðµ÷¶ÈµÄPod»¹Ã»ÓÐÆô¶¯£¬Ôò»áÏÈÀÈ¡¾µÏñÔÙÆô¶¯ÈÝÆ÷¡£
¼¯Èº×î´ó¹æÄ£ÎÊÌâ
´ÓÕýʽ·¢²¼1.0°æ±¾ÖÁ½ñ×îеÄ1.7£¬Kubernetes¹²¾ÀúÁË2´Î´ó¹æÄ£µÄÐÔÄÜÓÅ»¯£¬´Ó1.0µÄ200¸önodeÖ÷Ҫͨ¹ýÔö¼Óapiserver
cacheÌáÉýµ½1000¸önode£¬ÔÙµ½1.6ͨ¹ýÉý¼¶etcdv3ºÍjson¸Äprotobuf×îÖÕÌáÉýµ½5000
node¡£µ«Êǹٷ½³ÆºóÐø²»»áÔÙ¿¼ÂǼÌÐøÓÅ»¯µ¥¼¯Èº¹æÄ£ÁË£¬ÒÑÓеļ¯ÈºÁª°î¹¦ÄÜÓÖÌ«¹ý¼òª¡£Èç¹û¹«ÓÐÔÆ³¡¾°ÏÂËæ×ÅÒÑÓÐÓû§¹æÄ£²»¶ÏÔö´ó£¬Ò»µ©¿ì½Ó½ü¼¯Èº×î´ó¹æÄ£Ê±£¬¾ÍÖ»Äܽ«ÆäÖÐһЩ´óÓû§Ò»ÅúÅúÇ¨ÒÆ³öÈ¥À´ÌÚ¿Õ¼ä¸øÊ£ÓàÓû§¡£
ÓÚÊÇÎÒÃÇ×Ô¼ºÔÚÉçÇø°æ±¾»ù´¡ÉÏÓÖ×öÁË´óÁ¿¶¨ÖÆ»¯µÄÐÔÄÜÓÅ»¯£¬Ä¿Ç°µ¥¼¯ÈºÐÔÄܲâÊÔ×î´ó°²È«¹æÄ£ÒѾ³¬¹ý3Íò£¬ÑéÊÕ²âÊÔ°üÀ¨¼¯Èº¸ßˮλÏ£¬´ó²¢·¢´´½¨ËÙ¶ÈdeploymentºÍ¿ìËÙÖØÆômaster¶Ë·þÎñºÍËùÓÐnode¶ËkubeletµÈÔÚÄڵĶàÖÖ¼«¶ËÒì³£²Ù×÷£¬±£Ö¤´´½¨Ê±¼ä¾ùÖµ<5s£¬99Öµ<15s£¬¼¯ÈºÖÐÐĹܿطþÎñ×î²îÔÚ3·ÖÖÓÄÚ¿ìËÙ»Ö¸´Õý³£¡£
¾ßÌåµÄÓÅ»¯´ëÊ©°üÀ¨£º
1¡¢ schedulerÓÅ»¯
¸ù¾Ý×â»§Ö®¼ä×ÊÔ´ÍêÈ«¸ôÀ뻥²¹Ó°ÏìµÄÌØÐÔ£¬ÎÒÃǽ«ÔÓеĴ®Ðе÷¶ÈÁ÷³Ì£¬¸ÄÔìΪ×â»§¼äÍêÈ«²¢Ðеĵ÷¶Èģʽ£¬ÔÙÅäºÏг̳ØÀ´Õù¶á¿É²¢Ðеĵ÷¶ÈÈÎÎñ¡£ÔÚµ÷¶ÈËã·¨ÉÏ£¬»¹²ÉÓÃÔ¤ÏÈÅųý×ÊÔ´²»×ãµÄnode¡¢ÓÅ»¯¹ýÂ˺¯Êý˳ÐòµÈ²ßÂÔ½øÐоֲ¿ÓÅ»¯¡£
2¡¢ ControllerÓÅ»¯
ÊìϤKubernetesµÄÈ˶¼ÖªµÀ£¬KubernetesÓиöºËÐÄÌØµã¾ÍÊÇʼþÇý¶¯£¬ÊµÊ±ÐԺܺ㬵«ÊÇÓиöSyncʼþÈ´¸ÉÈÅÁËFIFOµÄ˳Ðò£¬ÎÒÃÇͨ¹ý½«Add¡¢Update¡¢Delete¡¢SyncʼþÅÅÐò²¢Ôö¼Ó¶àÓÅÏȼ¶¶ÓÁеķ½Ê½½â¾öÕâÖÖÒì³£¸ÉÈÅ¡£
Ôö¼ÓSecret±¾µØ»º´æ
3¡¢ apiserverÓÅ»¯
apiserverµÄºËÐÄÊÇÌṩÀàËÆCRUDµÄrestful½Ó¿Ú£¬ÓÅ»¯·½ÏòÎÞÍâºõ½µµÍÏìӦʱ¼ä£¬¼õÉÙcpu¡¢ÄÚ´æÏûºÄÒÔÌá¸ßÍÌÍÂÁ¿£¬ÎÒÃÇ×îÖ÷ÒªµÄÒ»¸öÓÅ»¯ÊÇÔö¼ÓÒÔ×â»§IDΪ¹ýÂËÌõ¼þµÄ²éѯË÷Òý£¬ÕâÑù¾ÍÄÜʵÏÖÔÚ×â»§ÄÚ¿çNamespace¾ÛºÏ²éѯµÄЧ¹û¡£ÁíÍâapiserverµÄ¿Í»§¶ËÔÉúµÄÁ÷¿Ø²ßÂÔÌ«±©Á¦£¬¿Í»§¶ËĬÈÏÔÚÁ÷¿Ø±»ÏÞÖÆºó»á·´¸´ÖØÊÔ£¬½øÒ»²½¼Ó¾çapiserverµÄѹÁ¦£¬ÎÒÃÇÔö¼ÓÁËÒ»ÖÖ»ùÓÚ·´À¡µÄÖÇÄÜÖØÊԵIJßÂÔĨƽÕâÖÖÍ»·¢Á÷Á¿¡£
4¡¢Node¶ËÓÅ»¯
kube-proxy±¾À´ÐèÒª¿ØÖÆÕû¸ö¼¯Èº¸ºÔØ×ª·¢µÄ£¬ApiserverÓÐÁË×â»§²éѯË÷Òýºó£¬ÎÒÃǾÍÄÜÖ»watch×Ô¼º×â»§ÄÚµÄService/Endpoint£¬¼±¾çËõСiptables¹æÔòÊýÁ¿£¬Ìá¸ß²éÕÒת·¢Ð§ÂÊ¡£¶øÇÒÎÒÃÇ»¹¾«¼òkubeletºÍkube-proxyÄÚ´æÕ¼ÓúÍÁ¬½ÓÊý¡£
ÍøÒ×ÔÆÈÝÆ÷·þÎñµÄÆäËûʵ¼ù¼°×ܽá
ÈÝÆ÷µÄÍøÂçÊǷdz£¸´ÔÓÒ»¿é£¬ÈÝÆ÷ÔÆ·þÎñÖÁÉÙÒªÌṩÎȶ¨¡¢Áé»î¡¢¸ßЧµÄ¿çÖ÷»úÍøÂ磬ËäÈ»¿ªÔ´ÍøÂçʵÏֺܶ࣬µ«ÊÇËüÃÇҪô²»Ö§³Ö¶à×â»§¡¢ÒªÃ´ÐÔÄܲ»ºÃ£¬ÇÒÖ±½ÓÄÃûÓо¹ý´ó¹æÄ£ÏßÉÏ¿¼ÑéµÄ¿ªÔ´Èí¼þÎÊÌâ×Ü»áºÜ¶à¡£ÐÒÔ˵ÄÊ±ÍøÒ×ÔÆÓÐ×Ô¼º×¨ÒµµÄIAASÔÆÍøÂçÍŶӣ¬ËûÃÇÄÜÌṩרҵ¼¶µÄVPCÍøÂç½â¾ö·½°¸£¬ÌìÉú¾ÍÖ§³Ö¶à×â»§¡¢°²È«²ßÂÔ¿ØÖƺ͸ßÐÔÄÜÀ©Õ¹£¬ÒѾ×öµ½ÈÝÆ÷ÓëÐéÄâÖ÷»úµÄÍøÂçÊÇÍêÈ«»¥Í¨ÇÒµØÎ»¶ÔµÈµÄ¡£
ÍøÒ×ÔÆÈÝÆ÷·þÎñ»¹ÔÚKubernetesÉçÇø°æ±¾»ù´¡ÉϽáºÏ²úÆ·ÐèÇóÐÂÔöÁ˺ܶ๦ÄÜ£¬°üÀ¨Ö§³ÖÌØÓеÄÓÐ״̬ÈÝÆ÷£¬¼°Node¹ÊÕÏʱÈÝÆ÷ϵͳĿ¼ҲÄÜ×Ô¶¯Ç¨ÒÆÒÔ±£³ÖÊý¾Ý²»±ä£¬¶à¸±±¾Pod¿É°´NodeµÄAvailableZone·Ö²¼Ç¿Öƾùºâµ÷¶È£¨ÉçÇøÖ»¾¡Á¦¾ùºâ£©¡¢ÈÝÆ÷´¹Ö±À©ÈÝ¡¢ÓÐ״̬ÈÝÆ÷¶¯Ì¬¹ÒÐ¶ÔØÍâÍøIPµÈ¡£
Ïà±ÈÈÝÆ÷µÄÇáÁ¿¼¶ÐéÄ⻯£¬ÐéÄâ»úËäÈ»°²È«¼¶±ð¸ü¸ß£¬µ«ÊÇÔÚcpu¡¢´ÅÅÌ¡¢ÍøÂçµÈ·½Ãæ¶¼´æÔÚÒ»¶¨µÄÐÔÄÜËðºÄ£¬¶øÓÐЩҵÎñÈ´ÓÖ¶ÔÐÔÄÜÒªÇó·Ç³£¸ß¡£Õë¶ÔÕâÐ©ÌØÊâÐèÇó£¬×î½üÎÒÃÇÒ²ÔÚ¿ª·¢»ùÓÚKubernetesµÄ¸ßÐÔÄÜÂã»úÈÝÆ÷£¬ÈƹýÐéÄâ»ú½«ÍøÂç¡¢´æ´¢µÈÐéÄ⻯¼¼ÊõÖ±½Ó¶Ô½Óµ½DockerÈÝÆ÷ÀÔÚ½áºÏSR-IOVÍøÂç¼¼Êõ¡¢ÍøÒ׸ßÐÔÄÜÔÆÅÌNBS£¨netease
block storage£©µÈ¼¼Êõ½«ÐéÄ⻯µÄÐÔÄÜËðºÄ½µµ½×îµÍ¡£
×îºó£¬·ÖÏíÒ»Ð©ÍøÒ×ÔÆÈÝÆ÷·þÎñÉÏÏß½üÁ½ÄêÀ´µÄÓöµ½µÄ±È½ÏµäÐ͵Ŀӡ£
1¡¢Apiserver×÷Ϊ¼¯ÈºhubÖÐÐı¾ÉíÊÇÎÞ״̬µÄ¿ÉˮƽÀ©Õ¹£¬µ«ÊǶàapiserver¶Áд»áÔÚApiserverÇл»Ê±¿ÉÄÜ»á³öÏÖдÈëµÄÊý¾Ý²»ÄÜÁ¢Âí¶Áµ½µÄÎÊÌ⣬ÔÒòÊÇetcdµÄraftÐÒé²»ÊÇËùÓнڵãǿһÖÂдµÄ¡£
2¡¢haproxyÁ¬½ÓµÄÎÊÌ⣬¶àApiserverǰÓÃhaproxy×ö¸ºÔؾùºâ£¬haproxyºÜÈÝÒ׳öÏÖ¿Í»§¶Ë¶Ë¿Ú²»¹»ÓúÍÁ¬½ÓÊý¹ý¶àµÄÎÊÌ⣬¿ÉÒÔͨ¹ýÀ©´ó¶Ë¿Ú·¶Î§¡¢Ôö¼ÓÔ´ipµØÖ·µÈ·½Ê½½â¾ö¶Ë¿ÚÎÊÌ⣬ͨ¹ýÔö¼Óclient/serviceµÄÐÄÌøÌ½»î½â¾öÒì³£Á¬½ÓGCµÄÎÊÌâ¡£
3¡¢Óû§¸²¸Ç¸üÐÂÒÑÓÐtagµÄ˽ÓÐÈÝÆ÷¾µÏñÎÊÌ⣬ǿÁÒ½¨Òé´ó¼Ò²»Òª¸²¸ÇÒÑÓÐtagµÄ¾µÏñ£¬Ò²²»ÒªÊ¹ÓÃlatestÕâÑùÄ£ºýµÄ¾µÏñ±êÇ©£¬·ñÔòRS¶àPod¸±±¾»òÕßͬһ¸öNodeÉÏͬ¾µÏñÈÝÆ÷ºÜÈÝÒ׳öÏÖ°æ±¾²»Ò»ÖµĹîÒìÎÊÌâ¡£
4¡¢ÓÐЩÈÝÆ÷СÎļþ·Ç³£¶à£¬ºÜÈÝÒ×°ÑinodeÓÃ¹â¶ø´ÅÅ̿ռäÈ´Ê£ÓàºÜ¶àµÄÎÊÌ⣬½¨Òé°ÑÕâÖÖÀàÐÍÓ¦Óõ÷¶Èµ½inodeÅäÖöàµÄnodeÉÏ£¬ÁíÍâÔÉúkubeletÒ²´æÔÚ²»»á¼ì²éinode¹ý¶à´¥·¢¾µÏñ»ØÊÕµÄÎÊÌâ¡£
5¡¢ÓÐЩPodɾ³ýʱÏú»Ù¹ýÂýµÄÎÊÌ⣬PodÖ§³Ögracefulɾ³ý£¬µ«ÊÇÈç¹ûÈÝÆ÷¾µÏñÆô¶¯ÃüÁîдµÃ²»ºÃ£¬¿ÉÄܻᵼÖÂÐźŶªÊ§²»¹âû·¨gracefulɾ³ý»¹»áµ¼ÖÂÑÓ³Ù30sµÄÎÊÌâ
×ÜÖ®£¬ÔÚ¹«ÓÐÔÆ³¡¾°Ï£¬Óû§À´Ô´¹ã·º£¬Ê¹ÓÃϰ¹ßǧ±äÍò»¯Ã»·¨¿ØÖÆ£¬ÎÒÃÇÒѾÅöµ½¹ýºÜ¶à´¿Ë½ÓÐÔÆ³¡¾°ÏºÜÄѳöÏÖµÄÎÊÌ⣬ÈçÓû§¾µÏñÅÜÆð²»À´£¬Pod¶àÈÝÆ÷¶Ë¿Ú³åÍ»£¬ÈÕÖ¾Ö±½ÓÊä³öµ½±ê×¼Êä³ö£¬»òÕßÈÕ־д̫¿ìûÓÐÇиÉõÖÁ°ÑÈÝÆ÷´ÅÅÌ100%дÂúµÈ£¬ÒòΪƪ·ùÓÐÏÞ£¬ËùÒÔÖ»ÄÜÌôÑ¡¼¸¸öÓдú±íÐÔµÄרÃÅ˵Ã÷¡£ÒòÎªÔÆÉÏÒª¿¼ÂǵÄÎÊÌâÌ«¶à£¬ÌرðÊÇÕâÖÖ»ù´¡ÉèÊ©·þÎñÀàµÄ£¬Ê¹Óó¡¾°Óַdz£Áé»î£¬ÏßÉϳöÏÖµÄһЩÎÊÌâ֮ǰÍêÈ«Ïë²»µ½£¬°üÀ¨ºÜ¶à»¹ÊÇÓû§×Ô¼ºÊ¹ÓõÄÎÊÌ⣬µ«ÎªÁËÒªÈÃÓû§ÓиüºÃµÄÌåÑ飬ҲֻÄܾ¡Á¦¶øÎª£¬ÓÅÏÈÑ¡ÔñһЩͨÓõÄÎÊÌâÈ¥½â¾ö¡£ |