È¥Äê8Ôµף¬°Ù·ÖµãÓëÔÆÖªÉùÁªºÏ·¢²¼ÁËGoogle¿ªÔ´µÄ¼¯Èº¹ÜÀíϵͳKubernetesµÄ¡°·¢Ðа桱¡ª¡ªSextant¡£ÔÚ°Ù·Öµã´ó¹æÄ£Kubernetes¼¯Èº¾¹ýËÄÎå¸öÔµÄÓ¦ÓÃʵ¼ùºó£¬µ½Ä¿Ç°ÎªÖ¹£¬¼¯ÈºÉÏÒѾ³ÐÔØÁ˰ٷֵãÍÆ¼öϵͳµÄ´ó²¿·ÖÒµÎñ×é¼þºÍ²¿·ÖµÄÔËά×é¼þ¡£ÄÇô£¬ÔÚʹÓùý³ÌÖлáÓöµ½ÄÄЩÎÊÌ⣿ÈçºÎ½â¾ö£¿±¾Æª½«Ï꾡×ܽá°Ù·ÖµãÔÚʵ¼ùÖеľÑé½Ìѵ£¬ÆÚÍûÄܹ»¸ü¶àµØ»ØÀ¡ÉçÇø¡£
´Ó0µ½1
ÔÚ´«Í³µÄ¼¯Èº¹ÜÀí·½·¨Ï£¬°Ù·Öµã·þÎñÆ÷ÀûÓÃÂʳ¤ÆÚ´¦ÓÚ20%ÒÔÏ¡£Í¨³£ÎªÁËÍê³Éij¸öÒµÎñÄ¿±ê£¬ÍŶӻáÉêÇë¸÷×ԵķþÎñÆ÷£¬È»ºó¹¤³ÌʦʹÓÃÌø°å»úµÇ½µ½ÕâЩ·þÎñÆ÷ÉÏÍê³É³ÌÐòµÄ²¿Êð¡£
ÕâÑùµÄ±×¶ËÊÇ£ºÊ×ÏÈ£¬ÕâЩ·þÎñÆ÷ÉϵĿÕÏÐ×ÊÔ´²¢²»»á¹±Ï׳öÀ´ÎªÆäËûÍŶÓËùʹÓã»Æä´Î£¬ÕâЩ·þÎñÆ÷ÔÚ½â¾öÒµÎñ¸ß·åÎÊÌâÖ®ºó£¬¸ºÔØÏ½µ£¬¶øÕâʱÍŶӲ¢²»Ï£Íû·þÎñÆ÷±»»ØÊÕ£¬ÒòΪ²»ÖªµÀÈçºÎ±¸·Ý·þÎñÆ÷Ö®ÉϵÄÊý¾Ý¡£
ÕâÑù£¬¼¯Èº·þÎñÆ÷ÀûÓÃÂÊÖð²½½µµÍ£¬ÕûÌ弯ȺµÄά»¤ºÍ¹ÜÀíÒ²±äµÃÒì³£À§ÄÑ£¬ÔÚ°Ù·ÖµãAI¼¼ÊõÔËÓÃÔö¶àµÄÇ÷ÊÆÏ£¬³£Óöµ½¼ÆËã×ÊÔ´²»×ã¶øµ¼ÖÂÒµÎñ½øÕ¹»ºÂýµÄÇé¿ö¡£
ÈçºÎ½â¾öÄØ£¿
ÎÒÃÇ×öÁ˺ܶೢÊÔ£¬×îÖÕ¾ö¶¨Ñ¡ÔñCoreOS¡¢Kubernetes£¨ÒÔϼò³ÆK8s£©¡¢CephÏà½áºÏµÄ¼¼Êõ·½°¸¡£
¶ÔÓÚKubernetesÔÚÉú²ú»·¾³ÖеÄÓ¦Ó㬰ٷֵãÊDZȽÏÔçµÄÒ»Åúʵ¼ùÕߣ¬´Ó¿ªÊ¼¹Ø×¢Kubernetes1.0£¬µ½½«1.2°æ±¾Êµ¼Ê²¿Êðµ½ÎÒÃǵÄÉú²ú»·¾³ÖУ¬Î§ÈÆKubernetes×öÁ˺ܶàÖܱ߹¤×÷£¬Ê¹KubernetesÄܹ»¸üºÃµØ·þÎñÓÚÒµÎñ³¡¾°¡£
ÏÞÓÚÆª·ùÔÒò£¬ÕâÀï²»Õ¹¿ª½éÉÜKubernetesµÄ»ù±¾ÔÀíºÍ¸ÅÄîÁË£¬¸ÐÐËȤµÄ¶ÁÕß¿ÉÒÔÔÚÎÒÃǵÄgithubsextantÏîÄ¿ÖУ¬ÕÒµ½Ï൱·á¸»µÄÎĵµ¡£
ΪÁË´ï³ÉÕâÑùµÄÄ¿±ê£¬ÎÒÃÇÒªÇ󿪷¢ÕßʹÓÃDocker½«×Ô¼ºµÄÓ¦ÓóÌÐòÍê³É·â×°£¬Öð²½½«ÊÖ¶¯µÄ¼¯Èº²¿Êð£¬Çл»µ½Ê¹ÓÃK8SµÄ¼¯ÈºÈÝÆ÷±àÅÅÖ®ÉÏ¡£ÈçÏÂͼËùʾ£¬ÐèÒªÔÚÍŶÓÏîÄ¿µÄgitlab
repoÖÐÔö¼ÓÏàÓ¦µÄDockerfileºÍ±àÅÅÎļþÄÚÈÝ£¬CI»·¾³»á×Ô¶¯½«Ó¦ÓÃÍê³É±àÒë->µ¥Ôª²âÊÔ->docker¾µÏñ´ò°ü->¾µÏñÌá½»µÄ¹¤×÷¡£·â×°ÔÚÈÝÆ÷ÖеÄÓ¦ÓÃʹÓÃCeph´æ´¢Êý¾Ý£¬²¢Í¨¹ýingress
LoadBalancer¶ÔÍⲿÌṩ·þÎñ¡£

