{"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\/sk\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento pr\u00edbeh je o tom, ako pou\u017e\u00edvame kontajnery v produktovom prostred\u00ed, najm\u00e4 pod Kubernetes. \u010cl\u00e1nok je venovan\u00fd zbieraniu metr\u00edk a logov z kontajnerov, ako aj budovaniu obrazov.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre 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 \/>\nSme fintech spolo\u010dnos\u0165 Exness, ktor\u00e1 vyv\u00edja slu\u017eby pre online obchodovanie a fintech produkty pre B2B a B2C. V na\u0161om R&amp;D m\u00e1me r\u00f4zne t\u00edmy, v oddelen\u00ed v\u00fdvoja viac ako 100 zamestnancov.<\/p>\n<p>Predstavujeme t\u00edm, ktor\u00fd zodpoved\u00e1 za platformu na zhroma\u017e\u010fovanie a sp\u00fa\u0161\u0165anie k\u00f3du na\u0161imi v\u00fdvoj\u00e1rmi. Konkr\u00e9tne zodpoved\u00e1me za zhroma\u017e\u010fovanie, uchov\u00e1vanie a poskytovanie metr\u00edk, logov a udalost\u00ed z aplik\u00e1ci\u00ed. V s\u00fa\u010dasnosti prev\u00e1dzkujeme pribli\u017ene tri tis\u00edcky Docker kontajnerov v produktovom prostred\u00ed, podporujeme na\u0161e big data \u00falo\u017eisko s kapacitou 50 TB a poskytujeme architektonick\u00e9 rie\u0161enia, ktor\u00e9 sa buduj\u00fa okolo na\u0161ej infra\u0161trukt\u00fary: Kubernetes, Rancher a r\u00f4zni verejn\u00ed poskytovatelia cloudov\u00fdch slu\u017eieb.\u00a0<\/p>\n<h1>Na\u0161a motiv\u00e1cia<\/h1>\n<p>\n\u010co hor\u00ed? Nikto nevie odpoveda\u0165. Kde je ohnisko? \u0164a\u017eko sa to d\u00e1 pochopi\u0165. Kedy sa to zap\u00e1lilo? Dalo by sa zisti\u0165, ale nie hne\u010f.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPre\u010do niektor\u00e9 kontajnery stoja a in\u00e9 spadli? Ktor\u00fd kontajner za to m\u00f4\u017ee? Ve\u010f zvonku s\u00fa kontajnery rovnak\u00e9, ale vo vn\u00fatri m\u00e1 ka\u017ed\u00fd svoj vlastn\u00fd Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161i v\u00fdvoj\u00e1ri s\u00fa \u0161ikovn\u00ed. Vytv\u00e1raj\u00fa dobr\u00e9 slu\u017eby, ktor\u00e9 prin\u00e1\u0161aj\u00fa firme zisk. Ale ob\u010das sa st\u00e1vaj\u00fa faily, ke\u010f kontajnery s aplik\u00e1ciami s\u00fa rozh\u00e1dzan\u00e9. Jeden kontajner spotreb\u00fava pr\u00edli\u0161 ve\u013ea CPU, in\u00fd sie\u0165, tret\u00ed oper\u00e1cie vstupu-v\u00fdstupu, \u0161tvrt\u00fd m\u00e1 dokonca nejasn\u00fa \u010dinnos\u0165 so socketmi. V\u0161etko to zlyh\u00e1va a lo\u010f pot\u00e1pame.\u00a0<\/p>\n<h1>Agenti<\/h1>\n<p>\nAby sme pochopili, \u010do sa deje vo vn\u00fatri, rozhodli sme sa in\u0161talova\u0165 agentov priamo do kontajnerov.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00edto agenti s\u00fa kontroln\u00e9 programy, ktor\u00e9 udr\u017euj\u00fa kontajnery v takom stave, aby si navz\u00e1jom neubl\u00ed\u017eili. Agenti s\u00fa \u0161tandardizovan\u00ed, \u010do umo\u017e\u0148uje standardiz\u00e1ciu pr\u00edstupu k \u00fadr\u017ebe kontajnerov.\u00a0<\/p>\n<p>V na\u0161om pr\u00edpade musia agenti poskytova\u0165 logy v \u0161tandardnom form\u00e1te, ozna\u010den\u00e9 a s throttlingom. Musia n\u00e1m tie\u017e poskytova\u0165 \u0161tandardizovan\u00e9 metriky, ktor\u00e9 s\u00fa roz\u0161\u00edrite\u013en\u00e9 z poh\u013eadu biznis aplik\u00e1ci\u00ed.<\/p>\n<p>Agentmi sa rozumej\u00fa aj utilitky na prev\u00e1dzku a \u00fadr\u017ebu, schopn\u00e9 pracova\u0165 v r\u00f4znych orchestr\u00e1toroch a podporuj\u00face r\u00f4zne obrazy (Debian, Alpine, Centos a pod.).<\/p>\n<p>Nakoniec musia agenti udr\u017eiava\u0165 jednoduch\u00fd CI\/CD, ktor\u00fd zah\u0155\u0148a Docker s\u00fabory. Inak sa lo\u010f rozpadne, preto\u017ee kontajnery sa za\u010dn\u00fa dod\u00e1va\u0165 po \u201ekriv\u00fdch\u201c ko\u013eajniciach.<\/p>\n<h1>Proces zostavenia a vytvorenie cie\u013eov\u00e9ho obr\u00e1zka<\/h1>\n<p>\nAby bolo v\u0161etko \u0161tandardizovan\u00e9 a ovl\u00e1date\u013en\u00e9, je potrebn\u00e9 dodr\u017eiava\u0165 nejak\u00fd \u0161tandardn\u00fd proces zostavenia. Preto sme sa rozhodli zostavova\u0165 kontajnery pomocou kontajnerov \u2013 tak\u00e1to rekurzia.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTu s\u00fa kontajnery zobrazen\u00e9 ako pln\u00e9 obrysy. Takisto sme sa rozhodli da\u0165 do nich distrib\u00facie, aby \u201e\u017eivot nebol tak\u00fd ru\u017eov\u00fd\u201c. Pre\u010do to bolo uroben\u00e9, povieme nesk\u00f4r.<br \/>\n\u00a0<br \/>\nV d\u00f4sledku toho vznikol n\u00e1stroj na zostavenie \u2013 kontajner ur\u010ditej verzie, ktor\u00fd odkazuje na ur\u010dit\u00e9 verzie distrib\u00faci\u00ed a ur\u010dit\u00e9 verzie skriptov.<\/p>\n<p>Ako ho pou\u017e\u00edvame? M\u00e1me Docker Hub, v ktorom je kontajner. Zrkadl\u00edme ho do na\u0161ej siete, aby sme sa zbavili vonkaj\u0161\u00edch z\u00e1vislost\u00ed. Vznikol kontajner, ozna\u010den\u00fd \u017eltou farbou. Vytv\u00e1rame \u0161abl\u00f3nu, aby sme do kontajnera nain\u0161talovali v\u0161etky potrebn\u00e9 distrib\u00facie a skripty. Potom zostav\u00edme hotov\u00fd obraz: v\u00fdvoj\u00e1ri do\u0148 ukladaj\u00fa k\u00f3d a nejak\u00e9 svoje \u0161peci\u00e1lne z\u00e1vislosti.\u00a0<\/p>\n<p>\u010c\u00edm je tento pr\u00edstup dobr\u00fd?\u00a0<\/p>\n<ul>\n<li>Po prv\u00e9, kompletn\u00fd verzion\u00e1lny kontroln\u00fd n\u00e1stroj zostavenia \u2013 kontajner zostavenia, verzie skriptov a distrib\u00faci\u00ed.\u00a0<\/li>\n<li>Po druh\u00e9, dosiahli sme \u0161tandardiz\u00e1ciu: rovnak\u00fdm sp\u00f4sobom vytv\u00e1rame \u0161abl\u00f3ny, medzi\u010dl\u00e1nky a hotov\u00e9 obrazce.\u00a0<\/li>\n<li>Po tretie, kontajnery n\u00e1m zabezpe\u010duj\u00fa prenosnos\u0165. Dnes pou\u017e\u00edvame Gitlab, zajtra prejdeme na TeamCity alebo Jenkins a presne takto budeme m\u00f4c\u0165 sp\u00fa\u0161\u0165a\u0165 na\u0161e kontajnery.\u00a0<\/li>\n<li>Po \u0161tvrt\u00e9, minimaliz\u00e1cia z\u00e1vislost\u00ed. Nez\u00e1visle sme ulo\u017eili distrib\u00facie do kontajnera, preto\u017ee to umo\u017e\u0148uje nekone\u010dne ich s\u0165ahova\u0165 znova a znova z Internetu.\u00a0<\/li>\n<li>Po piate, zv\u00fd\u0161ila sa r\u00fdchlos\u0165 zostavenia \u2013 pr\u00edtomnos\u0165 miestnych k\u00f3pi\u00ed obrazov umo\u017e\u0148uje nestr\u00e1ca\u0165 \u010das s\u0165ahovan\u00edm, preto\u017ee m\u00e1me miestny obraz.\u00a0<\/li>\n<\/ul>\n<p>\nIn\u00fdmi slovami, dosiahli sme kontrolovan\u00fd a flexibiln\u00fd proces zostavenia. Pou\u017e\u00edvame rovnak\u00e9 prostriedky na zostavenie ak\u00fdchko\u013evek kontajnerov s kompletn\u00fdm verzionovan\u00edm.\u00a0<\/p>\n<h1>Ako funguje n\u00e1\u0161 postup zostavenia<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSpustenie sa realizuje jedn\u00fdm pr\u00edkazom, proces prebieha v obraze (vyzna\u010den\u00fd \u010dervenou). V\u00fdvoj\u00e1r m\u00e1 Docker s\u00fabor (vyzna\u010den\u00fd \u017eltou), ktor\u00fd renderujeme nahraden\u00edm premenn\u00fdch hodnotami. A s\u00fa\u010dasne prid\u00e1vame header a footer \u2014 to s\u00fa na\u0161i agenti.\u00a0<\/p>\n<p>Header prid\u00e1va distrib\u00facie z pr\u00edslu\u0161n\u00fdch obrazov. A footer nastavuje na\u0161e slu\u017eby, konfiguruje spustenie pracovnej z\u00e1\u0165a\u017ee, logovanie a in\u00fdch agentov, nahr\u00e1dza entrypoint at\u010f.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlho sme rozm\u00fd\u0161\u013eali, \u010di nasadi\u0165 superv\u00edzor. Nakoniec sme sa rozhodli, \u017ee ho potrebujeme. Vybrali sme S6. Superv\u00edzor zabezpe\u010duje spr\u00e1vu kontajnera: umo\u017e\u0148uje pripoji\u0165 sa k nemu v pr\u00edpade p\u00e1du hlavn\u00e9ho procesu a zabezpe\u010duje ru\u010dn\u00e9 riadenie kontajnera bez jeho znovuvytv\u00e1rania. Logy a metriky \u2014 to s\u00fa procesy vykon\u00e1van\u00e9 vn\u00fatri kontajnera. Tie\u017e ich mus\u00edme nejak\u00fdm sp\u00f4sobom kontrolova\u0165, a to rob\u00edme pomocou superv\u00edzora. Nakoniec S6 preber\u00e1 vykon\u00e1vanie housekeeping, spracovanie sign\u00e1lov a \u010fal\u0161ie \u00falohy.<\/p>\n<p>Ke\u010f\u017ee pou\u017e\u00edvame r\u00f4zne orchestra\u010dn\u00e9 syst\u00e9my, po zostaven\u00ed a spusten\u00ed by mal kontajner pochopi\u0165, v akom prostred\u00ed sa nach\u00e1dza, a kona\u0165 pod\u013ea situ\u00e1cie. Napr\u00edklad:<br \/>\nTo n\u00e1m umo\u017e\u0148uje zostavi\u0165 jeden obraz a spusti\u0165 ho v r\u00f4znych orchestra\u010dn\u00fdch syst\u00e9moch, pri\u010dom spustenie bude zoh\u013ead\u0148ova\u0165 \u0161pecifik\u00e1 dan\u00e9ho orchestra\u010dn\u00e9ho syst\u00e9mu.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPre ten ist\u00fd kontajner z\u00edskavame r\u00f4zne procesn\u00e9 stromy v Docker a Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u010d\u00edtanie sa vykon\u00e1va pod superv\u00edzorom S6. Upozor\u0148ujeme na collector a events \u2014 to s\u00fa na\u0161i agenti, ktor\u00ed s\u00fa zodpovedn\u00ed za logy a metriky. V Kubernetes ich nie je, zatia\u013e \u010do v Dockeri s\u00fa. Pre\u010do?\u00a0<\/p>\n<p>Ak sa pozrieme na \u0161pecifik\u00e1ciu \u201epodu\u201c (tu a \u010falej \u2013 Kubernetes pod), uvid\u00edme, \u017ee kontajner events be\u017e\u00ed v podu, v ktorom je samostatn\u00fd kontajner collector, ktor\u00fd vykon\u00e1va funkciu zbierania metr\u00edk a logov. M\u00f4\u017eeme vyu\u017ei\u0165 mo\u017enosti Kubernetes: sp\u00fa\u0161\u0165anie kontajnerov v jednom pode, v jedinom procesnom a\/alebo sie\u0165ovom priestore. Fakticky implementova\u0165 vlastn\u00fdch agentov a vykon\u00e1va\u0165 nejak\u00e9 funkcie. A ak sa tento ist\u00fd kontajner spust\u00ed v Dockeri, dostane na v\u00fdstupe v\u0161etky rovnak\u00e9 mo\u017enosti, teda bude m\u00f4c\u0165 dod\u00e1va\u0165 logy a metriky, preto\u017ee agenti bud\u00fa spusten\u00e9 vn\u00fatri.\u00a0<\/p>\n<h1>Metriky a logy<\/h1>\n<p>\nDod\u00e1vanie metr\u00edk a logov je zlo\u017eit\u00e1 \u00faloha. S jej rie\u0161en\u00edm s\u00fa spojen\u00e9 r\u00f4zne aspekty.<br \/>\nInfrastrukt\u00fara sa vytv\u00e1ra na vykon\u00e1vanie u\u017eito\u010dnej z\u00e1\u0165a\u017ee, nie na masov\u00fa distrib\u00faciu protokolov. To znamen\u00e1, \u017ee tento proces by mal prebieha\u0165 s minim\u00e1lnymi po\u017eiadavkami na zdroje kontajnerov. Sna\u017e\u00edme sa pom\u00f4c\u0165 na\u0161im v\u00fdvoj\u00e1rom: \u201eZoberte kontajner z Docker Hub, spustite ho a my sa postar\u00e1me o doru\u010denie protokolov.\u201c\u00a0<\/p>\n<p>Druh\u00fd aspekt - obmedzenie objemu protokolov. Ak sa v nieko\u013ek\u00fdch kontajneroch vyskytne situ\u00e1cia s n\u00e1rastom objemu protokolov (aplik\u00e1cia v cykle vy\/exportuje stack-trace), zvy\u0161uje sa za\u0165a\u017eenie CPU, komunika\u010dn\u00fdch kan\u00e1lov, syst\u00e9mu spracovania protokolov, a to ovplyv\u0148uje \u010dinnos\u0165 hostite\u013ea ako celku a in\u00fdch kontajnerov na hostite\u013eovi, \u010do niekedy vedie k \u201ep\u00e1du\u201c hostite\u013ea.\u00a0<\/p>\n<p>Tret\u00ed aspekt - je potrebn\u00e9 podporova\u0165 \u010do najviac met\u00f3d zberu metrick\u00fdch \u00fadajov u\u017e vo v\u00fdchozom stave. Od \u010d\u00edtania s\u00faborov a zis\u0165ovania Prometheus-endpoint po pou\u017e\u00edvanie \u0161pecifick\u00fdch protokolov aplik\u00e1ci\u00ed.<\/p>\n<p>A posledn\u00fd aspekt - je potrebn\u00e9 minimalizova\u0165 spotrebu zdrojov.<\/p>\n<p>Vybrali sme open-source rie\u0161enie na Go s n\u00e1zvom Telegraf. Toto je univerz\u00e1lny konektor, ktor\u00fd podporuje viac ako 140 typov vstupn\u00fdch kan\u00e1lov (input plugins) a 30 typov v\u00fdstupn\u00fdch (output plugins). Upraven\u00e9, a teraz v\u00e1m uk\u00e1\u017eeme, ako ho pou\u017e\u00edvame na pr\u00edklade Kubernetes.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPredpokladajme, \u017ee v\u00fdvoj\u00e1r nasadzuje z\u00e1\u0165a\u017e a Kubernetes dost\u00e1va po\u017eiadavku na vytvorenie podu. V tomto okamihu sa pre ka\u017ed\u00fd pod automaticky vytvor\u00ed kontajner s n\u00e1zvom Collector (pou\u017e\u00edvame mutation webhook). Collector je n\u00e1\u0161 agent. Pri \u0161tarte tento kontajner nastavuje seba na pr\u00e1cu s Prometheus a syst\u00e9mom zberu protokolov.<\/p>\n<ul>\n<li>Na tento \u00fa\u010del vyu\u017e\u00edva anot\u00e1cie podu a v z\u00e1vislosti od jej obsahu vytv\u00e1ra, povedzme, koncov\u00fa bodov\u00fa promethus end-point;\u00a0\n<\/li>\n<li>Na z\u00e1klade \u0161pecifik\u00e1cie podu a \u0161pecifick\u00fdch nastaven\u00ed kontajnerov ur\u010duje sp\u00f4sob doru\u010denia protokolov.\n<\/li>\n<\/ul>\n<p>\nProtokoly zbierame cez Docker API: v\u00fdvoj\u00e1rom sta\u010d\u00ed ulo\u017ei\u0165 ich do stdout alebo stderr, a potom sa o to Collector postar\u00e1. Protokoly sa zbieraj\u00fa vo fragmentoch s ur\u010dit\u00fdm oneskoren\u00edm, aby sa predi\u0161lo mo\u017en\u00e9mu pre\u0165a\u017eeniu hostite\u013ea.\u00a0<\/p>\n<p>Metriky sa zbieraj\u00fa pod\u013ea in\u0161tanci\u00ed pracovnej z\u00e1\u0165a\u017ee (procesy) v kontajneroch. V\u0161etko je ozna\u010den\u00e9 tagmi: namespace, pod a tak \u010falej, a potom sa konvertuje do form\u00e1tu Prometheus - a st\u00e1va sa dostupn\u00fdm na zber (okrem protokolov). Okrem toho protokoly, metriky a udalosti posielame do Kafky a \u010falej:<\/p>\n<ul>\n<li>Protokoly s\u00fa dostupn\u00e9 v Graylogu (na vizu\u00e1lnu anal\u00fdzu);\n<\/li>\n<li>Logy, metriky, udalosti sa odosielaj\u00fa do Clickhouse na dlhodob\u00e9 ulo\u017eenie.\n<\/li>\n<\/ul>\n<p>\nRovnako to funguje aj v AWS, len nahr\u00e1dzame Graylog s Kafka za Cloudwatch. Odosielame tam logy, a v\u0161etko je ve\u013emi pohodln\u00e9: hne\u010f je jasn\u00e9, ku ktor\u00e9mu klasteru a kontajneru patria. To ist\u00e9 plat\u00ed aj pre Google Stackdriver. Na\u0161a sch\u00e9ma teda funguje rovnako on-premise s Kafka aj v oblaku.\u00a0<\/p>\n<p>Ak nem\u00e1me Kubernetes s podmi, sch\u00e9ma je o nie\u010do zlo\u017eitej\u0161ia, ale funguje na rovnak\u00fdch princ\u00edpoch.<\/p>\n<p><img decoding=\"async\" alt=\"Obr\u00e1zky pripraven\u00e9 na produkciu pre k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVo vn\u00fatri kontajnera sa vykon\u00e1vaj\u00fa rovnak\u00e9 procesy, ktor\u00e9 s\u00fa orchestr\u00e1lne riaden\u00e9 pomocou S6. V\u0161etky tie ist\u00e9 procesy s\u00fa spusten\u00e9 v r\u00e1mci jedn\u00e9ho kontajnera.<\/p>\n<h1>Nakoniec<\/h1>\n<p>\nVytvorili sme integrovan\u00e9 rie\u0161enie na zostavenie a spustenie obrazov do prev\u00e1dzky, s mo\u017enos\u0165ami zberu a dod\u00e1vania logov a metr\u00edk:<\/p>\n<ul>\n<li>Vyvinuli sme \u0161tandardizovan\u00fd pr\u00edstup k zostavovaniu obrazov a na jeho z\u00e1klade sme vyvinuli CI \u0161abl\u00f3ny;\n<\/li>\n<li>Agenti na zber d\u00e1t s\u00fa na\u0161e roz\u0161\u00edrenia Telegraf. Dobre sme ich otestovali v produkcii;\n<\/li>\n<li>Pou\u017e\u00edvame mutation webhook na nasadzovanie kontajnerov s agentmi v podoch;\u00a0\n<\/li>\n<li>Integrovali sme sa do ekosyst\u00e9mu Kubernetes\/Rancher;\n<\/li>\n<li>M\u00f4\u017eeme sp\u00fa\u0161\u0165a\u0165 rovnak\u00e9 kontajnery v r\u00f4znych orchestra\u010dn\u00fdch syst\u00e9moch a dosiahnu\u0165 o\u010dak\u00e1van\u00fd v\u00fdsledok;\n<\/li>\n<li>Vytvorili sme \u00faplne dynamick\u00fa konfigur\u00e1ciu riadenia kontajnerov.\u00a0\n<\/li>\n<\/ul>\n<p>\nSpoluautor: <b>Ilya 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.4 - 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\/sk\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Obrazy pripraven\u00e9 na produkciu pre k8s | ProHoster","description":"Tento pr\u00edbeh je o tom, ako pou\u017e\u00edvame kontajnery v produk\u010dnom prostred\u00ed, najm\u00e4 pod Kubernetes.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}