±à¼ÍƼö: |
÷È×åÈÝÆ÷ÔÆÆ½Ì¨Ö÷ÒªÊÇ»ùÓÚ
k8s µÄ¼¼Êõ¡£½«´ÓÒÔÏÂÁù¸ö·½Ãæ½éÉÜ÷È×åÈÝÆ÷ÔÆµÄʵ¼ù¹ý³Ì£¬·Ö±ðÊÇ»ù±¾½éÉÜ¡¢k8s
¼¯Èº¡¢ÈÝÆ÷ÍøÂç¡¢Íⲿ·ÃÎÊ4/7²ã¸ºÔؾùºâ¡¢¼à¿Ø/¸æ¾¯/ÈÕÖ¾¡¢ÒµÎñ·¢²¼/¾µÏñ/¶à»ú·¿¡£ ±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
1¡¢»ù±¾½éÉÜ
÷È×åÔÆÆ½Ì¨µÄ¶¨Î»ÊÇ˽ÓÐÔÆÆ½Ì¨£¬Ö÷ÒªÊÇÓÃÓÚÖ§³ÅÔÚÏßÒµÎñ£¬ÓÃÒÔÌæ»»´«Í³µÄÐéÄ⻯·½Ê½¡£Ä¿Ç°ÏÖ×´ÊÇ2017ÄêÍê³ÉÈ«¹úÈý¸öÊý¾ÝÖÐÐĵĽ¨É裬ÄêÄÚÍê³É90%ÒµÎñµÄÇ¨ÒÆ¡£
ÎÒÃÇÊÇÒÔСÍŶӽô¸ú k8s ÉçÇø²½·¥£¬¿ìËÙµü´ú¡¢µÍ³É±¾ÊÔ´íµÄ·½Ê½À´¹¹½¨ÎÒÃÇµÄÆ½Ì¨µÄ¡£Í¬Ê±£¬Õë¶ÔһЩÎÒÃÇÓöµ½µÄÎÊÌ⣬×öһЩ¾Ö²¿´´Ð£¬ÔÚ±£Ö¤ÏµÍ³ºËÐĵÄËæÉçÇøÎȶ¨Éý¼¶µÄǰÌáÏ£¬½â¾öºÃ·Ç¹¦ÄÜÐÔÎÊÌâ¡£

2¡¢k8s ¼¯Èº
¶ÔÓÚ k8s ¼¯Èº¹¹½¨£¬½«´Ó k8s µÄµ¥Ò»¾µÏñ¡¢k8s ¼¯Èº master¡¢minion Èý¸ö·½Ãæ·Ö±ðÕ¹¿ª½éÉÜ¡£
2.1 µ¥Ò»¾µÏñ

k8s ¼¯ÈºµÄ°²×°²¿ÊðÊÇÀûÓõ¥Ò»¾µÏñ + docker run ʵÏÖÒ»¼ü°²×°¡£Îª´Ë½«ËùÓÐ k8s
Ïà¹ØµÄÃèÊöÎļþ¡¢½Å±¾ºÍ¶þ½øÖÆÈ«²¿´ò°ü³É¾µÏñ£¬Ä¿µÄÊÇʵÏÖ¼¯ÈºµÄ¿ìËÙ²¿ÊðºÍÉý¼¶¡£
2.2Master 
ΪÁËÄܹ»ÊµÏÖ×Ô¶¯¼ÓÔØ£¬k8s ¼¯ÈººËÐÄ×é¼þʹÓÃÁË Static Pod ·½Ê½¡£ÔÚ×Ô¶¯ÐÞ¸´·½Ã棬kubelet
probe ¿ÉÒÔʵÏÖ Pod µÄ×Լ죬ÅäÖÃÁË×Ô¶¯ÖØÆô¡£Èç¹ûÐèÒª¶ÔºËÐÄ×é¼þ½øÐÐÉý¼¶£¬Ö¸¶¨Í³Ò»¾µÏñµÄ°æ±¾ºÅ¼´¿ÉʵÏÖºËÐÄ×é¼þÉý¼¶¸üС£