¶ÔÓÚKubernetesÔÚÉú²ú»·¾³ÉϵIJ¿Êð£¬ÎÒÃÇÏ£Íû×î´óÏ޶ȵļò»¯K8S¼¯ÈºÎ¬»¤ÈËÔ±µÄ¹¤×÷¡£±ÈÈçÀ©ÈÝһ̨»úÆ÷¡¢Ï¼ÜάÐÞһ̨»úÆ÷µÈ£¬Ö»ÐèҪά»¤ÈËÔ±Ö±½ÓÍê³É¿ª»ú£¯¹Ø»úµÄ²Ù×÷¼´¿É¡£ÓÉÓÚK8SµÄµ÷¶È±àÅÅ£¬¿ÉÒÔÆÁ±ÎÕâÀà²Ù×÷¶ÔÓ¦ÓõÄÓ°Ïì¡£
Èý²½Íê³É¼¯Èº°²×°
Ê×ÏÈÒª½â¾öµÄÎÊÌ⣬¾ÍÊÇÈçºÎÄܹ»¸ßЧµÄ¡¢×Ô¶¯»¯µÄ½øÐÐ×é¼þµÄ²¿ÊðÒÔ¼õÉÙÊÖ¶¯²¿Êð¿ÉÄÜ´øÀ´µÄÎÊÌâ¡£
°Ù·Öµã¡¢ÔÆÖªÉùÔÚ°Ù¶È¿ÆÑ§¼ÒÍõÒæ´øÁìÏ£¬ºÏ×÷¿ª·¢ÁË»ùÓÚPXE×Ô¶¯»¯°²×°CoreOS+Kubernetes¼¯ÈºµÄ¿ªÔ´SextantÏîÄ¿£¬Ö»ÐèÒª¼òµ¥µÄÈý¸ö²½Öè¼´¿ÉÍê³É¼¯ÈºµÄ°²×°£º¹æ»®¼¯Èº->Æô¶¯bootstrapper->½Úµã¿ª»ú×Ô¶¯°²×°¡£

