{"id":81173,"date":"2020-05-11T13:42:51","date_gmt":"2020-05-11T11:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/production-ready-images-for-k8s"},"modified":"2020-05-11T13:42:51","modified_gmt":"2020-05-11T11:42:51","slug":"production-ready-images-for-k8s","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento p\u0159\u00edb\u011bh je o tom, jak pou\u017e\u00edv\u00e1me kontejnery v produktov\u00e9m prost\u0159ed\u00ed, zejm\u00e9na pod Kubernetes. \u010cl\u00e1nek se zam\u011b\u0159uje na shroma\u017e\u010fov\u00e1n\u00ed metrik a log\u016f z kontejner\u016f, stejn\u011b jako na vytv\u00e1\u0159en\u00ed obraz\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/c7e8df02d845138e489c09c55cd616e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nJsme fintech spole\u010dnost Exness, kter\u00e1 se zab\u00fdv\u00e1 v\u00fdvojem slu\u017eeb pro online trading a fintech produkty pro B2B a B2C. V na\u0161em R&amp;D m\u00e1me r\u016fzn\u00e9 t\u00fdmy, v odd\u011blen\u00ed v\u00fdvoje pracuje v\u00edce ne\u017e 100 zam\u011bstnanc\u016f.<\/p>\n<p>P\u0159edstavujeme t\u00fdm, kter\u00fd se star\u00e1 o platformu pro shroma\u017e\u010fov\u00e1n\u00ed a spu\u0161t\u011bn\u00ed k\u00f3du na\u0161ich v\u00fdvoj\u00e1\u0159\u016f. Konkr\u00e9tn\u011b jsme zodpov\u011bdn\u00ed za shroma\u017e\u010fov\u00e1n\u00ed, ukl\u00e1d\u00e1n\u00ed a poskytov\u00e1n\u00ed metrik, log\u016f a ud\u00e1lost\u00ed z aplikac\u00ed. V sou\u010dasnosti operujeme s p\u0159ibli\u017en\u011b t\u0159emi tis\u00edci Docker kontejnery v produktov\u00e9m prost\u0159ed\u00ed, udr\u017eujeme na\u0161e big data \u00falo\u017ei\u0161t\u011b o velikosti 50 TB a poskytujeme architektonick\u00e1 \u0159e\u0161en\u00ed, kter\u00e1 se buduj\u00ed kolem na\u0161\u00ed infrastruktury: Kubernetes, Rancher a r\u016fzn\u00ed ve\u0159ejn\u00ed cloudov\u00ed poskytovatel\u00e9.\u00a0<\/p>\n<h1>Na\u0161e motivace<\/h1>\n<p>\nCo ho\u0159\u00ed? Nikdo nedok\u00e1\u017ee odpov\u011bd\u011bt. Kde je ohnisko? Pochopit je obt\u00ed\u017en\u00e9. Kdy to vzpl\u00e1lo? Zjistit lze, ale ne hned.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro\u010d n\u011bkter\u00e9 kontejnery stoj\u00ed a jin\u00e9 padly? Kter\u00fd kontejner za to m\u016f\u017ee? V\u017edy\u0165 zven\u010d\u00ed jsou kontejnery stejn\u00e9, ale uvnit\u0159 m\u00e1 ka\u017ed\u00fd sv\u016fj Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161i v\u00fdvoj\u00e1\u0159i jsou schopn\u00ed kluci. D\u011blaj\u00ed dobr\u00e9 slu\u017eby, kter\u00e9 spole\u010dnosti p\u0159in\u00e1\u0161ej\u00ed zisk. Ale ob\u010das dojde k probl\u00e9m\u016fm, kdy kontejnery s aplikacemi jdou do chaosu. Jeden kontejner spot\u0159ebov\u00e1v\u00e1 p\u0159\u00edli\u0161 CPU, jin\u00fd s\u00ed\u0165, t\u0159et\u00ed operace vstupu a v\u00fdstupu, \u010dtvrt\u00fd v\u016fbec nen\u00ed jasn\u00e9, co d\u011bl\u00e1 se sokety. To v\u0161echno se zhrout\u00ed a lo\u010f pot\u00e1p\u00ed.\u00a0<\/p>\n<h1>Agenti<\/h1>\n<p>\nAbychom pochopili, co se d\u011bje uvnit\u0159, rozhodli jsme se nasadit agenty p\u0159\u00edmo do kontejner\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTito agenti jsou zadr\u017eovac\u00ed programy, kter\u00e9 udr\u017euj\u00ed kontejnery ve stavu, aby se navz\u00e1jem nepo\u0161kodily. Agenti jsou standardizovan\u00ed, co\u017e umo\u017e\u0148uje standardizovat p\u0159\u00edstup k \u00fadr\u017eb\u011b kontejner\u016f.\u00a0<\/p>\n<p>V na\u0161em p\u0159\u00edpad\u011b mus\u00ed agenti poskytovat logy ve standardn\u00edm form\u00e1tu, ozna\u010den\u00e9 a s throttlingem. Tak\u00e9 n\u00e1m mus\u00ed poskytovat standardizovan\u00e9 metriky, kter\u00e9 jsou roz\u0161i\u0159iteln\u00e9 z hlediska obchodn\u00edch aplikac\u00ed.<\/p>\n<p>Pod agenty se tak\u00e9 rozum\u00ed n\u00e1stroje pro provoz a \u00fadr\u017ebu, schopn\u00e9 pracovat v r\u016fzn\u00fdch orchestracech, kter\u00e9 podporuj\u00ed r\u016fzn\u00e9 obrazy (Debian, Alpine, Centos atd.).<\/p>\n<p>A kone\u010dn\u011b, agenti mus\u00ed podporovat jednoduch\u00e9 CI\/CD, kter\u00e9 zahrnuje Docker soubory. Jinak se lo\u010f rozpadne, proto\u017ee kontejnery za\u010dnou b\u00fdt dod\u00e1v\u00e1ny po \u201ek\u0159iv\u00fdch\u201c kolej\u00edch.<\/p>\n<h1>Proces sestaven\u00ed a p\u0159\u00edprava c\u00edlov\u00e9ho image<\/h1>\n<p>\nAby v\u0161e bylo standardizovan\u00e9 a \u0159\u00edzen\u00e9, je nutn\u00e9 dodr\u017eovat n\u011bjak\u00fd standardn\u00ed proces sestaven\u00ed. Proto jsme se rozhodli sestavovat kontejnery pomoc\u00ed kontejner\u016f \u2013 takov\u00e1 je rekurze.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZde jsou kontejnery p\u0159edstavov\u00e1ny pevn\u00fdm obrysem. Z\u00e1rove\u0148 jsme se rozhodli do nich um\u00edstit distribuce, aby \u201e\u017eivot nevypadal p\u0159\u00edli\u0161 snadno\u201c. Pro\u010d to bylo ud\u011bl\u00e1no, vysv\u011btl\u00edme n\u00ed\u017ee.<br \/>\n\u00a0<br \/>\nV\u00fdsledkem je n\u00e1stroj pro sestaven\u00ed \u2013 kontejner ur\u010dit\u00e9 verze, kter\u00fd odkazuje na ur\u010dit\u00e9 verze distribuc\u00ed a ur\u010dit\u00e9 verze skript\u016f.<\/p>\n<p>Jak ho pou\u017e\u00edv\u00e1me? M\u00e1me Docker Hub, kde se nach\u00e1z\u00ed kontejner. Zrcadl\u00edme ho do na\u0161eho syst\u00e9mu, abychom se zbavili extern\u00edch z\u00e1vislost\u00ed. Vznikl kontejner ozna\u010den\u00fd \u017elutou barvou. Vytv\u00e1\u0159\u00edme \u0161ablonu, aby se do kontejneru nainstalovaly v\u0161echny pot\u0159ebn\u00e9 distribuce a skripty. Pot\u00e9 sestavujeme hotov\u00fd obraz: v\u00fdvoj\u00e1\u0159i do n\u011bj umis\u0165uj\u00ed k\u00f3d a sv\u00e9 specifick\u00e9 z\u00e1vislosti.\u00a0<\/p>\n<p>Jak\u00e9 v\u00fdhody tento p\u0159\u00edstup p\u0159in\u00e1\u0161\u00ed?\u00a0<\/p>\n<ul>\n<li>Za prv\u00e9, \u00fapln\u00e1 verzionace n\u00e1stroj\u016f pro sestaven\u00ed \u2013 kontejner pro sestaven\u00ed, verze skript\u016f a distribuc\u00ed.\u00a0<\/li>\n<li>Za druh\u00e9, dos\u00e1hli jsme standardizace: \u0161ablony, meziprodukty a hotov\u00e9 exploatovateln\u00e9 image vytv\u00e1\u0159\u00edme stejn\u00fdm zp\u016fsobem.\u00a0<\/li>\n<li>Za t\u0159et\u00ed, kontejnery n\u00e1m zaji\u0161\u0165uj\u00ed p\u0159enositelnost. Dnes pou\u017e\u00edv\u00e1me Gitlab, z\u00edtra p\u0159ejdeme na TeamCity nebo Jenkins a t\u00edmto zp\u016fsobem tak\u00e9 budeme moci spou\u0161t\u011bt na\u0161e kontejnery.\u00a0<\/li>\n<li>Za \u010dtvrt\u00e9, minimalizace z\u00e1vislost\u00ed. Ne n\u00e1hodou jsme um\u00edstili do kontejneru distribuce, proto\u017ee to umo\u017e\u0148uje nestahovat je poka\u017ed\u00e9 z internetu.\u00a0<\/li>\n<li>Za p\u00e1t\u00e9, zv\u00fd\u0161ila se rychlost sestaven\u00ed \u2013 p\u0159\u00edtomnost m\u00edstn\u00edch kopi\u00ed obraz\u016f \u0161et\u0159\u00ed \u010das, proto\u017ee m\u00e1me lok\u00e1ln\u00ed obraz.\u00a0<\/li>\n<\/ul>\n<p>\nJin\u00fdmi slovy, dos\u00e1hli jsme \u0159\u00edzen\u00e9ho a flexibiln\u00edho procesu sestaven\u00ed. Pou\u017e\u00edv\u00e1me stejn\u00e9 n\u00e1stroje pro sestaven\u00ed jak\u00fdchkoli kontejner\u016f s plnou verzionac\u00ed.\u00a0<\/p>\n<h1>Jak funguje n\u00e1\u0161 proces sestaven\u00ed<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSpu\u0161t\u011bn\u00ed sestavy se prov\u00e1d\u00ed jedn\u00edm p\u0159\u00edkazem, proces prob\u00edh\u00e1 v obraze (vyzna\u010deno \u010derven\u011b). V\u00fdvoj\u00e1\u0159 m\u00e1 Dockerfile (vyzna\u010deno \u017elut\u011b), kter\u00fd renderujeme, p\u0159i\u010dem\u017e nahrazujeme prom\u011bnn\u00e9 hodnotami. Z\u00e1rove\u0148 p\u0159id\u00e1v\u00e1me header a footer \u2013 to jsou na\u0161i agenti.\u00a0<\/p>\n<p>Header p\u0159id\u00e1v\u00e1 distribuce z odpov\u00eddaj\u00edc\u00edch obraz\u016f. Footer pak nainstaluje na\u0161e slu\u017eby, nastav\u00ed spu\u0161t\u011bn\u00ed pracovn\u00ed z\u00e1t\u011b\u017ee, logov\u00e1n\u00ed a dal\u0161\u00ed agenty, m\u011bn\u00ed entrypoint atd.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlouho jsme p\u0159em\u00fd\u0161leli, zda nasadit supervizora. Nakonec jsme se rozhodli, \u017ee ho pot\u0159ebujeme. Vybrali jsme S6. Supervizor zaji\u0161\u0165uje \u0159\u00edzen\u00ed kontejneru: umo\u017e\u0148uje p\u0159ipojen\u00ed v p\u0159\u00edpad\u011b p\u00e1du hlavn\u00edho procesu a zaji\u0161\u0165uje ru\u010dn\u00ed \u0159\u00edzen\u00ed kontejneru bez jeho p\u0159enastaven\u00ed. Logy a metriky jsou procesy prov\u00e1d\u011bn\u00e9 uvnit\u0159 kontejneru. I tyto je t\u0159eba n\u011bjak kontrolovat, a to d\u011bl\u00e1me pomoc\u00ed supervizora. Nakonec S6 p\u0159eb\u00edr\u00e1 prov\u00e1d\u011bn\u00ed \u00fadr\u017eby, zpracov\u00e1n\u00ed sign\u00e1l\u016f a dal\u0161\u00ed \u00fakoly.<\/p>\n<p>Proto\u017ee aplikujeme r\u016fzn\u00e9 orchestrace, po sestaven\u00ed a spu\u0161t\u011bn\u00ed kontejner mus\u00ed pochopit, v jak\u00e9m prost\u0159ed\u00ed se nach\u00e1z\u00ed, a jednat podle situace. Nap\u0159\u00edklad:<br \/>\nTo n\u00e1m umo\u017e\u0148uje sestavit jeden obraz a spou\u0161t\u011bt ho v r\u016fzn\u00fdch orchestracech, p\u0159i\u010dem\u017e bude spu\u0161t\u011bn s ohledem na specifika t\u00e9to orchestrace.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro stejn\u00fd kontejner z\u00edsk\u00e1v\u00e1me r\u016fzn\u00e1 procesn\u00ed stromov\u00e9 struktury v Dockeru a Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU\u017eite\u010dn\u00e1 z\u00e1t\u011b\u017e b\u011b\u017e\u00ed pod supervizorem S6. V\u0161imn\u011bte si collectoru a ud\u00e1lost\u00ed \u2013 to jsou na\u0161i agenti, kte\u0159\u00ed se staraj\u00ed o logy a metriky. V Kubernetes je nem\u00e1me, ale v Dockeru ano. Pro\u010d?\u00a0<\/p>\n<p>Pokud se pod\u00edv\u00e1me na specifikaci \u201epodu\u201c (d\u00e1le jen Kubernetes pod), uvid\u00edme, \u017ee kontejner ud\u00e1lost\u00ed b\u011b\u017e\u00ed v podu, kde je samostatn\u00fd kontejner collector, kter\u00fd pln\u00ed funkci sb\u011bru metrik a log\u016f. M\u016f\u017eeme vyu\u017e\u00edvat mo\u017enosti Kubernetes: spou\u0161t\u011bt kontejnery v jednom podu, v jedn\u00e9 procesn\u00ed a\/nebo s\u00ed\u0165ov\u00e9 sf\u00e9\u0159e. Fakticky vkl\u00e1dat sv\u00e9 agenty a vykon\u00e1vat ur\u010dit\u00e9 funkce. A pokud se tento kontejner spust\u00ed v Dockeru, dostane stejn\u00e9 mo\u017enosti, tedy bude schopen dod\u00e1vat logy a metriky, proto\u017ee agenti budou spu\u0161t\u011bni uvnit\u0159.\u00a0<\/p>\n<h1>Metriky a logy<\/h1>\n<p>\nDod\u00e1v\u00e1n\u00ed metrik a log\u016f je slo\u017eit\u00fd \u00fakol. S jeho \u0159e\u0161en\u00edm je spojeno n\u011bkolik aspekt\u016f.<br \/>\nInfrastruktura je vytv\u00e1\u0159ena pro zpracov\u00e1n\u00ed u\u017eite\u010dn\u00e9 z\u00e1t\u011b\u017ee, nikoli pro hromadn\u00e9 doru\u010dov\u00e1n\u00ed log\u016f. To znamen\u00e1, \u017ee tento proces by m\u011bl prob\u00edhat s minim\u00e1ln\u00edmi po\u017eadavky na zdroje kontejner\u016f. Sna\u017e\u00edme se pomoci na\u0161im v\u00fdvoj\u00e1\u0159\u016fm: \u201eVezm\u011bte kontejner z Docker Hub, spus\u0165te ho a my se postar\u00e1me o doru\u010den\u00ed log\u016f.\u201c\u00a0<\/p>\n<p>Druh\u00fdm aspektem je omezen\u00ed objemu log\u016f. Pokud v n\u011bkolika kontejnerech dojde k v\u00fdskytu \u0161pi\u010dkov\u00e9ho objemu log\u016f (aplikace v cyklu vypisuje stack-trace), zvy\u0161uje se z\u00e1t\u011b\u017e na CPU, komunika\u010dn\u00ed kan\u00e1ly, syst\u00e9m zpracov\u00e1n\u00ed log\u016f a to ovliv\u0148uje provoz hostitele jako celku a ostatn\u00ed kontejnery na hostiteli, co\u017e n\u011bkdy vede k \u201ep\u00e1du\u201c hostitele.\u00a0<\/p>\n<p>T\u0159et\u00edm aspektem je nutnost podporovat co nejv\u00edce metod sb\u011bru metrik ji\u017e v z\u00e1kladu. Od \u010dten\u00ed soubor\u016f a dotazov\u00e1n\u00ed na Prometheus-endpoint po pou\u017eit\u00ed specifick\u00fdch protokol\u016f aplikac\u00ed.<\/p>\n<p>A posledn\u00edm aspektem je nezbytnost minimalizovat spot\u0159ebu zdroj\u016f.<\/p>\n<p>Vybrali jsme open-source \u0159e\u0161en\u00ed v Go s n\u00e1zvem Telegraf. Je to univerz\u00e1ln\u00ed konektor, kter\u00fd podporuje v\u00edce ne\u017e 140 druh\u016f vstupn\u00edch kan\u00e1l\u016f (input plugins) a 30 druh\u016f v\u00fdstupn\u00edch (output plugins). P\u0159izp\u016fsobili jsme ho a nyn\u00ed v\u00e1m uk\u00e1\u017eeme, jak je pou\u017e\u00edv\u00e1n u n\u00e1s na p\u0159\u00edkladu Kubernetes.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u0159edstavte si, \u017ee v\u00fdvoj\u00e1\u0159 nasazuje z\u00e1t\u011b\u017e a Kubernetes obdr\u017e\u00ed \u017e\u00e1dost o vytvo\u0159en\u00ed podu. V tento okam\u017eik se pro ka\u017ed\u00fd pod automaticky vytv\u00e1\u0159\u00ed kontejner s n\u00e1zvem Collector (pou\u017e\u00edv\u00e1me mutation webhook). Collector je n\u00e1\u0161 agent. Na za\u010d\u00e1tku tento kontejner nastavuje s\u00e1m sebe na pr\u00e1ci s Prometheus a syst\u00e9mem sb\u011bru log\u016f.<\/p>\n<ul>\n<li>K tomu vyu\u017e\u00edv\u00e1 anotace podu, a v z\u00e1vislosti na jej\u00edm obsahu vytv\u00e1\u0159\u00ed nap\u0159\u00edklad c\u00edlov\u00fd bod end-point Prometheus;\u00a0\n<\/li>\n<li>Na z\u00e1klad\u011b specifikace podu a specifick\u00fdch nastaven\u00ed kontejner\u016f rozhoduje, jak doru\u010dovat logy.\n<\/li>\n<\/ul>\n<p>\nLogy shroma\u017e\u010fujeme prost\u0159ednictv\u00edm Docker API: v\u00fdvoj\u00e1\u0159\u016fm sta\u010d\u00ed um\u00edstit je do stdout nebo stderr, a pot\u00e9 se u\u017e Collector postar\u00e1. Logy jsou shroma\u017e\u010fov\u00e1ny po d\u00e1vk\u00e1ch s ur\u010dit\u00fdm zpo\u017ed\u011bn\u00edm, aby se p\u0159ede\u0161lo mo\u017en\u00e9mu p\u0159et\u00ed\u017een\u00ed hostitele.\u00a0<\/p>\n<p>Metriky se shroma\u017e\u010fuj\u00ed podle instanc\u00ed pracovn\u00ed z\u00e1t\u011b\u017ee (proces\u016f) v kontejnerech. V\u0161echno je ozna\u010deno tagy: namespace, pod a tak d\u00e1le, a pot\u00e9 se p\u0159ev\u00e1d\u00ed do form\u00e1tu Prometheus \u2013 a st\u00e1v\u00e1 se dostupn\u00fdm pro sb\u011br (krom\u011b log\u016f). Tak\u00e9, logy, metriky a ud\u00e1losti odes\u00edl\u00e1me do Kafka a d\u00e1le:<\/p>\n<ul>\n<li>Logy jsou dostupn\u00e9 v Graylogu (pro vizu\u00e1ln\u00ed anal\u00fdzu);\n<\/li>\n<li>Logy, metriky a ud\u00e1losti jsou odes\u00edl\u00e1ny do Clickhouse pro dlouhodob\u00e9 uchov\u00e1n\u00ed.\n<\/li>\n<\/ul>\n<p>\nStejn\u011b to funguje i na AWS, pouze nahrazujeme Graylog s Kafkou Cloudwatch. Odes\u00edl\u00e1me tam logy a v\u0161echno je velmi pohodln\u00e9: hned je jasn\u00e9, ke kter\u00e9mu clusteru a kontejneru pat\u0159\u00ed. Tot\u00e9\u017e plat\u00ed pro Google Stackdriver. Na\u0161e sch\u00e9ma tedy funguje jak on-premise s Kafkou, tak v cloudu.\u00a0<\/p>\n<p>Pokud nem\u00e1me Kubernetes s podmi, sch\u00e9ma se trochu komplikuje, ale funguje na stejn\u00fdch principech.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUvnit\u0159 kontejneru se vykon\u00e1vaj\u00ed stejn\u00e9 procesy, kter\u00e9 jsou orchestrac\u00ed \u0159e\u0161eny pomoc\u00ed S6. V\u0161echny stejn\u00e9 procesy b\u011b\u017e\u00ed uvnit\u0159 jednoho kontejneru.<\/p>\n<h1>Nakonec<\/h1>\n<p>\nVytvo\u0159ili jsme ucelen\u00e9 \u0159e\u0161en\u00ed pro sestaven\u00ed a spu\u0161t\u011bn\u00ed obraz\u016f do provozu, s mo\u017enostmi shroma\u017e\u010fov\u00e1n\u00ed a dod\u00e1vky log\u016f a metrik:<\/p>\n<ul>\n<li>Vyvinuli jsme standardizovan\u00fd p\u0159\u00edstup ke sestavov\u00e1n\u00ed obraz\u016f, na jeho\u017e z\u00e1klad\u011b jsme vytvo\u0159ili CI \u0161ablony;\n<\/li>\n<li>Agenti pro sb\u011br dat jsou na\u0161e roz\u0161\u00ed\u0159en\u00ed Telegraf. Dob\u0159e jsme je otestovali v produkci;\n<\/li>\n<li>Pou\u017e\u00edv\u00e1me mutation webhook pro nasazen\u00ed kontejner\u016f s agenty do pod\u016f;\u00a0\n<\/li>\n<li>Integrujeme se do ekosyst\u00e9mu Kubernetes\/Rancher;\n<\/li>\n<li>M\u016f\u017eeme spou\u0161t\u011bt identick\u00e9 kontejnery v r\u016fzn\u00fdch orchestr\u00e1torech a dosahovat o\u010dek\u00e1van\u00fdch v\u00fdsledk\u016f;\n<\/li>\n<li>Vytvo\u0159ili jsme zcela dynamickou konfiguraci spr\u00e1vy kontejner\u016f.\u00a0\n<\/li>\n<\/ul>\n<p>\nSpoluatorkou: <b>Ilja Prudnikov<\/b><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/exness\/blog\/488392\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Production-ready images for k8s | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Obr\u00e1zky p\u0159ipraven\u00e9 na produkci pro k8s | ProHoster","description":"Tento p\u0159\u00edb\u011bh je o tom, jak pou\u017e\u00edv\u00e1me kontejnery v produktov\u00e9m prost\u0159ed\u00ed, zejm\u00e9na pod Kubernetes.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Production-ready images for k8s | ProHoster","og:description":"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/production-ready-images-for-k8s","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-11T11:42:51+00:00","article:modified_time":"2020-05-11T11:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81173","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:03:22","updated":"2022-09-28 06:12:17","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}