controller manager ºÍ scheduler ·þÎñÔÚÈý̨ÎïÀí»úʵÏÖ¼¯Èº master
¸ß¿ÉÓá£API Server µÄ¸ß¿ÉÓüȿÉÒÔͨ¹ý¸ºÔؾùºâ·½Ê½ÊµÏÖ£¬Ò²ÄÜͨ¹ý DNS ·½Ê½ÊµÏÖ¡£

¼¯Èº controller mananger ÖØÆô¿ÉÄÜ»á³öÏÖ Node ״̬²»Í¬²½µÄÎÊÌ⣬Òò´Ë¶ÔÓÚºËÐÄ×é¼þ״̬£¬ÐèÒªÅäÖø澯²¢¼°Ê±¼ì²éÓÐÎÞÒ쳣״̬¡£
2.3 minion
Ó²¼þ·½Ã沢ûÓй̶¨µÄÅäÖ㬾¡Á¿ÀûÓÃÏÖÓеÄ×ÊÔ´¡£ÔÚÎÒÃǵļ¯ÈºÖУ¬³£¼û minion µÄÅäÖÃÊÇ 24ºË
CPU(with ht)¡¢128GB ÄÚ´æÒÔ¼°Ç§Õ×Íø¿¨¡£

k8s ¼¯ÈºÖÐ minion ×÷Ϊ¼ÆËã½Úµã£¬ÆäÉÏÖ÷ÒªÊǸ÷ÖÖÒµÎñµÄÈÝÆ÷ºÍ Systempods¡£
¶ÔÓÚ minion ½Úµã×öÁËÈý¸ö·½Ãæ²ÎÊýµÄÓÅ»¯£¬ÖжÏÏà¹Ø¡¢TCPbacklog ºÍ swap¡£

minion ½Úµã²Ù×÷ϵͳʹÓõÄÊÇ centos 7£¬docker storage ʹÓÃµÄ devicemapper
driver£¬ÈÕÖ¾»ù±¾Ð´µ½Íâ¹ÒµÄ EmptyDir volume£¬docker ´æ´¢Ê¹ÓõúÜÉÙ¡£
ÎÒÃÇΪ EmptyDir Volume רÃÅ¿ª±ÙÁËÆÕͨ·ÖÇø£¬Ã»ÓÐʹÓà lvm£¬ÒòΪÈÕÖ¾Á¿²»ºÃÔ¤¹À£¬ÔâÓö¹ýÒòΪ
lvm metadata µÄʹʡ£

ʹÓà Device Mapper »¹ÔâÓö¹ý kernel issue£¬Òò´ËÐèÒª¸üÐÂÄںˡ£

ĬÈÏÄÚºËÊÇ3.10°æ±¾£¬³¤ÆÚά»¤µÄÄں˰汾µÄÊÇÎÒÃÇÐèÒªµÄ¡£¶øÇÒ¿¼Âǵ½Òª¶ÔijЩÄÚºËÄ£¿é×ö hacking£¬4.0¼°ÒÔÉϱ仯½Ï´ó£¬hackingtcp_v4_syn_recv_sock
´æÔÚÎÊÌ⣬ËùÒÔÎÒÃÇ×îÖÕÑ¡ÔñÁË×ÔÐбàÒë 3.16Äںˡ£
¿¼Âǵ½ºÍ CMDB µÄ½áºÏ£¬minion ½Úµã´òÉÏÁË Label£¬ÀýÈç±ê¼ÇËüµÄ¹¦ÄÜÊÇʲô£¬ÎïÀíλÖÃÐÅÏ¢,»ú¹ñµÈ¡£ÕâЩÐÅÏ¢¶ÔÓÚ
Pod µ÷¶È·Ç³£ÖØÒª¡£°üÀ¨ Pod µÄ Node Ç׺ÍÐÔ£¬Pod Ç׺ÍÐԺͷ´Ç׺ÍÐÔ¡£
3¡¢ÈÝÆ÷ÍøÂç 
ÈÝÆ÷ÍøÂçµÄ·½ÃæÎÒÃDzÉÓõÄÊÇ calico µÄ·½°¸¡£Ö÷»úͨ¹ý BGP Ö±½ÓºÍºËÐÄ·ÓÉÉ豸¶Ô½Ó£¬ÕâÀïÒ²¿ÉÒÔÓÃ
RouteReflector Ìæ´ú¡£
¿ØÖƲãÃæ×ß BGP£¬Êý¾Ý²ãÃæ×ßÈý²ã·ÓÉ¡£ÍøÂç·â°ü»á¾¹ýÖ÷»úµÄ netfilter¿ò¼Ü,×îºó¾ÓÉÖ÷»ú
forward chain ½øÈëÈÝÆ÷£¬Ä¬È϶¼»á±» conntrack¡£²¿Êð·½Ã棬Calico ͨ¹ý
k8s µÄ Daemonset ·½Ê½£¬²¿Êð·Ç³£·½±ã