1.PXE²ÉÓÃPXEµÄ¼¼Êõ£¬´ÓÍøÂç°²×°CoreOSµÄ²Ù×÷ϵͳ£¬Íê³É½Úµã²Ù×÷ϵͳµÄ³õʼ»¯¡£
2.cluster-desc.yamlÊǼ¯ÈºµÄÃèÊöÎļþ£¬ÖîÈç²Ù×÷ϵͳÀàÐÍ¡¢FlanneldÍøÂçģʽ¡¢Kubernetes°æ±¾µÈ¶¼»áÅäÖÃÔÚÕâ¸öÎļþÖС£¶ÔÓÚÿ¸ö´ý°²×°µÄ½Úµã£¬ÐèÒª¸ù¾ÝMACµØÖ·ÅäÖÃÏàÓ¦µÄ½ÇÉ«£¬ÀýÈçKube-master£¬flanneld-masterµÈ¡£
3.BootstrapperÊÇSextantÏîÄ¿µÄºËÐÄ·þÎñ£¬ÔØÈëcluster-desc.yamlÅäÖÃÎļþ£¬²¢Ìṩweb·þÎñ£¬¸ù¾Ý½ÚµãµÄMACµØÖ·Éú³ÉÏàÓ¦µÄcloud-config.yamlÎļþ£¬´Ó¶ø°²×°²¢Æô¶¯kubernetesÏà¹Ø×é¼þ¡£
²Ù×÷˳Ðò£º
1.Step 0¼¯Èº¹æ»®
¹æ»®¼¯Èº£¬½«¼¯ÈºÐÅÏ¢ÃèÊöΪcluster-desc.yamlÅäÖÃÎļþ£¬ÀýÈç²Ù×÷ϵͳµÄÀàÐÍ¡¢etcd½ÚµãµÄÊýÁ¿¡¢flanneldÐÒéÀàÐÍ£¬ÄÄЩ½Úµã×÷ΪmasterµÈµÈ¡£
2.Step 1±àÒë¡¢ÔËÐÐbootstrapper
ͨ¹ýÉÏÒ»²½ÖèµÄcluster-desc.yamlÎļþ£¬±àÒëbootstrapperµÄdocker image²¢Æô¶¯£¬bootstrapper»áÌṩPXE¡¢DHCP¡¢DNSÒÔ¼°Docker
RegistryµÈ·þÎñ¡£
3.Step 2°²×°kubernetes½Úµã
½«·þÎñÆ÷½ÓÈ뼯Ⱥ£¬¿ª»ú²¢´ÓÍøÂçÒýµ¼°²×°£¬¼´¿É×Ô¶¯Íê³ÉCoreOSÒÔ¼°K8s×é¼þµÄ°²×°¹ý³Ì¡£
ÏÂÒ»²½¾ÍÊÇÓ¦ÓÃÇ¨ÒÆ£¬ÔÚÊÕ»ñÖÐÒ²³äÂúÁËÍ´¡£
ÊÕ»ñºÍÍ´
ÖÁ´Ë£¬ÎÒÃÇ×ÔÈÏΪ¿ÉÒÔ¿ªÊ¼Ïñϰ´ó´óÔªµ©Öú´Ê˵µÄÄÇÑù¡°ß£ÆðÐä×Ó¡±£¬½øÐÐÖð²½µÄÇ¨ÒÆ¹¤×÷ÁË¡£µ«¾¹ý¼òµ¥µÄÐÔÄܲâÊԺ󣬽á¹û²¢²»ÀíÏë¡£ÔËÐÐÔÚK8SÖ®ÉϵķþÎñÏìÓ¦ÑÓ³Ù£¬µ¼Ö³öÏÖÖÁÉÙ20%µÄÐÔÄÜËðºÄ¡£ÔڲȿÓÖ®ºó£¬ÎÒÃǶÔK8SµÄÍøÂçÓÐÁ˸ü¼ÓÉîÈëµÄÀí½â¡£
Ò»¡¢´òÔìkubernetes¸ßÐÔÄÜÍøÂç
ÊìϤDockerµÄ¶ÁÕß¿ÉÄÜ»áÁ˽⵽£¬DockerÈÝÆ÷ÓÐÈýÖÖÍøÂçģʽ£¬µ«ÎªÁË´ïµ½ÈÝÆ÷ÄÚµÄÍøÂç»·¾³¸ôÀ룬ͨ³£»áÑ¡ÔñʹÓÃNAT·½Ê½Íê³ÉÈÝÆ÷ÄÚµÄÍøÂç°üת»»ºÍת·¢¡£ÕâÑù£¬ÔÚͬһ̨Ö÷»úÉÏÆô¶¯µÄÈÝÆ÷»ò²»Í¬Ö÷»úÆô¶¯µÄÈÝÆ÷Ö®¼ä£¬³ýÁËÅäÖÃNAT¶Ë¿ÚµÄ4²ãµØÖ·¿É·ÃÎÊÍ⣬¶¼²»¿ÉÒÔÖ±½Ó»¥Ïà·ÃÎÊ¡£
KubernetesµÄ½â¾ö˼·ºÍBridgedģʽµÄÐéÄâ»úȺºÜÏñ¡ª¡ªÓÃÒ»¸öͨÓõÄIPµØÖ··ÖÅä·þÎñ£¬ÎªÔËÐÐÔÚ¸÷¸öhostÉϵÄcontainerͳһ·ÖÅäIPµØÖ·¡£ÕâÑùÔËÐÐÔÚ²»Í¬hostÉϵÄcontainersÖ®¼äͨÐÅ£¬Ö±½ÓʹÓöԷ½µÄcontainer
IPµØÖ·¾Í¿ÉÒÔÁË£¬¶ø²»ÐèÒª¿¼ÂÇhost IP¡£Õâʵ¼ÊÉϰÑDockerģʽÖеÄhost IPºÍcontainerIPÕâÁ½²ãIPµØÖ·±ä³ÉÁËÒ»²ã¡£
ÔÚKubernetesµÄÎĵµÀï²ûÊöÁËÒ»¸ö½ÐPodµÄ¸ÅÄ²¢ÇÒ½âÊÍÒ»¸öPodÀï¿ÉÒÔÔËÐÐÒ»¸ö»òÕß¶à¸öDocker
containers¡£Êµ¼ÊÉÏ£¬Ò»¸öPod¾ÍÊÇÒ»¸öDocker container¡£ËùνÔÚPodÀïÔËÐеĶà¸öcontainers£¬Êµ¼ÊÉÏÊÇÆô¶¯µÄʱºò¼ÓÁ˨Cnet=container:²ÎÊýµÄcontainers£¬ËüÃDz»»áµÃµ½×Ô¼ºµÄIPµØÖ·£¬¶øÊǺÍpod
container¹²ÏíIPµØÖ·¡£ÕâÑùÒ»À´£¬Ò»¸öpodÀïµÄcontainersÖ®¼äͨÐŵÄʱºò¿ÉÒÔÓÃlocalhostµØÖ·£¬¶ø¿çÔ½podµÄͨÐÅÓÃpod
IP¡£ ¿´ÉÏÈ¥KubernetesµÄ×ö·¨ÀïÏà¶ÔÓÚDockerµÄ×ö·¨£¬¶àÁËÒ»²ãPodµÄ¸ÅÄî¡£
µ«ÊÇʵ¼ÊÉÏÿ¸öcontainerÀïÔ¼¶¨Ë׳ɵØÖ»ÔËÐÐÒ»¸ö·þÎñ½ø³Ì£¬ËùÒÔ»¹ÊÇÈý²ã¸ÅÄ
1.½Úµã£¨node£©
2.Pod
3.Container

KubernetesʵÏÖÕâÖÖÍøÂç½á¹¹ÓжàÖÖ·½·¨£¬Èçoverlay networking¡¢BGPºÍÆäËûSDN¼¼Êõ£¬³£¼ûµÄʵÏÖ°üÀ¨£ºFlannel¡¢
Calico¡¢ L2 networking¡¢OpenVSwitchµÈ£¬ÎÒÃǶԳ£Óò¢»îÔ¾µÄÏîÄ¿½øÐÐÁËÕë¶ÔÐÔÆÀ²â£¬½áÂÛÈçÏ£º

