Mga hulagway nga andam sa produksiyon para sa k8s

Kini nga istorya bahin sa kung giunsa namon gigamit ang mga sulud sa usa ka palibot sa produksiyon, labi na ang Kubernetes. Ang artikulo gipahinungod sa pagkolekta sa mga sukatan ug mga troso gikan sa mga sudlanan, ingon man usab sa paghimo og mga imahe.

Mga hulagway nga andam sa produksiyon para sa k8s

Kami gikan sa fintech nga kompanya nga Exness, nga nagpalambo sa mga serbisyo alang sa online nga pamatigayon ug mga produkto sa fintech alang sa B2B ug B2C. Ang among R&D adunay daghang lainlaing mga koponan, ang departamento sa pag-uswag adunay 100+ nga mga empleyado.

Nagrepresentar kami sa team nga responsable sa plataporma alang sa among mga developers sa pagkolekta ug pagpadagan sa code. Sa partikular, kami ang responsable sa pagkolekta, pagtipig ug pagreport sa mga sukatan, mga log, ug mga panghitabo gikan sa mga aplikasyon. Kami karon naglihok sa gibana-bana nga tulo ka libo nga mga sudlanan sa Docker sa usa ka palibot sa produksiyon, nagmintinar sa among 50 TB nga dagkong pagtipig sa datos, ug naghatag og mga solusyon sa arkitektura nga gitukod sa palibot sa among imprastraktura: Kubernetes, Rancher, ug lain-laing mga public cloud providers. 

Atong kadasig

Unsa ang nagdilaab? Walay makatubag. Asa ang apuyan? Lisod sabton. Kanus-a kini nasunog? Mahimo nimo mahibal-an, apan dili dayon. 

Mga hulagway nga andam sa produksiyon para sa k8s

Ngano nga ang ubang mga sudlanan nagbarug samtang ang uban nahulog? Unsang sudlanan ang mabasol? Human sa tanan, ang gawas sa mga sudlanan managsama, apan sa sulod sa matag usa adunay kaugalingon nga Neo.

Mga hulagway nga andam sa produksiyon para sa k8s

Ang among mga developer mga takos nga mga lalaki. Naghimo sila og maayong mga serbisyo nga nagdala og ganansya sa kompanya. Apan adunay mga kapakyasan kung ang mga sudlanan nga adunay mga aplikasyon mahisalaag. Ang usa ka sudlanan nag-konsumo sa sobra nga CPU, ang lain nag-ut-ot sa network, ang ikatulo naggamit sa mga operasyon sa I / O, ug ang ikaupat hingpit nga dili klaro kung unsa ang gibuhat niini sa mga socket. Nahulog ang tanan ug nalunod ang barko. 

Mga ahente

Aron masabtan kung unsa ang nahitabo sa sulod, nakahukom kami nga ibutang ang mga ahente direkta sa mga sudlanan.

Mga hulagway nga andam sa produksiyon para sa k8s

Kini nga mga ahente nagpugong sa mga programa nga nagtago sa mga sudlanan sa ingon nga kahimtang nga dili nila mabuak ang usag usa. Ang mga ahente gi-standardize, ug kini nagtugot sa usa ka standardized nga pamaagi sa pag-alagad sa mga sudlanan. 

Sa among kaso, ang mga ahente kinahanglan maghatag mga troso sa usa ka standard nga format, gi-tag ug gi-throttle. Kinahanglan usab nila nga hatagan kami sa mga estandard nga sukatan nga mapalapad gikan sa panan-aw sa aplikasyon sa negosyo.

Ang mga ahente nagpasabut usab nga mga utilities alang sa operasyon ug pagmentinar nga mahimong magamit sa lainlaing mga sistema sa orkestra nga nagsuporta sa lainlaing mga imahe (Debian, Alpine, Centos, ug uban pa).

Sa katapusan, kinahanglan nga suportahan sa mga ahente ang yano nga CI / CD nga naglakip sa mga file sa Docker. Kay kon dili, ang barko mahugno, tungod kay ang mga sudlanan magsugod sa paghatud sa "baliko" nga mga riles.

Pagtukod sa proseso ug target image device