ÓÅ»¯Ö÷ÒªÊÇÕë¶Ô conntrack£¬½¨Ò龡Á¿Ê¹Óà headless service£¬ÉÙ²úÉú iptables
rule¡£Í¬Ê±£¬¶Ô conntrack ÓÃÁ¿½øÐÐ¼à¿Ø¡£ÈÝ´í·½Ãæ£¬ÈÝÆ÷»áÖ÷¶¯È¥ ping ½»»»»ú£¬È·±£ÍøÂçµÄÁ¬Í¨ÐÔ¡£µ±
calico ³öÏÖÎÊÌâµÄʱºò£¬ÈÝÆ÷ÊDz»»á¼ÓÈë·þÎñµÄ£¬ÓÉ´ËÀ´±£Ö¤·þÎñµÄ¿É¿¿ÐÔ¡£
¶ÔÓÚÎÒÃÇϵͳ£¬¾ø´ó²¿·ÖÁ÷Á¿À´×ÔÍⲿ LVS£¬Æä¿ÉÐÅÈζȸߣ¬Ä¬Èϵķ½Ê½»á²úÉú´óÁ¿µÄ conntrack
¼Ç¼£¬ËùÒÔÓ¦µ±°Ñ LVS ¹ýÀ´µÄÁ÷Á¿Ö±½Ó¸ø bypass conntrack¡£
¾¹ýÉú²úʵ¼ùЧ¹ûÑéÖ¤£¬no mesh ģʽµÄÎȶ¨ÐÔÒªÓÅÓÚ mesh ģʽ¡£Òì³£´¦ÀíÖ÷Òª·ÖΪ POD
Ö÷¶¯¼ì²âÍøÂçºÍ calico µÄÕûÌ彡¿µ¼à¿Ø¸æ¾¯¡£
4¡¢Íⲿ·ÃÎÊ4/7²ã¸ºÔؾùºâ
ÎÒÃÇ×öµÄÊǶÔÍâ·þÎñ£¬´ó²¿·ÖÁ÷Á¿¶¼ÊÇ´ÓÍⲿ´ò½øÀ´µÄ£¬ÖÕ¶ËÓû§¶¼ÊÇÍⲿµÄ¿Í»§£¬ËùÒÔÕë¶ÔÍⲿµÄ·ÃÎÊ×öÁË4²ãºÍ7²ãµÄ¸ºÔؾùºâ¡£ÎÒÃÇ×öµÄÊǶÔÍâ·þÎñ£¬´ó²¿·ÖÁ÷Á¿¶¼ÊÇ´ÓÍⲿ´ò½øÀ´µÄ£¬ÖÕ¶ËÓû§¶¼ÊÇÍⲿµÄ¿Í»§£¬ËùÒÔÕë¶ÔÍⲿµÄ·ÃÎÊ×öÁË4²ãºÍ7²ãµÄ¸ºÔؾùºâ¡£
ÔÚ4²ã½ÓÈëÉϲÉÓÃÁËÊǰ¢À↑ԴµÄ Fullnat LVS ·½°¸£¬¿´ÖÐÁËËüÔËά·½±ã¡¢Ë®Æ½À©Õ¹ÐԺ᣹¤×÷ÔÚ4²ãµÄ
LVS ·þÎñ¼È¿ÉÒÔÖ§³Ö TCP ͬʱҲ֧³Ö UDP£¬Á÷Á¿´Óclient ¶Ë¾¹ý LVS ×ö Fullnat
ºóµ½´ï minion£¬Ó¦´ðÖ±½Ó·ÓɻضÔÓ¦µÄLVS¡£
¶ÔÓÚ4²ã¸ºÔؾùºâµÄÅäÖã¬ÊÇͨ¹ý×Ô¶¯»¯·½Ê½À´ÊµÏֵģ¬ÎÞÐèÈ˹¤ÅäÖ㬿ÉÒÔ×Ô¶¯ÔÚ·ÓÉÉ豸Ðû¸æ vip£¬²¢Éú³É¶ÔÓ¦µÄ
ECMP ·ÓÉ¡£LVS µÄ VirtualServer ÅäÖÃÒ²ÊÇ×Ô¶¯Éú³ÉµÄ£¬VirtualServer
µ½ EndPoint ip µÄ×Ô¶¯Ó³Éä¡£
ÎÒÃÇ¶Ô LVS ¿ØÖƳÌÐò×öÁ˸ÄÔ죬±©Â¶ÁËһЩָ±ê£¬°üÀ¨ÍøÂçºÍÓ¦Ó÷þÎñÏà¹ØµÄÊý¾Ý£¬²¢ÒÔ´ËʵÏÖÁË Grafana
¿ÉÊÓ»¯ºÍ¼à¿Ø¸æ¾¯¡£
Ò»·½ÃæÊÇ¶Ô LVS ÕûÌåÁ÷Á¿Òì³£¸æ¾¯£¬ÁíÒ»·½Ãæ realserver (Pod) ×ö¸ßÑÓ³ÙÒì³£¼ì²â¸æ¾¯¡£
Æß²ã¸ºÔؾùºâ²ÉÓõÄÊÇ POD ÀïÃæÅÜ nginx+ingress controller£¬ËüµÄ¶¨Î»ÊÇÒµÎñרÊôµÄ·´Ïò´úÀí£¬Äܹ»ÊµÏÖ×Ô¶¯À©ËõÈÝ£¬ÃæÏòµÄ
upstream Ö÷ÒªÊÇ Jetty ÒµÎñÈÝÆ÷¡£
ÓÉÓÚËÄ²ã¸ºÔØ¾ùºâ²ÉÓõÄÊÇ FullnatLVS£¬ÕæÕýµÄÖÕ¶Ë ip µØÖ·ÒѾ±»Òþ²ØÆðÀ´ÁË£¬ÐèÒª´Ó TCPoption
ÖлñÈ¡¡£realserver ĬÈÏÈ¡µ½µÄÊÇ LVS µÄ local ip µØÖ·£¬ÐèҪʹÓà TOA Ä£¿éÀ´»ñÈ¡ÖÕ¶Ë
ip¡£
¿ªÔ´°æ±¾µÄ TOA һֱûÓÐÉý¼¶£¬Îª´ËÎÒÃǽ«ÆäÒÆÖ²µ½ 3.16£¬¶ÔÓÚ´ó¶àÊýÒµÎñÀ´Ëµ£¬¿Í»§¶Ë ip
µØÖ·ÊDz»¿É»òȱµÄ¡£
ÔÚ°Ñ nginx ÈÝÆ÷»¯Ö®ºó£¬²ÈÁËһЩ¿Ó£¬ÆäÖÐÒ»¸öÊÇÑÓ³Ù¹ý¸ß¡£´Ó access.log ¿´£¬upstream
µÄ RT ʱ¼ä³¤´ï¼¸Ã룬¶øÖ±½Ó·ÃÎÊ upstream Pod ·þÎñÓÖÊǺܿìµÄ£¬ËµÃ÷ÊÇ nginx µÄÎÊÌâ¡£¾·ÖÎöºó·¢ÏÖÅäÖò»ºÏÀí£¬nginx
ÈÝÆ÷»¯Ö®ºóȱÉÙ¶Ô worker ÊýÁ¿ºÍÇ׺ÍÐÔµÄÓÅ»¯¡£
°´ÕÕĬÈÏÅäÖã¬Ò»Ì¨24ºË CPU µÄ»úÆ÷ÉÏ£¬¶ÔÓÚÒ»¸öÒµÎñµÄ nginx£¬×Ô¶¯ÅäÖÃΪ
24¸ö worker ½ø³Ì£¬¶ø cpu limit ÍùÍùÖ»ÉèÖÃ³É 5¡¢6¸öºË£¬worker ûÓÐ cpu
×ÊÔ´µ¼Ö¸ßÑÓ³Ù¡£Í¬Ê±£¬µ÷Õû worker ½ø³ÌµÄÇ׺ÍÐÔ£¬·ÀֹѹÁ¦¶Ñ»ýÔÚǰ¼¸¸öºËÉÏ¡£