¿ÉÒÔ¿´µ½£¬ÔÚL2ģʽÏ£¬Õë¶Ô¸ßÐÔÄÜwebÓ¦Óó¡¾°¿ÉÒÔ´ïµ½×î¼ÑÐÔÄÜ¡£µ±È»Èç¹ûÓÐרÓõÄSDN½»»»»úÉ豸£¬Ò²¿ÉÒÔ´ó´óÌá¸ßSDNµÄÍøÂçÐÔÄÜ¡£µ«×ۺϳɱ¾¡¢·½°¸¸´Ôӳ̶ȡ¢·½°¸ºóÐø¿ÉÀ©Õ¹ÐÔ¿¼ÂÇ£¬×îÖÕÑ¡Ôñflannel
host-gwģʽ¡£Õâ¸öģʽ£¬ÒªÇóËùÓÐhost±£³ÖÎȶ¨µÄ2²ãÍøÂçÁ¬½Ó£¬È»ºóͨ¹ýLinux·ÓÉ±í£¬½«Docker
bridgeµÄ°üÍê³É3²ãת·¢¡£
ÁíÍâÒ»µã£¬ÔÚÆÀ²â¹ý³ÌÖз¢ÏÖ£¬linux¼ÓÔÚnetfilterºÍiptablesÏà¹ØÄÚºËÄ£¿éÖ®ºó£¬Æ½¾ùÍøÂçÑÓ³Ù»áϽµ10%×óÓÒ¡£µ«¾ÍĿǰ״̬À´Ëµ£¬Ê¹ÓÃiptables
NAT×÷ΪKubernetesµÄservice¸ºÔؾùºâÈÔÈ»ÊÇÐÔÄÜ×î¸ß¡¢×î¼òµ¥µÄ·½Ê½¡£ºóÐøÈç¹û¿ÉÒÔʹÓøüÓÅÐãµÄ·½·¨Ìṩservice¸ºÔؾùºâ£¬¿ÉÒÔÈ¥µôiptablesÒÔ½µµÍÈÝÆ÷Ö®¼äµÄÍøÂçÑÓ³Ù¡£
ÔÚÕâÖÖÍøÂ粿ÊðÏ£¬Ê¹ÓÃÆÕͨµÄǧÕ×Íø¿¨ºÍǧÕ×½»»»»ú£¬¼´¿ÉÒԽϵͳɱ¾À´´î½¨´ó¹æÄ£µÄ¼¯Èº£¬²¢»ñµÃÏà¶Ô¿É¹ÛµÄÐÔÄÜ¡£ÔÚÕë¶ÔÍøÂçÑÓ³ÙÓиü¸ßÒªÇóµÄ·þÎñ£¬±ÈÈçRedisµÈ£¬Ôò¿¼ÂÇÖ±½ÓÎïÀí²¿Êð×÷ΪÕÛÖз½°¸¡£
¶þ¡¢´òÔì¸ß¿ÉÓõÄǰ¶Ë¸ºÔؾùºâÆ÷
´ÓÉÏÃæµÄ½éÉÜ¿ÉÒÔ¿´³ö£¬Kubernetes serviceÖ÷ÒªÈÔÊÇÕë¶ÔÊý¾ÝÖÐÐÄÄÚ²¿»¥Ïà·ÃÎÊ£¬ÈôÒª·½±ãµØÌṩHTTP
web·þÎñµÄ´´½¨£¬ÔòÐèÒªÒýÈëIngressµÄ¸ÅÄî¡£
ÖÚËùÖÜÖªµÄÊÇ£¬KubernetesÖеÄService¿ÉÒÔ½«Ò»×épodÌṩµÄ·þÎñ±©Â¶³öÀ´¹©ÍⲿʹÓ㬲¢Ä¬ÈÏʹÓÃiptablesµÄ·½Ê½Ìṩ¸ºÔؾùºâµÄÄÜÁ¦¡£Serviceͨ¹ýʹÓÃiptables£¬ÔÚÿ¸öÖ÷»úÉϸù¾ÝKubernetes
service¶¨Ò壬×Ô¶¯Í¬²½NAT±í£¬½«ÇëÇó¾ùºâµÄת·¢µ½ºó¶ËpodÉÏ£¬²¢ÔÚpod¹ÊÕÏʱ×Ô¶¯¸üÐÂNAT±í¡£Ïà¶ÔÓÚʹÓÃuserspace·½Ê½Ö±½Óת·¢Á÷Á¿Óиü¸ßµÄЧÂÊ¡£³£ÓõÄServiceÓÐClusterIP¡¢LoadbalancerÒÔ¼°NodePort·½Ê½¡£
ClusterIPÊÇͨ¹ýÿ¸ö½ÚµãµÄkuber-proxy½ø³ÌÐ޸ı¾µØµÄiptables£¬Ê¹ÓÃDNATµÄ·½Ê½½«ClusterIPת»»ÎªÊµ¼ÊµÄendpointµØÖ·¡£
NodePortÊÇΪÁËKubernetes¼¯ÈºÍⲿµÄÓ¦Ó÷½±ã·ÃÎÊkubernetesµÄ·þÎñ¶øÌṩµÄÒ»ÖÖ·½°¸£¬Ëü»áÔÚÿ¸ö»úÆ÷ÉÏ¡£
ÓÉÓÚNATÐÔÄܵÄÎÊÌ⣬NodePort»á´øÀ´Ò»¶¨µÄÐÔÄÜËðʧ£¬ÔÚһЩ³¡¾°Ï£¬ÎÒÃÇÒ²»áÑ¡ÓÃLoadbalancer×÷Ϊk8s¼¯ÈºÍⲿӦÓ÷ÃÎÊK8s¼¯ÈºÄÚ²¿Ó¦ÓõÄͳһÈë¿Ú¡£°Ù·Öµã²ÉÓõÄLoadbalancer¸ºÔؾùºâÆ÷ÊÇ»ùÓÚhaproxy£¬Í¨¹ýwatcher
Kubernetes-apiserverÖÐserviceÒÔ¼°endpointÐÅÏ¢£¬¶¯Ì¬ÐÞ¸Ähaproxyת·¢¹æÔòÀ´ÊµÏֵġ£
´ÓÉÏÃæµÄ½éÉÜ¿ÉÒÔ¿´³ö£¬Kubernetes serviceÈÔÊÇÖ÷ÒªÕë¶ÔÊý¾ÝÖÐÐÄÄÚ²¿»¥Ïà·ÃÎÊ£¬ÈôÒª·½±ãµØÌṩHTTP
web·þÎñµÄ´´½¨£¬ÔòÐèÒªÒýÈëIngressµÄ¸ÅÄî¡£
1.Ingress
¶ÔÓÚ¶ÔÍâÌṩ·þÎñµÄwebÓ¦ÓÃÀ´Ëµ£¬ÐèÒªÌṩ7²ã·´Ïò´úÀíµÄ»úÖÆ£¬Ê¹µÃ¹«ÍøµÄÁ÷Á¿¿ÉÒÔתÈ뼯Ⱥ֮ÖС£°Ù·Öµã²ÉÓõÄÊÇNginx£¬Í¨¹ýWatcherKubernetesÖÐIngress×ÊÔ´ÐÅÏ¢£¬¶¯Ì¬Ð޸ĶÔÓ¦µÄserviceÆ¥ÅäendpointµÄµØÖ·£¬Ê¹µÃÕû¸öÅäÖÃÁ÷³ÌÖ»Ðèͨ¹ýkubctlÌá½»Ò»¸öÅäÖü´¿É¡£Ingress×÷ΪÊý¾ÝÖÐÐÄwebÇëÇóµÄÈë¿Ú£¬½«Á÷Á¿ÒýÈëµ½¼¯ÈºÄÚ²¿£¬Íê³É´¦Àíºó¾ÓÉIngress·µ»ØÍⲿÇëÇóÕß¡£ÕâÑùÒ»À´£¬ÈκÎÒ»¸ö²¿ÊðÔÚkubernetesÉϵÄwebÓ¦Ó㬶¼¿ÉÒÔ¼òµ¥µÄͨ¹ýÌá½»Ò»¸öIngress×ÊÔ´£¬Íê³ÉwebÇëÇó¶ÔÍâµÄ¿ªÍ¨¡£
2.Ingress HA
IngressµÄ»úÆ÷ÊÇÕû¸ö¼¯ÈºµÄÈë¿Ú£¬Èç¹ûÆäÖÐһ̨»úÆ÷³öÏÖ¹ÊÕÏ£¬´øÀ´µÄÓ°Ï콫»áÊÇÖÂÃüµÄ¡£ÎÒÃÇÒ²Ôø¿¼ÂǹýʹÓÃF5µÈ¼¼Êõ×öǰ¶ËµÄ¸ß¿ÉÓ㬵«×îºó»ùÓڳɱ¾ºÍ¿Éά»¤ÐÔ¿¼ÂÇ£¬×îÖÕʹÓÃKeepalived+vipµÄ·½°¸¡£

