±à¼ÍƼö: |
±¾ÎÄÀ´Ô´infoq£¬±¾ÎĽéÉÜÁËÒ»×éʹÈÝÆ÷¸üÒ×ÓÚÔËάµÄ×î¼Ñʵ¼ù¡£ |
|
ÕâЩʵ¼ùÉæ¼°°²È«ÐÔ¡¢¼à¿ØºÍÈÕÖ¾¼Ç¼µÈ¹ã·ºµÄÖ÷Ì⣬ּÔÚʹӦÓóÌÐò¸üÈÝÒ×ÔÚKubernetes
Engine ºÍÒ»°ãµÄÈÝÆ÷ÖÐÔËÐС£ÕâÀïÌÖÂÛµÄÐí¶àʵ¼ù¶¼Êܵ½12Òò×Ó·½·¨µÄÆô·¢ £¬12ÒòËØ·½·¨ÊÇÒ»¸ö¹¹½¨ÔÆÔÉúÓ¦ÓóÌÐòµÄÓÅÖÊ×ÊÔ´¡£
ÕâЩ×î¼Ñʵ¼ùµÄÖØÒªµÈ¼¶²»Ò»Ñù¡£ÀýÈ磬¶ÔÓÚÓÐЩʵ¼ù£¬Äã¿ÉÄÜÔÚȱÉÙËûÃǵÄÇé¿öÏÂÔÚÉú²ú»·¾³Öгɹ¦ÔËÐУ¬µ«ÁíÍâһЩʵ¼ùÊDz»¿É»òȱµÄ¡£ÌرðÊÇ£¬Ó밲ȫÏà¹ØµÄ×î¼Ñʵ¼ùµÄÖØÒªÐÔÊÇÖ÷¹ÛµÄ£¬ÊÇ·ñʵÏÖËüÃÇÈ¡¾öÓÚÄãµÄ»·¾³ºÍÔ¼Êø¡£
ÕâЩʵ¼ù²¢²»ÊʺÏÁã»ù´¡µÄ¶ÁÕߣ¬ÄãÐèÒªÊÂÏÈÁ˽âDocker ºÍKubernetes µÄһЩ֪ʶ¡£´Ë´¦ÌÖÂÛµÄһЩ×î¼Ñʵ¼ùÒ²ÊÊÓÃÓÚWindowsÈÝÆ÷£¬µ«´ó¶àÇé¿öÏÂÊý¼ÙÉèÄãʹÓõÄÊÇLinuxÈÝÆ÷¡£Óйع¹½¨ÈÝÆ÷µÄ½¨Ò飬Çë²ÎÔĹ¹½¨ÈÝÆ÷µÄ×î¼Ñʵ¼ù¡£
ʹÓÃÈÝÆ÷µÄÔÉúÈÕÖ¾¼Ç¼»úÖÆ
ÖØÒªÐÔ£º¸ß
×÷ΪӦÓóÌÐò¹ÜÀíµÄÒ»²¿·Ö£¬ÈÕÖ¾Öаüº¬±¦¹óµÄÐÅÏ¢£¬¿ÉÈÃÈËÁ˽âÓ¦ÓóÌÐòÖз¢ÉúµÄʼþ¡£Docker ºÍKubernetes
ÖÂÁ¦ÓÚ¼ò»¯ÈÕÖ¾¹ÜÀí¡£
ÔÚ´«Í³·þÎñÆ÷ÉÏ£¬Äã¿ÉÄÜÐèÒª½«ÈÕ־дÈëÌØ¶¨Îļþ²¢´¦ÀíÈÕÖ¾ÂÖ»»ÒÔ±ÜÃâÌîÂú´ÅÅÌ¡£Èç¹ûÓи߼¶ÈÕ־ϵͳ£¬Ôò¿ÉÒÔ½«ÕâЩÈÕ־ת·¢µ½Ô¶³Ì·þÎñÆ÷À´¼¯ÖÐËüÃÇ¡£
ͨ¹ýÈÝÆ÷¿ÉÒÔ½«ÈÕ־дÈëstdout ºÍstderr£¬Òò¶øÈÝÆ÷ÌṩÁËÒ»ÖÖ¼òµ¥ÇÒ±ê×¼»¯µÄ·½Ê½À´´¦ÀíÈÕÖ¾¡£Docker
²¶»ñÕâЩÈÕÖ¾ÐУ¬²¢ÔÊÐíÄãʹÓÃdocker logs ÃüÁî·ÃÎÊËüÃÇ¡£×÷ΪӦÓóÌÐò¿ª·¢ÈËÔ±£¬Äã²»ÐèҪʵÏָ߼¶ÈÕÖ¾¼Ç¼»úÖÆ£¬ÊÔÊÔÓÃÔÉúµÄÈÕÖ¾¼Ç¼»úÖÆ°É¡£
ƽ̨ÔËÓªÉ̱ØÐëÌṩһ¸öϵͳÀ´¼¯ÖÐÈÕÖ¾²¢½øÐÐËÑË÷£¬Äã¿ÉÒÔʹÓÃKubernetes Engine ÌṩµÄ
fluentd ºÍ Stackdriver Logging¡£ÆäËû³£¼û·½·¨°üÀ¨Ê¹Óà EFK £¨Elasticsearch£¬Fluentd£¬Kibana£©Õ»¡£