Aron mapadayon ang tanan nga estandard ug madumala, usa ka matang sa standard nga proseso sa pagtukod kinahanglan nga sundon. Busa, nakahukom kami sa pagkolekta sa mga sudlanan pinaagi sa mga sudlanan - kini mao ang recursion.

Mga hulagway nga andam sa produksiyon para sa k8s

Dinhi ang mga sudlanan girepresentahan sa mga solidong outline. Sa samang higayon, nakahukom sila nga magbutang ug mga distribution kits aron β€œang kinabuhi dili morag raspberry.” Ngano nga kini nahimo, among ipasabut sa ubos.
 
Ang resulta usa ka himan sa pagtukodβ€”usa ka sudlanan nga espesipiko sa bersyon nga naghisgot sa piho nga mga bersyon sa pag-apod-apod ug piho nga mga bersyon sa script.

Giunsa nato kini paggamit? Adunay kami usa ka Docker Hub nga adunay sulud. Gisalamin namon kini sa sulod sa among sistema aron makuha ang mga eksternal nga pagsalig. Ang resulta usa ka sudlanan nga gimarkahan og yellow. Naghimo kami usa ka template aron ma-install ang tanan nga mga pag-apod-apod ug mga script nga kinahanglan namon sa sulud. Pagkahuman niana, nag-assemble kami usa ka andam-gamiton nga imahe: ang mga developer nagbutang sa code ug pipila sa ilang kaugalingon nga espesyal nga dependency niini. 

Unsa ang maayo niini nga pamaagi? 

  • Una, bug-os nga bersyon nga kontrol sa mga himan sa pagtukod - paghimo og sudlanan, script ug mga bersyon sa pag-apod-apod. 
  • Ikaduha, nakab-ot namon ang standardisasyon: naghimo kami og mga templates, intermediate ug andam nga gamiton nga imahe sa parehas nga paagi. 
  • Ikatulo, ang mga sudlanan naghatag kanato og kadali. Karon among gigamit ang Gitlab, ug ugma mobalhin kami sa TeamCity o Jenkins ug mahimo namon nga mapadagan ang among mga sudlanan sa parehas nga paagi. 
  • Ikaupat, pagminus sa mga dependency. Dili sulagma nga nagbutang kami og mga distribution kits sa sudlanan, tungod kay kini nagtugot kanamo sa paglikay sa pag-download niini gikan sa Internet matag higayon. 
  • Ikalima, ang katulin sa pagtukod miuswag - ang presensya sa mga lokal nga kopya sa mga imahe nagtugot kanimo nga malikayan ang pag-usik sa oras sa pag-download, tungod kay adunay usa ka lokal nga imahe. 

Sa laing pagkasulti, nakab-ot namo ang usa ka kontrolado ug flexible nga proseso sa asembliya. Gigamit namo ang parehas nga mga himan sa paghimo og bisan unsang kompleto nga bersyon nga mga sudlanan. 

Giunsa ang among pamaagi sa pagtukod

Mga hulagway nga andam sa produksiyon para sa k8s

Ang asembliya gilunsad sa usa ka sugo, ang proseso gipatuman sa hulagway (gi-highlight sa pula). Ang nag-develop adunay usa ka Docker file (gi-highlight sa yellow), among gihubad kini, gipulihan ang mga variable nga adunay mga kantidad. Ug sa dalan gidugang namo ang mga ulohan ug mga footer - kini ang among mga ahente. 

Ang ulohan nagdugang mga pag-apod-apod gikan sa katugbang nga mga imahe. Ug gi-install sa footer ang among mga serbisyo sa sulod, gi-configure ang paglansad sa workload, pag-log ug uban pang mga ahente, gipuli ang entrypoint, ug uban pa. 

Mga hulagway nga andam sa produksiyon para sa k8s

Naghunahuna kami sa dugay nga panahon kung mag-install ba usa ka superbisor. Sa katapusan, nakahukom kami nga kinahanglan namon siya. Gipili namo ang S6. Ang superbisor naghatag og pagdumala sa sudlanan: nagtugot kanimo sa pagkonektar niini kung ang nag-unang proseso nahagsa ug naghatag og manwal nga pagdumala sa sudlanan nga wala kini gimugna pag-usab. Ang mga log ug sukatan kay mga proseso nga nagdagan sulod sa sudlanan. Kinahanglan usab sila nga makontrol sa bisan unsang paagi, ug buhaton namon kini sa tabang sa usa ka superbisor. Sa katapusan, ang S6 nag-atiman sa housekeeping, pagproseso sa signal ug uban pang mga buluhaton.