3.IngressÓÅ»¯
ÐÔÄÜÓÅ»¯
ÓÉÓÚNginxIngress ControllerÒª¼àÌýÎïÀí»úÉϵÄ80¶Ë¿Ú£¬ÎÒÃÇ×î³õµÄ×ö·¨ÊǸøËûÅäÖÃÁËhosrtport£¬µ«µ±´óÁ¿ÒµÎñÉÏÏßʱ£¬ÎÒÃÇ·¢ÏÖQPS³¬¹ý500/s¾Í»á³öÏÖÎÞ·¨×ª·¢Êý¾Ý°üµÄÇé¿ö¡£¾¹ýÅŲ鷢ÏÖ£¬ÏµÍ³ÈíÖжÏÕ¼ÓõÄCPUÌØ±ð¸ß£¬hostport»áʹÓÃiptables½øÐÐÊý¾Ý°üµÄת·¢£¬ºóÀ´½«Ingress
ControllerÐÞ¸ÄΪhostnetworkģʽ£¬Ö±½ÓʹÓÃDockerµÄhostģʽ£¬ÐÔÄܵõ½ÌáÉý£¬QPS¿ÉÒÔ´ïµ½5kÒÔÉÏ¡£
NginxÅäÖÃÓÅ»¯
Nginx IngressController´óֵŤ×÷Á÷³ÌÊÇÏÈͨ¹ý¼àÌýService¡¢IngressµÈ×ÊÔ´µÄ±ä»¯È»ºó¸ù¾ÝService¡¢IngressµÄÐÅÏ¢ÒÔ¼°nginx.templeÎļþ£¬½«Ã¿¸öservice¶ÔÓ¦µÄendpointÌîÈëÄ£°åÖÐÉú³É×îÖÕµÄNginxÅäÖᣵ«ÊǺܶàÇé¿öÏÂÄ£°åÖÐĬÈϵÄÅäÖòÎÊý²¢²»Âú×ãÎÒÃǵÄÐèÇó£¬ÕâʱÐèҪͨ¹ýkubernetesÖÐConfigMap»úÖÆ»ùÓÚNginx
Ingress ControllerʹÓÃÎÒÃǶ¨ÖÆ»¯µÄÄ£°å¡£
ÈÕÖ¾»Ø¹ö
ĬÈÏÇé¿öÏÂDocker»á½«ÈÕÖ¾¼Ç¼ÔÚϵͳµÄ/var/lib/docker/container/xxxxÏÂÃæµÄÎļþÀµ«ÊÇǰ¶ËÈÕÖ¾Á¿ÊǷdz£´óµÄ£¬ºÜÈÝÒ׾ͻὫϵͳÅÌдÂú£¬Í¨¹ýÅäÖÃConfigMapµÄ·½Ê½£¬¿ÉÒÔ½«ÈÕ־Ŀ¼¸Äµ½Ö÷»úÉÏ£¬Í¨¹ýÅäÖÃlogrotate·þÎñ¿ÉÒÔʵÏÖÈÕÖ¾µÄ¶¨Ê±»Ø¹ö¡¢Ñ¹ËõµÈ²Ù×÷¡£
·þÎñÓ¦¼±
µ±ÏßÉÏ·þÎñ³öÏÖ²»¿ÉÓõÄÇé¿öʱ£¬ÎÒÃÇ»á×¼±¸Ò»Ì×Ó¦¼±µÄ·þÎñ×÷Ϊ±¸Óã¬Ò»µ«·þÎñ³öÏÖÎÊÌ⣬ÎÒÃÇ¿ÉÒÔ½«Á÷Á¿Çл»µ½Ó¦¼±µÄ·þÎñÉÏÈ¥¡£ÔÚk8sÉÏ£¬ÕâһϵÁвÙ×÷±äµÃ¸ü¼Ó¼òµ¥£¬ÕâÐèÔÙ×¼±¸Ò»Ì×ingress¹æÔò£¬½«Éú²ú»·¾³µÄServuce¸ÄΪӦ¼±µÄService£¬Çл»µÄʱºòͨ¹ýkubectl
replace -f xxx.yaml ½«ÏàÓ¦µÄIngressÌæ»»£¬¼´¿ÉʵÏÖ·þÎñµÄÎÞ¸ÐÖªÇл»¡£
Èý¡¢´òÔìÒ»Ì廯Kubernetes¼¯Èº·þÎñ
×÷Ϊһ¸ö¼¯Èº»¯µÄ²Ù×÷ϵͳ£¬»ù´¡·þÎñ±Ø²»¿ÉÉÙ£¬¿ª·¢Õßͨ³£ÐèÒª¾³£²é¿´·þÎñµÄÈÕÖ¾£¬²é¿´¼à¿ØÊý¾Ý£¬²é¿´ÔËÐÐ״̬µÈ¡£ÎÒÃÇΪKubernetes¼¯ÈºÅäÖÃÁ˺ܶà»ù´¡Àà·þÎñ£¬Ê¹¼¯ÈºÊ¹ÓÃÆðÀ´¸ü¼Ó¸ßЧ¡£
1.ÈÕÖ¾¹ÜÀí
µ±ÎÒÃǵÄÓ¦ÓÃÔËÐÐÔÚ¼¯Èº²Ù×÷ϵͳÉÏʱ£¬ÈçºÎ¸ßЧµØ²é¿´¡¢·ÖÎö·þÎñÈÕÖ¾ÊÇÒ»¸ö±ØÐëÒª½â¾öµÄÎÊÌâ¡£°Ù·Öµã²ÉÓÃÁËFluented+Elasticsearch+KibanaµÄ·½°¸£¬Õû¸öÌ×¼þÒ²¶¼ÊÇÔËÐÐÔÚKubernetes¼¯ÈºÉϵġ£