Nginx ¶¯Ì¬ËõÈÝÐ迼ÂÇÈáÐÔ£¬±ÈÈçijҵÎñÔÀ´ÓÐ3¸ö Nginx ÈÝÆ÷£¬ÏÖÔÚÒªËõ³É2¸ö£¬±»Í£µôÕâ¸ö
Nginx ÈÝÆ÷ÐèÒª×öһЩÓÅÑÅÍ˳öµÄ×¼±¸¹¤×÷£¬·ñÔò¿ÉÄܵ¼Ö·þÎñÕûÌåÏìÓ¦ÑÓ³Ù¶¸Ôö¡£
Õâ¸ö POD Ò»¿ªÊ¼¾Í´Ó LB Éϱ»ÕªµôÁË£¬ÎÒÃÇÀûÓà Pod µÄ prestop hook£¬µÈ´ý²¢ÓÅÑÅÍ˳ö¡£
À©ÈÝʱ£¬ÐèÒª¿¼ÂÇÆô¶¯Ê±¼äºÍÈÈÉíÎÊÌâ¡£ÓеÄÒµÎñ¿ÉÄÜÐèÒª¼¸Ãë»ò¼¸Ê®Ã룬ҪÓгä×ãµÄ³õʼ»¯Ê±¼ä£¬·ñÔò£¬ÇëÇó¹ýÈ¥¾Í»áʧ°Ü¡£
Èç¹û Probe Timeout ÉèÖõñȽÏС£¬»áµ¼Ö Pod ±»Ç¿ÖÆÖØÆô»òÕßÕª³ý£¬µ¼ÖÂÕûÌå·þÎñµÄÑ©±À¡£ÔÚʵ¼ÊÔËÐйý³ÌÖУ¬Ó¦¸ù¾Ý¼à¿ØÇé¿ö¶Ô
CPU request ºÍ Hpa ÅäÖóÖÐøÓÅ»¯¡£
5¡¢¼à¿Ø/¸æ¾¯/ÈÕÖ¾ 
¼à¿Ø²ÉÓõÄÊÇ prometheus£¬¿ªÏä¼´ÓõÄÕûÌå·½°¸¡£²¿Êð·½ÃæÊÇÔÚ k8s Éϲ¿Êð³É Daemonsets
»òÕß Deployment£¬Õë¶ÔÆäÌØµã»áµ÷¶Èµ½Ìض¨µÄ»úÐÍ£¬Í¨¹ýÀàÐͲð·Ö³É¼¸ÖÖ map À´·½±ã¹ÜÀí¡£
¼à¿ØÖ¸±ê°üÀ¨Á½¸ö·½Ã棬һ¸öÊÇÓ²Ö¸±ê£¬ÀýÈ磬´Ó nginx »ñÈ¡µ±Ç°ÒµÎñµÄqps¡¢http code
·Ö²¼¡¢µ±Ç°Õû¸öÒµÎñµÄ×ÊÔ´ÏûºÄÇé¿öÒÔ¼°ºó¶ËµÄ jetty ÏûºÄÇé¿ö¡£
ÁíÒ»·½ÃæÊÇÒµÎñµÄÈíÖ¸±ê£¬Ö¸µÄÊÇÄÚ²¿Ö¸±ê£¬Ö÷Òª°üÀ¨ jvm µÄÖ¸±ê£¬ÄÚ²¿µÄlogger Ïà¹Ø£¬Èç error
¼ÆÊýÆ÷¡£
ÈÕÖ¾µÄ´¦ÀíÊÇÊÕ¼¯µ½ elasticsearch ´¦ÀíµÄ¡£ES µÄ²¿ÊðºÍ prometheus ÀàËÆÒ²ÊÇ
POD µÄ·½Ê½¡£²¿Êð ES µÄ datanode¡¢master ºÍ client ÐèÒª¹Ø×¢Ïß³ÌÊý¾ÝºÍ
CPU limit µÄÆ¥ÅäÎÊÌâ¡£
ÈÕÖ¾ÊÕ¼¯ÈÝÆ÷ÊÔ¹ýʹÓà fluentd ½øÐÐÊÕ¼¯£¬ÓëÒµÎñÈÝÆ÷¹²ÏíÒ»¸ö´æ´¢£¬·¢ÏÖÓÐÈÕÖ¾ÖͺóºÍ×ÊÔ´ÏûºÄ¸ßµÄÎÊÌâ¡£ÓÃ
filebeat ÈÝÆ÷Ìæ´ú fluentd Ö®ºó,×ÊÔ´Õ¼ÓÃÂʺÜС£¬ÏûºÄ²»µ½0.1ºË¡¢ÄÚ´æ²»µ½ 100M
¾Í¿ÉÒÔʵÏֱȽϺõÄÈÕÖ¾´«ÊäЧ¹û¡£
6¡¢ÒµÎñ·¢²¼/¾µÏñ/¶à»ú·¿ 
ÒµÎñ·¢²¼¿¼Âǵ½Ð§Âʺͽ»»¥ÐÔ£¬ÐèÒª¸øÓû§Ìṩһ¸ö½»»¥½çÃæ£¬Äܹ»Éú³É k8sµÄ×ÊÔ´ÃèÊöÎļþ£¬²¢ÄÜÖ´ÐоßÌåµÄ
Action£¬Èç´´½¨/¸üÐÂ/ɾ³ý¡£
ʵÏÖÉÏÊÇͨ¹ý json schema µÄ·½Ê½À´ÃèÊöËùÓвÎÊý£¬Ä¬ÈÏÖµ+½áºÏÓû§ÊäÈë×îÖÕÉú³É k8s
µÄ×ÊÔ´ÃèÊöÎļþ¡£
ÀûÓà ansible µ÷Óà kubectl À´ÊµÏÖ×Ô¶¯»¯²¿Êð¡£ÊµÏÖÁ˲¿Êð½ø¶È£¬·¢²¼ÀúÊ·¹ÜÀí£¬Ä£°å»¯²¿Êð¡£¶ÔÓڶ༯Ⱥ¹ÜÀí£¬ansible
ͨ¹ýÇл»²»Í¬ k8s ¼¯ÈºµÄ context£¬·¢²¼ÒµÎñµ½²»Í¬»ú·¿¡£
¶ÔÓÚ¾µÏñµÄÑ¡ÔñÎÒÃǵÄÔÔò¾ÍÊǹ»Ð¡¡¢¹»Óã¬ÎªÁ˱£Ö¤¼æÈÝÐÔÎÒÃǼÓÈë glibc Ö§³Ö¡£Docker ÆäÊµÍÆ¼öÖ»ÅÜÒ»¸ö½ø³Ì£¬µ«ºÜ¶àÒµÎñ¶¼ÊÇÐèÒª¶à¸ö½ø³ÌÅäºÏµÄ£¬S6
ÓÃÓÚÓ¦¶ÔÕâÖÖ³¡¾°£¬×÷Ϊ½ø³ÌºÍ·þÎñµÄ¹ÜÀíÆ÷À´ÊµÏÖһЩ±È½Ï¸´ÔӵŦÄÜ¡£
×ܵÄÀ´Ëµ£¬ÕâÊÇÒ»Ì׵ͳɱ¾µÄ˽ÓÐÔÆÊµÏÖ·½°¸£¬ºËÐIJ¿·Ö³ÖÐøÏíÊܵ½ k8s µÄºìÀû£¬¿ÉÒÔ¼¯ÖÐÁ¦Á¿½â¾ö 4/7
²ã¸ºÔؾùºâ¼°Ò»Ð©·Ç¹¦ÄÜÐÔÎÊÌ⡣ͬʱ£¬ÀûÓÃk8sºËÐÄϵͳµÄÄÜÁ¦£¬¿ìËÙ¹¹½¨Íⲿ֧³Åϵͳ£¬Èç¼à¿Ø¡¢¸æ¾¯¡¢ÈÕÖ¾¡¢·¢²¼ÏµÍ³µÈ£¬Ôںܴó³Ì¶ÈÉÏÌá¸ßÁËЧÂʺͿÉά»¤ÐÔ¡£
|