Tungod kay naggamit kami og lain-laing mga sistema sa orkestrasyon, human sa pagtukod ug pagdagan, ang sudlanan kinahanglan nga masabtan kung unsa nga palibot kini ug molihok sumala sa sitwasyon. Pananglitan:
Kini nagtugot kanamo sa paghimo og usa ka imahen ug pagpadagan niini sa lain-laing mga sistema sa orkestra, ug kini ilunsad nga gikonsiderar ang mga detalye niini nga sistema sa orkestra.

 Mga hulagway nga andam sa produksiyon para sa k8s

Alang sa parehas nga sudlanan nakakuha kami lainlaing mga punoan sa proseso sa Docker ug Kubernetes:

Mga hulagway nga andam sa produksiyon para sa k8s

Ang payload gipatuman ubos sa pagdumala sa S6. Hatagi'g pagtagad ang kolektor ug mga panghitabo - kini ang among mga ahente nga responsable sa mga troso ug mga sukatan. Ang Kubernetes wala kanila, apan ang Docker aduna. Ngano man? 

Kung atong tan-awon ang espesipikasyon sa "pod" (pagkahuman niini - Kubernetes pod), atong makita nga ang mga panghitabo nga sudlanan gipatuman sa usa ka pod, nga adunay usa ka bulag nga kolektor nga sudlanan nga naghimo sa function sa pagkolekta metrics ug logs. Magamit namo ang mga kapabilidad sa Kubernetes: pagpadagan sa mga sudlanan sa usa ka pod, sa usa ka proseso ug/o network space. Sa tinuud ipaila ang imong mga ahente ug himuon ang pipila nga mga gimbuhaton. Ug kung ang parehas nga sudlanan gilansad sa Docker, makadawat kini tanan nga parehas nga kapabilidad sama sa output, nga mao, makahatag kini mga troso ug sukatan, tungod kay ang mga ahente ilansad sa sulod. 

Mga sukatan ug mga log

Ang paghatud sa mga sukatan ug mga log usa ka komplikado nga buluhaton. Adunay daghang mga aspeto sa iyang desisyon.
Ang imprastraktura gihimo para sa pagpatuman sa payload, ug dili para sa mass delivery sa mga troso. Sa ato pa, kini nga proseso kinahanglan himuon nga adunay gamay nga kinahanglanon sa kahinguhaan sa sulud. Naningkamot kami nga matabangan ang among mga developer: "Pagkuha usa ka sudlanan sa Docker Hub, padagana kini, ug mahimo namon nga ihatud ang mga troso." 

Ang ikaduha nga aspeto mao ang paglimite sa gidaghanon sa mga troso. Kung ang usa ka pagdagsang sa gidaghanon sa mga troso mahitabo sa daghang mga sudlanan (ang aplikasyon nagpagawas sa usa ka stack-trace sa usa ka loop), ang load sa CPU, mga channel sa komunikasyon, ug sistema sa pagproseso sa log nagdugang, ug kini makaapekto sa operasyon sa host isip usa ka tibuok ug uban pang mga sudlanan sa host, unya usahay kini modala ngadto sa "pagkahulog" sa panon. 

Ang ikatulo nga aspeto mao nga kinahanglan nga suportahan ang daghang mga pamaagi sa pagkolekta sa sukatan kutob sa mahimo sa gawas sa kahon. Gikan sa pagbasa sa mga file ug pagboto sa Prometheus-endpoint hangtod sa paggamit sa mga piho nga protocol sa aplikasyon.

Ug ang katapusan nga aspeto mao ang pagminus sa konsumo sa kapanguhaan.