Fluentd
FluentedÊÇʹÓÃKubernetesÖÐDaemonsetµÄ»úÖÆ£¬Ê¹µÃfluentedÆô¶¯ÔÚÿһ¸ö½ÚµãÉÏ£¬²¢×Ô¶¯²É¼¯Docker
ContainerµÄÈÕÖ¾µ½ES¼¯ÈºÖС£
Elasticsearch
ES×Ô´øµÄDiscovery»úÖÆ²¢²»ÄÜÔÚkubernetesÖÐÍêÃÀµÄÔËÐУ¬ÕâÀïʹÓÃkubernetesµÄ²å¼þ£¬Ê¹ÆäËûͨ¹ýServiceµÄ·½Ê½Ê¹master½ÚµãÄܹ»×Ô¶¯·¢ÏÖclientºÍdata½ÚµãµÄendpointµØÖ·£¬×é³É¼¯Èº¡£ESÖÐÊý¾Ý½ÚµãµÄ´æ´¢ÊÇ·ÅÔÚCeph¼¯ÈºÖе쬱£Ö¤ÁËÊý¾Ý¿É¿¿ÐÔ¡£
Kibana
KibanaÖÐÄܹ»¸ù¾ÝÓû§×Ô¶¨Òåɸѡ¡¢¾ÛºÏ£¬·½±ãÓû§²éѯʹÓá£
2 . ϵͳ¼à¿Ø
ͨ¹ýheapster+collectd+influxdb+grafana½â¾ö¶àÔ´Êý¾Ý²É¼¯¡¢¼à¿ØÊý¾Ý´æ´¢¡¢²éѯչÏÖµÄÎÊÌâ¡£