ͼ1. Kubernetes ÖеäÐ͵ÄÈÕÖ¾¹ÜÀíϵͳͼ
JSON ÈÕÖ¾
´ó¶àÊýÈÕÖ¾¹ÜÀíϵͳʵ¼ÊÉÏÊÇʱÐòÊý¾Ý¿â£¬ÓÃÓڴ洢ʱ¼äË÷ÒýÎĵµ¡£ÕâЩÎĵµÍ¨³£ÒÔJSON ¸ñʽÌṩ¡£ÔÚStackdriver
Logging ºÍEFK ÖУ¬µ¥¸öÈÕÖ¾ÐкÍһЩԪÊý¾Ý£¨ÈÝÆ÷×é¡¢ÈÝÆ÷¡¢½ÚµãµÈÏà¹ØÐÅÏ¢£©Ò»Æð±»´æ´¢ÎªÒ»¸öÎĵµ¡£
Äã¿ÉÒÔÖ±½Óͨ¹ý½«²»Í¬×Ö¶ÎÒÔJSON ¸ñʽ½øÐÐÈÕÖ¾¼Ç¼¡£È»ºó£¬¿ÉÒÔ¸ù¾ÝÕâЩ×ֶθüÓÐЧµØËÑË÷ÈÕÖ¾¡£
ÀýÈ磬¿¼Âǽ«ÒÔÏÂÈÕ־ת»»ÎªJSON¸ñʽ£º
[2018-01-01
01:01:01] foo - WARNING - foo.bar - There is
something wrong. |
ÕâÊÇת»»ºóµÄÈÕÖ¾£º
{
"date": "2018-01-01 01:01:01",
"component": "foo",
"subcomponent": "foo.bar",
"level": "WARNING",
"message": "There is something
wrong."
} |
ͨ¹ýÕâÖÖת»»£¬Äã¿ÉÒÔÔÚÈÕÖ¾ÖÐÇáËÉËÑË÷ËùÓÐ WARNING ¼¶±ðÈÕÖ¾»òfoo.bar ×é¼þÖеÄËùÓÐÈÕÖ¾¡£
Èç¹ûÄã¾ö¶¨¼Ç¼JSON ¸ñʽµÄÈÕÖ¾£¬Çë×¢Òâ±ØÐëÔÚÿһÐÐÉϼÓÈëʼþ²ÅÄÜÕýÈ·½âÎö¡£ÔÚʵ¼ÊÖУ¬Ëü¿´ÆðÀ´ÊÇÏÂÃæÕâÑù£º
{"date":"2018-01-01
01:01:01","component":"foo","subcomponent":
"foo.bar","level":
"WARNING","message": "
There is something
wrong."} |
ÈçÄãËù¼û£¬½á¹ûÔ¶²»ÈçÕý³£µÄÈÕÖ¾¿É¶Á¡£Èç¹û¾ö¶¨Ê¹Óô˷½·¨£¬ÇëÈ·±£ÄãµÄÍŶӲ»»áÑÏÖØÒÀÀµÊÖ¶¯ÈÕÖ¾¼ì²é¡£
±ß³µÄ£Ê½µÄ¼Ç¼¾ÛºÏÆ÷
ijЩӦÓóÌÐò£¨Èç Tomcat£©ÎÞ·¨Í¨¹ý¼òµ¥ÅäÖÃÀ´Éú³ÉÈÕÖ¾¡£ÕâЩӦÓóÌÐòÔÚ´ÅÅÌÉÏдÈ벻ͬµÄÈÕÖ¾Îļþ£¬ËùÒÔÔÚKubernetes
Öд¦ÀíËüÃǵÄ×î¼Ñ·½·¨ÊÇʹÓñ߳µÄ£Ê½½øÐÐÈÕÖ¾¼Ç¼¡£±ß³µÊÇÒ»¸öСÈÝÆ÷£¬ÓëÓ¦ÓóÌÐòÔÚͬһ¸öpodÖÐÔËÐС£Óйر߳µµÄ¸üÏêϸÐÅÏ¢£¬Çë²ÎÔÄKubernetes
¹Ù·½Îĵµ¡£
ÔÚÕâÖÖ½â¾ö·½°¸ÖУ¬ÄãΪӦÓóÌÐòµÄ±ß³µÈÝÆ÷Ìí¼ÓÒ»¸öÈÕÖ¾´úÀí£¨ÔÚͬһpodÖУ¬£©²¢ÔÚÁ½¸öÈÝÆ÷Ö®¼ä¹²Ïí
emptyDir ¾í£¬Ê¾Àý£ºGitHub ÉϵÄÕâ¸öYAML ʾÀý¡£È»ºó£¬ÅäÖÃÓ¦ÓóÌÐò½«ÈÕ־дÈë¹²Ïí¾í£¬½Ó×ÅÅäÖÃÈÕÖ¾´úÀí½øÐжÁÈ¡£¬²¢×ª·¢µ½ÐèÒªµÄµØ·½¡£
ÔÚ´ËģʽÖУ¬ÒòΪûÓÐʹÓÃDocker ºÍKubernetes ÔÉúµÄÈÕÖ¾¼Ç¼»úÖÆ£¬ËùÒÔ±ØÐë´¦ÀíÈÕÖ¾ÂÖ»»¡£Èç¹ûÄãµÄÈÕÖ¾´úÀí³ÌÐò²»´¦ÀíÈÕÖ¾ÂÖ»»£¬ÔòͬһpodÖеÄÁíÒ»¸ö±ß³µÈÝÆ÷»á´¦Àí¡£

ͼ2.ÈÕÖ¾¹ÜÀíµÄ±ß³µÄ£Ê½
È·±£ÈÝÆ÷ÊÇÎÞ״̬ÇÒ²»¿É±äµÄ
ÖØÒªÐÔ£º¸ß
Èç¹ûÄãÊǵÚÒ»´Î³¢ÊÔÈÝÆ÷£¬Çë²»Òª½«ËüÃÇÊÓΪ´«Í³·þÎñÆ÷¡£±ÈÈ磬Äã¿ÉÄÜÏëÒªÔÚÕýÔÚÔËÐеÄÈÝÆ÷ÄÚ¸üÐÂÓ¦ÓóÌÐò£¬»òÕßÔÚ³öÏÖ©¶´Ê±¸øÕýÔÚÔËÐеÄÈÝÆ÷´ò²¹¶¡¡£´Ó¸ù±¾ÉÏ˵£¬ÈÝÆ÷²»ÊÇÒÔÕâÖÖ·½Ê½¹¤×÷µÄ¡£ËüÃDZ»Éè¼Æ³ÉÁËÎÞ״̬ÇÒ²»¿É¸Ä±ä¡£
ÎÞ״̬
ÎÞ״̬Òâζ×ÅÈκÎ״̬£¨ÈκÎÀàÐ͵ij־ÃÊý¾Ý£©¶¼´æ´¢ÔÚÈÝÆ÷Ö®Íâ¡£Õâ¸öÍⲿ´æ´¢¿ÉÒÔ²ÉÈ¡¶àÖÖÐÎʽ£¬¾ßÌåÈ¡¾öÓÚÄãµÄÐèÇó£º
1.Òª´æ´¢Îļþ£¬ÎÒÃǽ¨ÒéʹÓÃCloud StorageµÈ¶ÔÏó´æ´¢¡£
2.Òª´æ´¢Óû§»á»°µÈÐÅÏ¢£¬ÎÒÃǽ¨ÒéʹÓÃÍⲿµÄµÍÑÓ³Ù¼üÖµ´æ´¢£¬ÀýÈç
Redis »òMemcached¡£
3.Èç¹ûÐèÒª¿é¼¶´æ´¢£¨ÀýÈçÊý¾Ý¿â£©£¬Ôò¿ÉÒÔʹÓÃÁ¬½Óµ½ÈÝÆ÷µÄÍⲿ´ÅÅÌ¡£¶ÔÓÚKubernetes
Engine£¬ÎÒÃǽ¨ÒéʹÓà ³Ö¾Ã»¯´ÅÅÌ¡£
ͨ¹ýÒÔÉÏ·½·¨½«Êý¾Ý´ÓÈÝÆ÷±¾ÉíÖÐÒÆ³ö£¬ÕâÒâζ×Å¿ÉÒÔËæÊ±¸É¾»µØ¹Ø±ÕºÍÏú»ÙÈÝÆ÷£¬¶ø²»±Øµ£ÐÄÊý¾Ý¶ªÊ§¡£Èç¹û´´½¨ÁËÒ»¸öÐÂÈÝÆ÷À´Ìæ»»¾ÉÈÝÆ÷£¬ÔòÖ»Ð轫ÐÂÈÝÆ÷Á¬½Óµ½Í¬Ò»Êý¾Ý´æ´¢Çø»ò½«Æä°ó¶¨µ½Í¬Ò»´ÅÅ̼´¿É¡£
²»±äÐÔ
²»¿É±äÒâζ×ÅÈÝÆ÷ÔÚÆäÉúÃüÖÜÆÚÄÚ²»»á±»Ð޸ģºÃ»ÓиüУ¬Ã»Óв¹¶¡£¬Ã»ÓÐÅäÖøü¸Ä¡£Èç¹û±ØÐë¸üÐÂÓ¦ÓóÌÐò´úÂë»ò´ò²¹¶¡£¬ÔòÐèÒª¹¹½¨Ð¾µÏñ²¢ÖØÐ²¿Êð¡£²»±äÐÔʹ²¿Êð¸ü°²È«£¬¸ü¿ÉÖØ¸´¡£Èç¹ûÐèÒª»Ø¹ö£¬Ö»ÐèÖØÐ²¿Êð¾É¾µÏñ¼´¿É¡£´Ë·½·¨ÔÊÐíÄãÔÚÿ¸ö»·¾³Öв¿ÊðÏàͬµÄÈÝÆ÷¾µÏñ£¬Ê¹ËüÃǾ¡¿ÉÄÜÒ»Ö¡£
ΪÁËÔÚ²»Í¬»·¾³ÖÐʹÓÃÏàͬµÄÈÝÆ÷¾µÏñ£¬ÎÒÃǽ¨ÒéÄãÍⲿ»¯ÈÝÆ÷ÅäÖã¨ÕìÌý¶Ë¿Ú£¬ÔËÐÐʱѡÏîµÈ£©¡£ÈÝÆ÷ͨ³£ÅäÖÃÓл·¾³±äÁ¿»ò¹ÒÔØµ½Ìض¨Â·¾¶ÉϵÄÅäÖÃÎļþ¡£ÔÚKubernetesÖУ¬Äã¿ÉÒÔʹÓñ£ÃÜ×ÖµäºÍÅäÖü¯×÷Ϊ»·¾³±äÁ¿»òÎļþ½«ÅäÖÃ×¢Èëµ½ÈÝÆ÷ÖС£
Èç¹ûÐèÒª¸üÐÂÅäÖã¬ÇëʹÓøüеÄÅäÖò¿ÊðÐÂÈÝÆ÷£¨»ùÓÚÏàͬµÄ¾µÏñ£©¡£

ͼ3. ÈçºÎ¸üн«ÅäÖü¯¹ÒÔØÎªÈÝÆ÷×éÖеÄÅäÖÃÎļþµÄ²¿ÊðÖеÄÅäÖÃ
ÎÞ״̬ºÍ²»±äÐԵĽáºÏÊÇ»ùÓÚÈÝÆ÷µÄ»ù´¡ÉèÊ©µÄÂôµãÖ®Ò»¡£ÕâÖÖ×éºÏÔÊÐíÄã×Ô¶¯»¯²¿Êð²¢Ìá¸ßÆäƵÂʺͿɿ¿ÐÔ¡£
±ÜÃâʹÓÃÌØÈ¨ÈÝÆ÷
ÖØÒªÐÔ£º¸ß
ÔÚÐéÄâ»ú»òÂã»ú·þÎñÆ÷ÖУ¬Äã»á±ÜÃâʹÓÃroot Óû§ÔËÐÐÓ¦ÓóÌÐò£¬ÔÒòºÜ¼òµ¥£ºÈç¹ûÓ¦ÓóÌÐòÊܵ½¹¥»÷£¬¹¥»÷Õ߾ͿÉÒÔÍêÈ«·ÃÎÊ·þÎñÆ÷¡£³öÓÚͬÑùµÄÔÒò£¬Çë±ÜÃâʹÓÃÌØÈ¨ÈÝÆ÷¡£ÌØÈ¨ÈÝÆ÷ÊÇÒ»¸öÈÝÆ÷£¬¿ÉÒÔ·ÃÎÊÖ÷»úµÄËùÓÐÉ豸£¬ÈƹýÈÝÆ÷µÄ¼¸ºõËùÓа²È«¹¦ÄÜ¡£
Èç¹ûÄãÈÏΪÐèҪʹÓÃÌØÈ¨ÈÝÆ÷£¬Ç뿼ÂÇÒÔϱ¸Ñ¡·½°¸£º
1.ͨ¹ý Kubernetes µÄsecurityContextÑ¡Ïî»òDocker
µÄ--cap-add ±ê־ΪÈÝÆ÷Ìá¹©ÌØ¶¨¹¦ÄÜ ¡£¸Ã Docker Îĵµ ͬʱÁгöÁËĬÈÏÆôÓúͱØÐëÃ÷È·ÆôÓõŦÄÜ¡£
2.Èç¹ûÄãµÄÓ¦ÓóÌÐò±ØÐëÐÞ¸ÄÖ÷»úÉèÖòÅÄÜÔËÐУ¬ÇëÔڱ߳µÈÝÆ÷»ò³õʼ»¯ÈÝÆ÷ÖÐÐÞ¸ÄÕâЩÉèÖÃ
¡£ÓëÄãµÄÓ¦ÓóÌÐò²»Í¬£¬ÕâЩÈÝÆ÷²»ÐèÒª±©Â¶ÓÚÄÚ²¿»òÍⲿÁ÷Á¿£¬¸ü¼Ó¶ÀÁ¢¡£
3.Èç¹ûÐèÒªÔÚKubernetes ÖÐÐÞ¸Äsysctls£¬ÇëʹÓÃ
רÓÃ×¢½â¡£
ÔÚKubernetes ÖУ¬ÌØÈ¨ÈÝÆ÷¿ÉÒÔ±»Ìض¨µÄPod°²È«²ßÂÔ½ûÖ¹ ¡£Pod°²È«²ßÂÔÊǼ¯Èº¹ÜÀíÔ±ÅäÖú͹ÜÀíµÄKubernetes
¶ÔÏó£¬ËüÇ¿ÖÆÖ´ÐжÔpodµÄÌØ¶¨ÒªÇó¡£ÔÚKubernetes ¼¯ÈºÖУ¬ÄãÎÞ·¨´´½¨Î¥·´ÕâЩҪÇóµÄpod¡£
ʹӦÓóÌÐòÒ×ÓÚ¼à¿Ø
ÖØÒªÐÔ£º¸ß
ÓëÈÕÖ¾Ò»Ñù£¬¼à¿ØÊÇÓ¦ÓóÌÐò¹ÜÀíµÄÒ»¸ö×é³É²¿·Ö¡£ÔÚÐí¶à·½Ã棬¼à¿ØÈÝÆ÷»¯Ó¦ÓõÄÔÔòÓë·ÇÈÝÆ÷»¯Ó¦ÓÃµÄ¼à¿ØÏàͬ¡£µ«ÊÇ£¬ÓÉÓÚÈÝÆ÷»¯µÄ»ù´¡¼Ü¹¹ÍùÍùÊǸ߶ȶ¯Ì¬µÄ£¬°éËæ×ÅÆµ·±´´½¨»òɾ³ýµÄÈÝÆ÷£¬ÄãÎÞ·¨Ã¿´Î¶¼È¥ÖØÐÂÅäÖÃ¼à¿ØÏµÍ³¡£
Äã¿ÉÒÔÇø·ÖÁ½ÖÖÖ÷ÒªµÄ¼à¿ØÀàÐÍ£ººÚºÐ¼à¿ØºÍ°×ºÐ¼à¿Ø¡£ºÚºÐ¼à¿ØÊÇÖ¸´ÓÍⲿ¼ì²éÓ¦ÓóÌÐò£¬Äã¾ÍÊÇ×îÖÕÓû§¡£Èç¹ûÄãÏëÒª×îÖÕÌṩµÄ·þÎñ¿ÉÓÃÇÒÓÐЧ£¬ÔòºÚºÐ¼à¿Ø·Ç³£ÓÐÓá£ÓÉÓÚËüλÓÚ»ù´¡ÉèÊ©Íⲿ£¬Òò´ËºÚºÐ¼à¿ØÔÚ´«Í³»ù´¡ÉèÊ©ºÍÈÝÆ÷»¯»ù´¡Éèʩ֮¼äûÓÐÇø±ð¡£
°×ºÐ¼à¿ØÊÇָʹÓÃijÖÖÌØÈ¨·ÃÎʼì²éÓ¦ÓóÌÐò£¬²¢ÊÕ¼¯×îÖÕÓû§ÎÞ·¨²é¿´µÄ¶ÈÁ¿Ö¸±ê¡£ÓÉÓÚ°×ºÐ¼à¿Ø±ØÐë¼ì²é»ù´¡¼Ü¹¹µÄ×îÉî²ã£¬Òò´Ë´«Í³»ù´¡¼Ü¹¹ºÍÈÝÆ÷»¯»ù´¡¼Ü¹¹µÄ²îÒìºÜ´ó¡£
PrometheusÊÇKubernetes ÉçÇøÖÐÓÃÓÚ°×ºÐ¼à¿ØµÄÒ»¸öÁ÷ÐÐÑ¡Ôñ£¬¿ÉÒÔ×Ô¶¯·¢ÏÖ±ØÐë¼à¿ØµÄÈÝÆ÷¡£Prometheus
ÒÔÆÚÍûµÄÌØ¶¨¸ñʽ»ñÈ¡ÈÝÆ÷×éµÄÖ¸±ê¡£ Stackdriver Äܹ»¼à¿ØKubernetes¼¯Èº£¬Ó¦ÓÃÒ²¿ÉÒÔÔËÐÐ×Ô¼ºµÄµÄPrometheus
¡£Á˽âÈçºÎ ÔÚKubernetes EngineÉÏÆôÓÃStackdriver Kubernetes
Monitoring¡£
ÒÔÏÂÊÇÒ»¸öStackdriver Kubernetes MonitoringµÄÑÝʾʵÀý£º

ͼ4. Stackdriver Kubernetes MonitoringÖеÄÒDZí°å
Òª´ÓPrometheus »òStackdriver Kubernetes Monitoring ÖÐÊÜÒæ£¬Ó¦ÓóÌÐòÐèÒª°´ÕÕPrometheus
µÄ¸ñʽ¹«¿ªÖ¸±ê¡£Äã¿ÉÒÔ°´ÕÕÒÔÏÂÁ½ÖÖ·½·¨À´×ö¡£
HTTP¶Ëµã¶ÈÁ¿
HTTP ¶Ëµã¶ÈÁ¿µÄ¹¤×÷·½Ê½ÓëºóÃæÌáµ½µÄ¹«¿ªÓ¦ÓóÌÐòµÄÔËÐÐ×´¿öµÄ¶ËµãÀàËÆ ¡£Ëüͨ³£ÔÚ/metrics
URI ÉϹ«¿ªÓ¦ÓóÌÐòµÄÄÚ²¿Ö¸±ê¡£ÏìÓ¦ÈçÏ£º
http_requests_total{method="post",code="200"}
1027
http_requests_total{method="post",code="400"}
3
http_requests_total{method="get",code="200"}
10892
http_requests_total{method="get",code="400"}
97 |
ÔÚÕâ¸öÀý×ÓÖУ¬http_requests_total ÊǶÈÁ¿£¬method ºÍcode ÊDZêÇ©£¬×îÓұߵÄÊý×ÖÊǸÃÖ¸±ê¶ÔÓÚÕâЩ±êÇ©µÄÖµ¡£ÉÏͼÖÐËùʾ£¬×ÔÆô¶¯ÒÔÀ´£¬¸ÃÓ¦ÓóÌÐòÒÑʹÓÃ400´íÎóÂëÏìÓ¦ÁË97´ÎHTTP
µÄGET ÇëÇó¡£
ͨ¹ýÒÑÓеĶàÖÖÓïÑÔµÄPrometheus¿Í»§¶Ë¿â£¬¿ÉÒÔÇáËÉÉú³É´ËHTTP ¶Ëµã ¡£ OpenCensus
»¹¿ÉÒÔʹÓô˸ñʽ£¨ÒÔ¼°Ðí¶àÆäËû¹¦ÄÜ£©µ¼³öÖ¸±ê¡£²»Òª½«´Ë¶Ëµã±©Â¶¸ø¹«¹²ÍøÂç¡£
Prometheus ¹Ù·½Îĵµ Ïêϸ½éÉÜÁ˸ÃÖ÷Ìâ¡£Ä㻹¿ÉÒÔÔĶÁÕ¾µã¿É¿¿ÐÔ¹¤³ÌµÄµÚ6Õ £¬ÒÔÁ˽âÓйذ׺У¨ºÍºÚºÐ£©¼à¿ØµÄ¸ü¶àÐÅÏ¢¡£
ÓÃÓÚ¼à¿ØµÄ±ß³µÄ£Ê½
²¢·ÇËùÓÐÓ¦ÓóÌÐò¶¼¿ÉÒÔʹÓÃ/metrics HTTP ¶Ëµã½øÐмì²â¡£ÎªÁ˱£³Ö±ê×¼»¯¼à¿Ø£¬ÎÒÃǽ¨ÒéʹÓñ߳µÄ£Ê½ÒÔÕýÈ·µÄ¸ñʽµ¼³öÖ¸±ê¡£
ÈÕÖ¾¾ÛºÏ±ß³µÄ£Ê½ ²¿·Ö½éÉÜÈçºÎʹÓñ߳µÈÝÆ÷À´¹ÜÀíÓ¦ÓóÌÐòÈÕÖ¾¡£Äã¿ÉÒÔʹÓÃÏàͬµÄģʽ½øÐÐ¼à¿Ø£º±ß³µÈÝÆ÷ÍÐ¹Ü¼à¿Ø´úÀí³ÌÐò£¬¸Ã´úÀí³ÌÐò½«Ó¦ÓóÌÐò¹«¿ªµÄ¶ÈÁ¿±ê׼ת»»ÎªÈ«¾Ö¼à¿ØÏµÍ³¿ÉÒÔÀí½âµÄ¸ñʽºÍÐÒé¡£
¿¼ÂÇÒ»¸ö¾ßÌåʾÀý£ºJava Ó¦ÓóÌÐòºÍJava Management Extensions£¨JMX£©¡£Ðí¶àJava
Ó¦ÓóÌÐòʹÓÃJMX ¹«¿ªÖ¸±ê¡£ÀûÓÃjmx_exporter£¬Äã¿ÉÒÔ²»±ØÖØÐ´Ó¦ÓóÌÐò¾Í¹«¿ªPrometheus
¸ñʽµÄÖ¸±ê¡£jmx_exporter ͨ¹ýJMX ´ÓÓ¦ÓóÌÐòÊÕ¼¯Ö¸±ê£¬²¢Í¨¹ýPrometheus ¿ÉÒÔ¶ÁÈ¡µÄ/metrics
¶Ëµã¹«¿ªËüÃÇ¡£ÕâÖÖ·½·¨»¹¾ßÓÐÏÞÖÆJMX ¶Ëµã±©Â¶µÄÓŵ㣬ÒòΪËü¿ÉÒÔÓÃÀ´ÐÞ¸ÄÓ¦ÓóÌÐòÉèÖá£

ͼ5.ÓÃÓÚ¼à¿ØµÄ±ß³µÄ£Ê½
±©Â¶Ó¦ÓóÌÐòµÄ½¡¿µ×´¿ö
ÖØÒªÐÔ£ºÖеÈ
ΪÁ˱ãÓÚÔÚÉú²úÖнøÐйÜÀí£¬Ó¦ÓóÌÐò±ØÐ뽫Æä״̬´«´ï¸øÕû¸öϵͳ£ºÓ¦ÓóÌÐòÊÇ·ñÕýÔÚÔËÐУ¿Ëü½¡¿µÂð£¿Ëü×¼±¸ºÃ½ÓÊÕÁ÷Á¿Âð£¿ËüÊÇÈçºÎ±íÏֵģ¿
Kubernetes ÓÐÁ½ÖÖÀàÐ͵Ľ¡¿µ¼ì²é£º»îÐÔ̽Õ루liveness probes £©ºÍ¾ÍÐ÷̽Õ루readiness
probes£©¡£ÈçÏÂÎÄËùÊö£¬Ã¿¸ö¶¼ÓÐÌØ¶¨µÄÓÃ;¡£Äã¿ÉÒÔͨ¹ý¶àÖÖ·½Ê½ÊµÏÖÕâÁ½ÖÖ·½Ê½£¨°üÀ¨ÔÚÈÝÆ÷ÄÚÔËÐÐÃüÁî»ò¼ì²éTCP¶Ë¿Ú£©£¬µ«Ê×Ñ¡·½·¨ÊÇʹÓôË×î¼Ñʵ¼ùÖÐÃèÊöµÄHTTP
¶Ëµã¡£ÓйشËÖ÷ÌâµÄ¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄ KubernetesÎĵµ¡£
×¢Ò⣺±¾½ÚÖиø³öµÄ·¾¶Ö»ÊÇÒ»ÖÖÔ¼¶¨¡£HTTP ¶ËµãµÄʵ¼Ê·¾¶¿ÉÄÜÒòÓ¦ÓóÌÐò¶øÒì¡£
»îÐÔ̽Õë
ʵÏÖ»îÐÔ̽ÕëµÄÍÆ¼ö·½·¨ÊÇÈÃÓ¦ÓóÌÐò¹«¿ª/health HTTP ¶Ëµã¡£Ôڴ˶˵ãÉÏÊÕµ½ÇëÇóºó£¬Èç¹ûÈÏΪ½¡¿µ£¬Ó¦ÓóÌÐòÓ¦·¢ËÍ¡°200
OK¡±ÏìÓ¦¡£ÔÚKubernetes ÖУ¬½¡¿µÒâζ×ÅÈÝÆ÷²»ÐèÒª±»É±ËÀ»òÖØÐÂÆô¶¯¡£Ó°Ï콡¿µµÄÒòËØÒòÓ¦ÓóÌÐò¶øÒ죬µ«Í¨³£Òâζ×ÅÒÔÏÂÄÚÈÝ£º
1.Ó¦ÓóÌÐòÕýÔÚÔËÐС£
2.ËüµÄÖ÷ÒªÒÀÀµÐԵõ½Âú×㣨ÀýÈ磬Ëü¿ÉÒÔ·ÃÎÊÆäÊý¾Ý¿â£©¡£
¾ÍÐ÷̽Õë
ʵÏÖ¾ÍÐ÷̽ÕëµÄÍÆ¼ö·½·¨ÊÇÈÃÓ¦ÓóÌÐò¹«¿ª/ready HTTP ¶Ëµã¡£Ôڴ˶˵ãÉÏÊÕµ½ÇëÇóºó£¬Èç¹ûÓ¦ÓóÌÐòÒÑ×¼±¸ºÃ½ÓÊÕÁ÷Á¿£¬ÔòÓ¦·¢ËÍ¡°200
OK¡±ÏìÓ¦¡£×¼±¸½ÓÊÕÁ÷Á¿Òâζ×ÅÒÔÏÂÄÚÈÝ£º
1.¸ÃÓ¦ÓóÌÐòÊǽ¡¿µµÄ¡£
2.Íê³ÉÈκÎDZÔڵijõʼ»¯²½Öè¡£
3.·¢Ë͵½Ó¦ÓóÌÐòµÄÈκÎÓÐЧÇëÇó¶¼²»»áµ¼Ö´íÎó¡£
Kubernetes ʹÓþÍÐ÷̽ÕëÀ´±àÅÅÓ¦ÓóÌÐòµÄ²¿Êð¡£Èç¹û¸üв¿Êð£¬Kubernetes ½«¶ÔÊôÓڸò¿ÊðµÄpod½øÐйö¶¯¸üС£Ä¬ÈϸüвßÂÔÊÇÒ»´Î¸üÐÂÒ»¸öpod£ºKubernetes
ÔÚ¸üÐÂÏÂÒ»¸öpod֮ǰµÈ´ýÐÂpod×¼±¸¾ÍÐ÷£¨Èç¾ÍÐ÷̽ÕëËùʾ£©¡£
×¢Ò⣺ÔÚÐí¶àÓ¦ÓóÌÐòÖУ¬/health ºÍ/ready ¶ËµãºÏ²¢ÎªÒ»¸ö/health ¶Ëµã£¬ÒòΪËüÃǵĽ¡¿µ×´Ì¬ºÍ¾ÍÐ÷״̬֮¼äûÓÐÕæÕýµÄÇø±ð¡£
±ÜÃâÒÔroot Éí·ÝÔËÐÐ
ÖØÒªÐÔ£ºÖеÈ
ÈÝÆ÷Ìṩ¸ôÀ룺ʹÓÃĬÈÏÉèÖã¬Docker ÈÝÆ÷ÄڵĽø³ÌÎÞ·¨·ÃÎÊÀ´×ÔÖ÷»ú»òÆäËû²¢ÖÃÈÝÆ÷µÄÐÅÏ¢¡£µ«ÊÇ£¬ÓÉÓÚÈÝÆ÷¹²ÏíÖ÷»úµÄÄںˣ¬Òò´Ë¸ôÀë²»ÏñÐéÄâ»úÄÇÑùÍêÕû¡£¹¥»÷Õß¿ÉÒÔÕÒµ½Î´ÖªµÄ©¶´£¨ÔÚDocker
»òLinux Äں˱¾ÉíÖУ©£¬ÕâЩ©¶´½«ÔÊÐí¹¥»÷Õß´ÓÈÝÆ÷ÖÐÌÓÍÑ¡£Èç¹û¹¥»÷Õßȷʵ·¢ÏÖÁË©¶´²¢ÇÒÄãµÄ½ø³ÌÔÚÈÝÆ÷ÄÚÒÔroot
Éí·ÝÔËÐУ¬ÔòËûÃǽ«»ñµÃ¶ÔÖ÷»úµÄroot·ÃÎÊȨÏÞ¡£

ͼ6.×ó²à£¬Ðé??Äâ»úʹÓÃÐéÄ⻯Ӳ¼þ¡£ÓҲ࣬ÈÝÆ÷ÖеÄÓ¦ÓóÌÐòʹÓÃÖ÷»úÄںˡ£
Ϊ±ÜÃâÕâÖÖ¿ÉÄÜÐÔ£¬×î¼Ñ×ö·¨ÊDz»ÔÚÈÝÆ÷ÄÚÒÔroot Éí·ÝÔËÐнø³Ì¡£Äã¿ÉÒÔʹÓÃPodSecurityPolicyÔÚKubernetesÖÐÇ¿ÖÆÖ´ÐдËÐÐΪ
¡£ÔÚKubernetesÖд´½¨podʱ£¬Ê¹Óà runAsUser Ñ¡Ïî Ö¸¶¨ÕýÔÚÔËÐиýø³ÌµÄLinux
Óû§¡£ÕâÖÖ·½·¨»á¸²¸ÇDockerfile ÖеÄUSERÖ¸Áî¡£
ʵ¼ÊÉÏ£¬´æÔÚÌôÕ½¡£Ðí¶àÈí¼þ°ü¶¼ÒÔroot Éí·ÝÔËÐÐÆäÖ÷½ø³Ì¡£Èç¹ûÒª±ÜÃâÒÔroot Óû§Éí·ÝÔËÐУ¬Éè¼ÆÄãµÄÈÝÆ÷ʹÓÃδ֪µÄ·ÇÌØÈ¨Óû§ÔËÐС£ÕâÖÖ×ö·¨Í¨³£Òâζ×ÅÄã±ØÐëµ÷Õû¸÷ÖÖÎļþ¼ÐµÄȨÏÞ¡£ÔÚÈÝÆ÷ÖУ¬Èç¹û°´ÕÕÒ»¸öÈÝÆ÷Ò»¸öÓ¦ÓõÄ×î¼Ñʵ¼ù£¬²¢ÇÒÒ»¸öÓ¦ÓÃÒ»¸öÓû§£¨×îºÃ²»ÊÇroot
Óû§£©£¬ÔòÊÚÓèËùÓÐÓû§¶ÔÎļþ¼ÐºÍÎļþµÄ¶ÁдȨÏÞ²»ÊÇÎÊÌâ ¡£
¼ì²éÈÝÆ÷ÊÇ·ñ·ûºÏ´Ë×î¼Ñʵ¼ùµÄÒ»ÖÖ¼òµ¥·½·¨ÊÇÔÚ±¾µØÊ¹ÓÃËæ»úÓû§ÔËÐÐÈÝÆ÷²¢²âÊÔÊÇ·ñÕý³£¹¤×÷¡£Ìæ»»[YOUR_CONTAINER]ΪÄãµÄÈÝÆ÷Ãû³Æ¡£
docker
run --user $£¨£¨RANDOM + 1£©£©[YOUR_CONTAINER] |
Èç¹ûÈÝÆ÷ÐèÒªÍⲿ¾í£¬Ôò¿ÉÒÔÅäÖà fsGroup KubernetesÑ¡Ïî ÒÔ½«´Ë¾íµÄËùÓÐȨÊÚÓè¸øÌØ¶¨µÄLinux
×é¡£´ËÅäÖýâ¾öÁËÍⲿÎļþËùÓÐȨµÄÎÊÌâ¡£
Èç¹ûÄãµÄ½ø³ÌÓÉ·ÇÌØÈ¨Óû§ÔËÐУ¬ÔòËü½«ÎÞ·¨°ó¶¨µ½1024ÒÔϵĶ˿ڡ£Õâ²»ÊÇʲô´óÎÊÌ⣬ÒòΪÄã¿ÉÒÔÅäÖÃKubernetes
·þÎñ½«Á÷Á¿´ÓÒ»¸ö¶Ë¿Ú·Óɵ½ÁíÒ»¸ö¶Ë¿Ú¡£ÀýÈ磬Äã¿ÉÒÔÅäÖÃHTTP ·þÎñÆ÷°ó¶¨µ½8080¶Ë¿Ú£¬²¢Í¨¹ýKubernetes
·þÎñ´Ó80¶Ë¿Ú½«Á÷Á¿Öض¨Ïò»ØÀ´¡£
×ÐϸѡÔñ¾µÏñ°æ±¾
ÖØÒªÐÔ£ºÖеÈ
µ±ÄãʹÓÃDocker ¾µÏñʱ£¬ÎÞÂÛÊÇ×÷ΪDockerfile ÖеĻù´¡¾µÏñ£¬»¹ÊÇ×÷ΪKubernetesÖв¿ÊðµÄ¾µÏñ£¬Äã¶¼±ØÐëÑ¡ÔñÕýÔÚʹÓõľµÏñµÄ±êÇ©¡£
´ó¶àÊý¹«¹²ºÍ˽ÓоµÏñ¶¼×ñѹ¹½¨ÈÝÆ÷×î¼Ñʵ¼ùÖÐËùÊöµÄ±êǩϵͳ ¡£Èç¹û¾µÏñʹÓÃÓïÒå°æ±¾¿ØÖƵÄϵͳ £¬Ôò±ØÐ뿼ÂÇһЩ±êǩϸ½Ú¡£
×îÖØÒªµÄÊÇ£¬¡°latest¡±±êÇ©¿ÉÒÔÔÚ¾µÏñÖ®¼äƵ·±Òƶ¯¡£½á¹ûÊÇÄãÎÞ·¨ÒÀÀµ´Ë±êÇ©½øÐпÉÔ¤²â»ò¿ÉÖØÏֵĹ¹½¨¡£ÀýÈ磬²ÉÓÃÒÔÏÂDockerfile£º
FROM
debian:latest
RUN apt-get -y update && \
apt-get -y install nginx |
Èç¹ûÄãÔÚ²»Í¬µÄʱ¼äʹÓÃÕâ¸öDockerfile ¹¹½¨Á½´Î¾µÏñ£¬Äã×îÖÕ»áµÃµ½Á½¸ö²»Í¬°æ±¾µÄDebian
ºÍNGINX¡£Ïà·´£¬¿¼ÂÇÕâ¸öÐÞ¶©°æ£º
FROM
debian:9.4
RUN apt-get -y update && \
apt-get -y install nginx |
ͨ¹ýʹÓøü¾«È·µÄ±êÇ©£¬Äã¿ÉÒÔÈ·±£Éú³ÉµÄ¾µÏñʼÖÕ»ùÓÚDebian µÄÌØ¶¨×Ó°æ±¾¡£ÒòÎªÌØ¶¨µÄDebian
°æ±¾»¹¸½´øÁËÌØ¶¨µÄNGINX °æ±¾£¬ËùÒÔÄã¿ÉÒÔ¸üºÃµØ¿ØÖÆÕýÔÚ¹¹½¨µÄ¾µÏñ¡£
Õâ¸ö½á¹û²»½öÊÊÓÃÓÚ¹¹½¨Ê±£¬Ò²ÊÊÓÃÓÚÔËÐÐʱ¡£Èç¹ûÄãÔÚKubernetes Çåµ¥ÖÐÒýÓá°latest¡±±êÇ©£¬ÔòÎÞ·¨±£Ö¤Kubernetes
½«Ê¹Óõİ汾¡£¼¯ÈºµÄ²»Í¬½Úµã¿ÉÄÜ»áÔÚ²»Í¬Ê±¿ÌÀÈ¡ÏàͬµÄ¡°latest¡±±êÇ©¡£Èç¹û±êÇ©ÒѾÔÚÀ¶¯Ö®¼äµÄij¸öµã¸üУ¬Ôò×îÖÕ¿ÉÄÜ»áÔÚ²»Í¬µÄ½ÚµãÔËÐв»Í¬µÄ¾µÏñ£¨ÕâÊÇÒòΪͬʱ´òÉÏÁË¡°latest¡±±êÇ©£©¡£
ÀíÏëÇé¿öÏ£¬ÄãӦʼÖÕÔÚFROM ÐÐÖÐʹÓò»¿É±ä±êÇ©¡£´Ë±êÇ©ÔÊÐíÄãÖØÏÖ¹¹½¨¡£µ«ÊÇ£¬´æÔÚһЩ°²È«ÐÔȨºâ£ºÄã¹Ì¶¨Ê¹Óõİ汾Խ¶à£¬°²È«²¹¶¡ÔÚ¾µÏñÖеÄ×Ô¶¯»¯³Ì¶È¾ÍÔ½µÍ¡£Èç¹ûÄãʹÓõľµÏñʹÓÃÕýÈ·µÄÓïÒå°æ±¾¿ØÖÆ£¬Ôò²¹¶¡°æ±¾£¨¼´¡°X.Y.Z¡±Öеġ°Z¡±£©²»Ó¦¾ßÓÐÏòºó²»¼æÈݵĸü¸Ä£ºÄã¿ÉÒÔʹÓá°X.Y¡±±êÇ©²¢×Ô¶¯ÐÞ¸´´íÎó¡£
×¢Ò⣺±êÇ©ÔÚDocker Öв»ÊÇÕæÕý²»±äµÄ¡£Ö»Òª¾µÏñµÄËùÓÐÕß¾ö¶¨¸ü¸Ä±êÇ©¡£µ«ÊÇ£¬¡°X.Y.Z¡±±êǩʵ¼ÊÉϼ¸ºõ×ÜÊDz»±äµÄ¡£
ÉèÏëÒ»ÏÂÃûΪ¡°SuperSoft¡±µÄÈí¼þ¡£¼ÙÉèSuperSoft µÄ°²È«¹ý³ÌÊÇͨ¹ýеIJ¹¶¡°æ±¾À´ÐÞ¸´Â©¶´¡£ÄãÏë×Ô¶¨ÒåSuperSoft£¬²¢±àдÁËÒÔÏÂDockerfile£º
FROM
supersoft:1.2.3
RUN a-command |
Ò»¶Îʱ¼äºó£¬¹©Ó¦ÉÌ·¢ÏÖÁËÒ»¸ö©¶´£¬²¢·¢²¼ÁËSuperSoft µÄ1.2.4°æ±¾À´½â¾öÕâ¸öÎÊÌâ¡£ÔÚÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔËæÊ±Á˽âSuperSoft
µÄ²¹¶¡²¢ÏàÓ¦µØ¸üÐÂDockerfile¡£Èç¹ûÄãÔÚDockerfile ÖÐʹÓà FROM supersoft:1.2
½øÐÐÌæ»»£¬Ôò»á×Ô¶¯Àȡа汾¡£
×îºó£¬Äã±ØÐë×Ðϸ¼ì²éÕýÔÚʹÓõÄÿ¸öÍⲿ¾µÏñµÄ±êǩϵͳ£¬Åж¨Äã¶Ô¹¹½¨ÕâЩ¾µÏñµÄÈËÔ±µÄÐÅÈγ̶ȣ¬²¢È·¶¨ÒªÊ¹ÓõıêÇ©¡£ |