Gipili namo ang usa ka open-source nga solusyon sa Go nga gitawag og Telegraf. Kini usa ka unibersal nga konektor nga nagsuporta labaw pa sa 140 nga mga tipo sa input channel (input plugins) ug 30 nga mga tipo sa output channel (output plugins). Nahuman na namo kini ug karon isulti namo kanimo kung giunsa namo kini paggamit gamit ang Kubernetes isip pananglitan. 

Mga hulagway nga andam sa produksiyon para sa k8s

Ingnon ta nga ang usa ka developer nag-deploy og workload ug ang Kubernetes nakadawat og hangyo sa paghimo og pod. Niini nga punto, usa ka sudlanan nga gitawag og Collector ang awtomatik nga gihimo alang sa matag pod (among gigamit ang mutation webhook). Kolektor ang among ahente. Sa pagsugod, kini nga sudlanan nag-configure sa kaugalingon aron magtrabaho kauban ang Prometheus ug ang sistema sa pagkolekta sa log.

  • Sa pagbuhat niini, kini naggamit pod annotation, ug depende sa sulod niini, nagmugna, ingon, sa usa ka Prometheus katapusan-punto; 
  • Pinasukad sa espesipikasyon sa pod ug piho nga mga setting sa sudlanan, nagdesisyon kini kung giunsa ang paghatud sa mga troso.

Gikolekta namo ang mga troso pinaagi sa Docker API: ang mga developers kinahanglan lang nga ibutang kini sa stdout o stderr, ug ang Collector ang maghan-ay niini. Ang mga troso gikolekta sa mga tipak uban ang pipila ka paglangan aron malikayan ang posibleng overload sa host. 

Gikolekta ang mga sukatan sa mga higayon sa trabaho (mga proseso) sa mga sudlanan. Ang tanan gi-tag: namespace, under, ug uban pa, ug dayon i-convert sa Prometheus format - ug mahimong magamit alang sa pagkolekta (gawas sa mga troso). Nagpadala usab kami mga log, sukatan ug panghitabo sa Kafka ug dugang pa:

  • Ang mga troso anaa sa Graylog (alang sa biswal nga pagtuki);
  • Ang mga log, sukatan, mga panghitabo gipadala sa Clickhouse alang sa dugay nga pagtipig.

Ang tanan nagtrabaho nga parehas sa AWS, gipulihan namon ang Graylog sa Kafka gamit ang Cloudwatch. Gipadala namo ang mga troso didto, ug ang tanan nahimong sayon ​​​​kaayo: tin-aw dayon kung asa nga cluster ug sudlanan sila nahisakop. Tinuod usab kini alang sa Google Stackdriver. Kana mao, ang among laraw nagtrabaho pareho sa lugar sa Kafka ug sa panganod. 

Kung wala kami mga Kubernetes nga adunay mga pod, ang laraw labi ka labi ka komplikado, apan kini molihok sa parehas nga mga prinsipyo.

Mga hulagway nga andam sa produksiyon para sa k8s

Ang parehas nga mga proseso gipatuman sa sulod sa sudlanan, kini gi-orkestra gamit ang S6. Ang tanan nga parehas nga mga proseso nagdagan sa sulod sa parehas nga sudlanan.

Ingon sa usa ka resulta,

Naghimo kami usa ka kompleto nga solusyon alang sa paghimo ug paglansad sa mga imahe, nga adunay mga kapilian sa pagkolekta ug paghatud sa mga log ug sukatan:

  • Naghimo kami og usa ka standardized nga pamaagi sa pag-assemble sa mga hulagway, ug base niini among gipalambo ang mga template sa CI;
  • Ang mga ahente sa pagkolekta sa datos mao ang among mga extension sa Telegraf. Gisulayan namo sila og maayo sa produksyon;
  • Gigamit namo ang mutation webhook aron ipatuman ang mga sudlanan nga adunay mga ahente sa mga pod; 
  • Nahiusa sa Kubernetes/Rancher ecosystem;
  • Mahimo namon nga ipatuman ang parehas nga mga sudlanan sa lainlaing mga sistema sa orkestra ug makuha ang resulta nga among gipaabut;
  • Naghimo usa ka hingpit nga dinamikong pagsulud sa pagdumala sa sulud. 

kaubang tagsulat: Ilya Prudnikov

Source: www.habr.com

Idugang sa usa ka comment