heapster¸ºÔð´ÓcAdvisorÖвɼ¯ËÞÖ÷»úÒÔ¼°containerÖÐµÄ¼à¿ØÊý¾Ý²¢Ð´ÈëinfluxdbÖС£
collectd¸ºÔð²É¼¯ÀàËÆnginx×é¼þµÄ¼à¿ØÊý¾ÝдÈëinfluxdbÖС£
influxdb¸ºÔð°´Ê±¼äÐòÁд洢¼à¿ØÊý¾Ý£¬²¢ÇÒÖ§³ÖÀàSQLµÄÓï·¨À´·ÃÎÊÊý¾Ý ¡£
grafanaÌṩÁËWebUI£¬Í¨¹ýÓû§×Ô¶¨ÒåµÄ²éѯ¹æÔò£¬Éú³ÉSQLÓï¾äÀ´²éѯinfluxdbÖеÄÊý¾Ý£¬²¢×îÖÕÒÔͼ±íµÄÐÎʽչÏÖ¸øÓû§¡£
3.ͳһDashboard
ΪÁ˼ò»¯kubernetes¼¯ÈºµÄʹÓ㬰ٷֵãµÄ¼¼ÊõÍŶӿª·¢ÁËSiriusϵͳ£¬Ê¹Óû§Ê¹ÓÃÆðÀ´¸ü¼ÓµÄ·½±ã£¬²¢ÇÒ´ËÏîĿҲÔÚGithubÉϽøÐÐÁË¿ªÔ´¡£

4.³ÖÐø»¯¼¯³É
DockerÊÇÎÒÃÇÂ䵨DevopsÀíÄîµÄºËÐļ¼Êõ£¬´Ó¿ª·¢ÈËԱдϵÚÒ»ÐдúÂ뿪ʼ£¬ÎÒÃǹ¹½¨ÁËÕâÑùÒ»Ìõ³ÖÐø¼¯³ÉµÄÁ÷Ë®Ïß¡£
ÎÒÃÇÑ¡ÔñÁËGitlab×÷Ϊ´úÂë²Ö¿â£¬µ±¿ª·¢ÈËÔ±ÏòGitlabÌá½»´úÂ룬Jenkins»á¼àÌýÿ¸ötag£¬Ã¿´Îpushʼþ£¬ÓÐÑ¡ÔñµÄ×Ô¶¯¹¹½¨Îªdocker
image£¬²¢ÍÆÏòDocker Registry£¬´æ´¢ÔÚÎÒÃǵÄDocker²Ö¿âÖС£Ëæºó£¬Jenkins»á½«Ð°汾µÄ¾µÏñÍÆµ½¼¯³É²âÊÔµÄKubernetes¼¯ÈºÖУ¬Íê³ÉÒ»´Î¹¹½¨¡¢²âÊÔ¡¢Ô¤ÉÏÏßµÄÁ÷³Ì¡£´ý²âÊÔͨ¹ýºó£¬ÔÙ·¢²¼µ½Éú²ú»·¾³¡£

5.³ÖÐø»¯²¿Êð
ÔÚÖð²½½«ÏßÉÏÓ¦ÓÃÇ¨ÒÆµ½kubernetes¼¯Èº¹ý³ÌÖУ¬µ±È»Ò²Óöµ½²»ÉÙÎÊÌ⣬ÿ¸öÓ¦ÓÃÔÚÌá½»Ö®ºóÐèÒª¾¹ý¶à´ÎÐ޸ĺ͸üвſÉÒÔÕýʽÉÏÏߣ¬ÎªÁË·½±ã¸üС¢²¢¾¡Á¿¼õÉÙÈËΪ²Ù×÷µÄʧÎó£¬ÎÒÃÇʹÓá°±àÅÅÎļþ°æ±¾¹ÜÀí+kubernetes
deployment¡±Íê³É³ÖÐø»¯²¿Êð¡£
ʲôÊÇDeployment£¿
DeploymentÃèÊöÁË´ý²¿ÊðPodµÄ״̬£¬Ö»ÐèÒª¶¨ÒåÎÒÃÇÆÚÍûµÄÒ»×éPodµÄ״̬£¬kube-controller»á°ïÖúÎÒÃÇÔÚ¼¯ÈºÉÏά³ÖÕâһ״̬£¬²¢ÇÒ¿ÉÒԺܷ½±ãµØÔÚÉÏÃæ×öroll-outºÍroll-back¡£
ÈçºÎ¸üÐÂDeployment?
Ö±½ÓʹÓÃkubectl editdeployment/{your deployment}¼´¿É¶ÔÏàÓ¦deployment½øÐÐÐ޸ġ£²¢ÇÒ¿ÉÒÔÖ¸¶¨×î´ó²»¿ÉÓõÄPod¸öÊýÀ´¿ØÖƹö¶¯¸üеĽø¶È¡£Ã¿´ÎÖ´ÐÐeditÃüÁîÖ®ºó£¬¾Í»á´¥·¢deploymentµÄrolling
update£¬Ó¦ÓûáÔÚºǫ́Íê³ÉÖð¸öƽ»¬Éý¼¶¡£
³ÖÐø²¿Êð
ÔÚÿ¸öÓ¦ÓõĴúÂë²Ö¿âÖУ¬»áÔö¼ÓÒ»¸ö.kubeµÄĿ¼£¬ÏÂÃæ´æ·Å±¾Ó¦ÓõÄyaml±àÅÅÎļþ£¬Ã¿´Î²¿ÊðÉý¼¶¶¼Ö±½ÓʹÓöÔÓ¦°æ±¾µÄ±àÅÅÎļþ¼´¿ÉÍê³É²¿Êð¡£
ËÄ¡¢´òÔìͳһ³Ö¾Ã»¯´æ´¢Æ½Ì¨
KubernetesÔÚÔËÐÐʱÊÇ»ùÓÚÈÝÆ÷¼¼ÊõµÄ£¬Õâ¾ÍÒâζ×ÅÈÝÆ÷µÄÍ£Ö¹»áÏú»ÙÈÝÆ÷ÖеÄÊý¾Ý¡£ÈôÓ¦ÓÃҪʹÓó־û¯µÄ´æ´¢£¬Èç¹ûÖ±½Ó¹ÒÔÚÈÝÆ÷ËùÔÚÖ÷»úµÄ´ÅÅÌĿ¼£¬Õâ¸ö±àÅÅϵͳ»áÏÔµÃÊ®·Ö»ìÂÒ¡£ËäÈ»KubernetesÌṩÁËÖîÈçhostPath»úÖÆ£¬³ý·ÇÓ¦ÓúÍÖ÷»ú¾ßÓзdz£Ã÷È·µÄ°ó¶¨¹ØÏµ£¬·ñÔò²»ÍƼöʹÓá£ÕâÑù£¬ÎÒÃÇÐèÒªÒ»¸öͨ¹ýÍøÂç¿É·ÃÎʵĴ洢³Ø£¬×÷ΪͳһµÄ¼¯Èº´æ´¢Æ½Ì¨¡£Ñ¡Ð͵ÄÎÊÌâÕâÀï²»Ïêϸչ¿ª£¬ÎÒÃÇ×îÖÐʹÓÃceph×÷ΪKubernetesµÄºó¶Ë´æ´¢¡£
ÔÚ²¿Êðʱ£¬¿¼Âǵ½kubernetes±àÅŵÄÍøÂçÇëÇó¿ÉÄܺÍcephµÄÊý¾Ý´æ´¢ÇëÇóÇÀÕ¼Íø¿¨´ø¿í¶øµ¼ÖÂÕûÌ弯Ⱥ̱»¾£¬Ô¤ÏȽ«kubernetes·ÃÎÊceph¼¯ÈºµÄÍøÂçʹÓõ¥¶ÀµÄÁ½¸öÍø¿Ú×öbond0Ö®ºóÁ¬½Óceph¼¯ÈºµÄ½»»»»ú¡£Í¬Ê±ÎªÁË·ÀÖ¹¶à¸öÈÝÆ÷Í»·¢ÐԵĸßIOPS¶Ôceph¼¯ÈºµÄ·ÃÎÊ£¬ÎÒÃÇÕýÔÚ¿ª·¢storage-iopsµÄqosÏÞÖÆ¹¦ÄÜ¡£
ËäÈ»cephÌṩÁË3ÖÖ´æ´¢·ÃÎʵķ½Ê½£¬ÎÒÃÇ»¹ÊÇÑ¡ÓÃÁËÏà¶ÔÎȶ¨µÄrbd£¬Ã»ÓÐʹÓÃceph filesystemģʽ¡£ÔÚrbdģʽÏ£¬Ê×ÏÈÒª±£Ö¤ÄÚºËÒѾ¼ÓÔÚÁËrbd.koÄÚºËÄ£¿é£¬ºÍceph-common°ü¡£ÕâÒ»²½£¬ÎÒÃÇÔÚÇ°ÃæÌáµ½µÄsextant×Ô¶¯°²×°ÏµÍ³ÖÐÒѾÍê³É´ò°ü¡£
½ÓÏÂÀ´ÔÚʹÓÃrbd×÷Ϊpod´æ´¢Ê±¿ÉÒԲο¼Ê¾Àý£º
{ "apiVersion": "v1beta3", "id": "rbdpd2", "kind": "Pod", "metadata": { "name": "rbd2" }, "spec": { "containers": [ { "name": "rbd-rw", "image": "kubernetes/pause", "volumeMounts": [ { "mountPath": "/mnt/rbd", "name": "rbdpd" } ] } ], "volumes": [ { "name": "rbdpd", "rbd": { "monitors": [ "192.168.0.1:6789" ], "pool": "rbd", "image": "foo", "user": "admin", "secretRef": { "name": "ceph-secret" }, "fsType": "ext4", "readOnly": true } } ] } } |
Ŀǰ£¬ÎÒÃÇÒѾʹÓÃkubernetes+ceph rbd²¿ÊðʹÓÃÁËMySQL¡¢MongoDB¡¢Redis¡¢InfluxDB¡¢ElasticSearchµÈ·þÎñºÍÓ¦Óá£
°Ù·Öµãʵ¼ù×ܽá
µ½Ä¿Ç°ÎªÖ¹£¬°Ù·ÖµãµÄKubernetes¼¯ÈºÉϳÐÔØÁËÍÆ¼öϵͳµÄ´ó²¿·ÖÒµÎñ×é¼þºÍ²¿·ÖµÄÔËά×é¼þ¡£KubernetesÏà¶ÔÀ´Ëµ»¹±È½ÏУ¬¼¯ÈºÉÏÒ²ÐèÒª¸ü¶àµÄ¹¤¾ß²ÅÄÜÈÃÓû§Ó¦ÓÃÆðÀ´¸ü¼ÓµÄ·½±ã¡£·Ç³£¸ÐлKubernetesÉçÇø¡¢ÍõÒæÒÔ¼°ÔÆÖªÉù¹«Ë¾µÄ¼¼ÊõÍŶӣ¬°Ù·Öµã»á³ÖÐø×¨×¢ÔÚKubernetesµÄ½¨É裬ÆÚÍûÄܹ»¸ü¶àµØ»ØÀ¡ÉçÇø¡£ |