{"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\/et\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Tootmisvalmis pildid k8s jaoks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>See lugu r\u00e4\u00e4gib, kuidas me kasutame konteinerite toote keskkonnas, eriti Kubernetes'i all. Artikkel k\u00e4sitleb konteinerite m\u00f5\u00f5tmete ja logide kogumist ning piltide ehitamist.<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" 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 \/>\nMeie oleme finantstehnoloogia ettev\u00f5te Exness, mis arendab teenuseid online-kaubanduse ja finantstehnoloogiate toodete jaoks B2B ja B2C. Meie R&amp;D-s on palju erinevaid meeskondi, arendusosakonnas \u00fcle 100 t\u00f6\u00f6taja.<\/p>\n<p>Esindame meeskonda, mis vastutab meie arendajate koodi kogumise ja k\u00e4ivitamise platvormi eest. Konkreetsemalt vastutame m\u00f5\u00f5tmete, logide ja s\u00fcndmuste kogumise, salvestamise ja jagamise eest rakendustest. Praegu opereerime umbes kolme tuhande Docker-konteineriga toote keskkonnas, toetame meie 50 TB suurust big data hoidlat ning pakume arhitektuurilahendusi, mis on \u00fcles ehitatud meie infrastruktuuri \u00fcmber: Kubernetes, Rancher ja erinevad avalikud pilveteenuse pakkujad.\u00a0<\/p>\n<h1>Meie motivatsioon<\/h1>\n<p>\nMis p\u00f5leb? Keegi ei oska vastata. Kus on epitsenter? Selle m\u00f5istmine on keeruline. Millal see s\u00fcttis? Seda saab t\u00e4psustada, aga mitte kohe.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMiks m\u00f5ned konteinerid seisavad, aga teised kukuvad? Milline konteiner on s\u00fc\u00fcdi? V\u00e4ljastpoolt n\u00e4evad konteinerid v\u00e4lja identsed, kuid iga\u00fche sees on oma Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeie arendajad on osavad kutid. Nad loovad h\u00e4id teenuseid, mis toovad firmale kasumit. Kuid juhtub ka komplikatsioone, kui rakendustega konteinerid l\u00e4hevad segamini. \u00dcks konteiner tarbib liiga palju CPU-d, teine \u2014 v\u00f5rku, kolmas \u2014 sisend-v\u00e4ljundoperatsioone, neljas pole \u00fcldse selge, mida teeb socketitega. K\u00f5ik see kukub ja laev uputab.\u00a0<\/p>\n<h1>Agendid<\/h1>\n<p>\nSelleks, et m\u00f5ista, mis toimub sees, otsustasime paigutada agendid otse konteineritesse.<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNeed agendid on pidurprogrammid, mis hoiavad konteinerid sellises seisundis, et nad ei rikuks \u00fcksteist. Agendid on standardiseeritud, mis v\u00f5imaldab standardiseerida l\u00e4henemist konteinerite hooldusele.\u00a0<\/p>\n<p>Meie puhul peavad agendid andma logisid standardformaadis, m\u00e4rgitud ja throttle'itud. Samuti peavad nad andma meile standardiseeritud m\u00f5\u00f5tmeid, mis on \u00e4rirakenduste seisukohalt laiendatavad.<\/p>\n<p>Agentide alla kuuluvad ka utiliidid ekspluateerimiseks ja hoolduseks, mis oskavad t\u00f6\u00f6tada erinevates orkestreerimiss\u00fcsteemides, toetades erinevaid pilte (Debian, Alpine, Centos jne).<\/p>\n<p>L\u00f5puks peavad agendid toetama lihtsat CI\/CD-d, sealhulgas Docker-faile. Vastasel juhul laguneb laev, kuna konteinerid hakkavad tulema \"k\u00f5veratel\" r\u00f6\u00f6bastel.<\/p>\n<h1>Kogumise protsess ja sihtpildi seadmed<\/h1>\n<p>\nEt k\u00f5ik oleks standardiseeritud ja hallatav, on oluline j\u00e4rgida mingit standardset kogumisprotsessi. Seet\u00f5ttu otsustasime koguda konteineritest konteinerid \u2013 selline rekursioon.<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiin on konteinerid esitatud pidevate kontuuridena. Samuti otsustasime panna neisse distributsioonid, et \"elu ei n\u00e4iks nii lihtne\". Miks see tehtud sai, selgitame allpool.<br \/>\n\u00a0<br \/>\nTulemuseks sai kogumise t\u00f6\u00f6riist \u2013 kindla versiooniga konteiner, mis viitab teatud versioonidele distributsioonidest ja teatud versioonidele skriptidest.<\/p>\n<p>Kuidas me seda rakendame? Meil on Docker Hub, kus konteiner asub. Kopeerime selle oma s\u00fcsteemi, et vabaneda v\u00e4listest s\u00f5ltuvustest. Meil on konteiner, mis on t\u00e4histatud kollase v\u00e4rviga. Loome mall, et installida konteinerisse k\u00f5ik vajalikud distributsioonid ja skriptid. P\u00e4rast seda kogume kasutamiseks valmis pildi: arendajad panevad sinna koodi ja mingid oma erilised s\u00f5ltuvused.\u00a0<\/p>\n<p>Miks on selline l\u00e4henemine hea?\u00a0<\/p>\n<ul>\n<li>Esiteks, t\u00e4ielik versioonihaldus kogumise t\u00f6\u00f6riistadele \u2013 kogumise konteiner, skriptide ja distributsioonide versioonid.\u00a0<\/li>\n<li>Teiseks oleme saavutanud standardiseerimise: loome malli, vahepealseid ja kasutamiseks valmis pilte \u00fchtsel viisil.\u00a0<\/li>\n<li>Kolmandaks, konteinerid tagavad meile portatiivsuse. T\u00e4na kasutame Gitlabi, aga homme saame \u00fcle TeamCity-le v\u00f5i Jenkinsile ja saame samamoodi k\u00e4ivitada meie konteinerid.\u00a0<\/li>\n<li>Neljandaks, s\u00f5ltuvuste v\u00e4hendamine. Me ei pannud juhuslikult konteinerisse distributsioonide, sest see v\u00f5imaldab neid iga kord internetist alla laadida mitte.\u00a0<\/li>\n<li>Viies, kogumise kiirus on t\u00f5usnud \u2013 kohalike piltide olemasolu v\u00f5imaldab mitte raisata aega allalaadimisele, kuna kohalikke pilte on olemas.\u00a0<\/li>\n<\/ul>\n<p>\nTeisis\u00f5nu oleme saavutanud kontrollitava ja paindliku kogumisprotsessi. Kasutame k\u00f5igi konteinerite kogumiseks samu t\u00f6\u00f6riistu, millel on t\u00e4ielik versioonihaldus.\u00a0<\/p>\n<h1>Kuidas meie kogumise protseduur t\u00f6\u00f6tab<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKogumine k\u00e4ivitub \u00fche k\u00e4suga, protsess toimub pildis (m\u00e4rgitud punasega). Arendajal on Docker-fail (m\u00e4rgitud kollasega), me renderdame selle, asendades muutujad v\u00e4\u00e4rtustega. Ja samal ajal lisame header\u2019id ja footer\u2019id \u2013 need on meie agendid.\u00a0<\/p>\n<p>Header lisab distributsioonid vastavatest piltidest. Footer paigutab meie teenused, seadistab t\u00f6\u00f6koormuse, logimise ja muud agenid, asendab entrypoint'i jne.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOleme kaua m\u00f5elnud, kas paigaldada superviisor. L\u00f5puks otsustasime, et see on vajalik. Valisime S6. Superviisor tagab konteineri halduse: v\u00f5imaldab sellele juurde p\u00e4\u00e4seda, kui p\u00f5hiprotsess kukub, ja v\u00f5imaldab k\u00e4sitsi konteineri haldamist ilma seda uuesti loomata. Logid ja n\u00e4idud on protsessid, mis kestavad konteineris. Need tuleb ka mingil viisil kontrollida, ja me teeme seda superviisori abiga. L\u00f5puks, S6 teeb koristust\u00f6id, signaalide t\u00f6\u00f6tlemist ja muid \u00fclesandeid.<\/p>\n<p>Kuna kasutame erinevaid orkestreerimiss\u00fcsteeme, peab konteiner p\u00e4rast kokkupanemist ja k\u00e4ivitamist aru saama, millises keskkonnas ta asub, ja toimima vastavalt olukorrale. N\u00e4iteks:<br \/>\nSee v\u00f5imaldab meil koguda \u00fche pildi ja k\u00e4ivitada selle erinevates orkestreerimiss\u00fcsteemides, arvestades selle s\u00fcsteemi erip\u00e4ra.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSama konteineri jaoks saame erinevad protsessipuid Dockeris ja Kuberneteses:<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00e4itlemine toimub superviisori S6 all. Pange t\u00e4hele, et collector ja events \u2013 need on meie agendid, kes vastutavad logide ja n\u00e4itude eest. Kuberneteses pole neid, aga Dockeris on. Miks?\u00a0<\/p>\n<p>Kui vaadata 'podi' spetsifikatsiooni (edaspidi \u2013 Kubernetes pod), n\u00e4eme, et konteiner events k\u00e4itub podis, kus on eraldi konteiner collector, mis t\u00e4idab m\u00f5\u00f5tmete ja logide kogumise funktsiooni. Saame kasutada Kubernetes'e v\u00f5imalusi: konteinerite k\u00e4ivitamine \u00fches podis, \u00fches protsessis ja\/v\u00f5i v\u00f5rgu ruumis. Tegelikult saame integreerida oma agendid ja t\u00e4ita erinevaid funktsioone. Ja kui sama konteiner k\u00e4ivitub Dockeris, saab ta k\u00f5ik need samad v\u00f5imalused, st saab edastada logisid ja n\u00e4idiseid, kuna agendid k\u00e4ivitatakse sees.\u00a0<\/p>\n<h1>N\u00e4idud ja logid<\/h1>\n<p>\nN\u00e4idude ja logide edastamine on keeruline \u00fclesanne. Selle lahendamisel on seotud mitmed aspektid.<br \/>\nInfrastruktuur luuakse kasuliku koormuse t\u00e4itmiseks, mitte logide massiliseks edastamiseks. See t\u00e4hendab, et see protsess peaks toimuma minimaalsete n\u00f5udmistega konteinerite ressurssidele. Meie eesm\u00e4rk on aidata meie arendajatel: \"V\u00f5tke Docker Hubi konteiner, k\u00e4ivitage see ja me saame logid edastada.\"\u00a0<\/p>\n<p>Teine aspekt on logide mahu piiramine. Kui mitmes konteineris tekib logide mahu plahvatus (rakendus prindib pidevalt stack-trace'i), suureneb koormus CPU-le, sidekanalitele, logide t\u00f6\u00f6tlemise s\u00fcsteemile, ja see m\u00f5jutab hosti \u00fcldist t\u00f6\u00f6d ning muid konteinerid hostis, mis m\u00f5nikord viib hosti \"kukkumiseni\".\u00a0<\/p>\n<p>Kolmas aspekt on see, et v\u00f5imalikult palju metoodikaid m\u00f5\u00f5dikute kogumiseks tuleb tooteid v\u00e4lja pakkuda. Alates failide lugemisest ja Prometheuse l\u00f5pp-punkti k\u00fcsitlusest kuni rakenduste spetsiifiliste protokollide kasutamiseni.<\/p>\n<p>Ja viimane aspekt on ressursikasutuse minimeerimine.<\/p>\n<p>Oleme valinud open-source lahenduse Go keeles nimega Telegraf. See on universaalne konnektor, mis toetab \u00fcle 140 erineva sisenemiskanali (input plugins) ja 30 v\u00e4ljundkanali (output plugins) t\u00fc\u00fcbid. Oleme selle edasi arendanud ja n\u00fc\u00fcd r\u00e4\u00e4gime, kuidas seda meie Kuberneteses kasutada.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOletame, et arendaja k\u00e4ivitab koormuse ja Kubernetes saab taotluse podi loomiseks. Sel hetkel luuakse iga podi jaoks automaatselt konteiner nimega Collector (kasutame mutation webhooki). Collector on meie agent. K\u00e4ivitamisel seadistab see konteiner end t\u00f6\u00f6ks Prometheuse ja logide kogumise s\u00fcsteemiga.<\/p>\n<ul>\n<li>K selleks kasutab ta podi annotatsioone ning s\u00f5ltuvalt nende sisust loob n\u00e4iteks Prometheuse l\u00f5pp-punkti;\u00a0\n<\/li>\n<li>Pod'i spetsifikatsiooni ja konteinerite spetsiifiliste seadistuste p\u00f5hjal otsustab, kuidas loge edastada.\n<\/li>\n<\/ul>\n<p>\nKogume logisid l\u00e4bi Docker API: arendajatele piisab, kui nad panevad need stdout v\u00f5i stderr, ja edasi tegeleb Collector sellega. Logid kogutakse chunk'ides teatud viivitusega, et v\u00e4ltida v\u00f5imaliku hosti \u00fclekoormust.\u00a0<\/p>\n<p>M\u00f5\u00f5dikud kogutakse t\u00f6\u00f6koormuste (protsesside) kaupa konteinerites. K\u00f5ik m\u00e4rgistatakse siltidega: namespace, pod jne., ja seej\u00e4rel konverteeritakse Prometheuse vormingusse \u2013 ning muutub kogumiseks k\u00e4ttesaadavaks (v\u00e4lja arvatud logid). Samuti saadame logisid, m\u00f5\u00f5dikuid ja s\u00fcndmusi Kafka'sse ja edasi:<\/p>\n<ul>\n<li>Logid on saadaval Graylogis (visuaalse anal\u00fc\u00fcsi jaoks);\n<\/li>\n<li>Logid, m\u00f5\u00f5dikud ja s\u00fcndmused saadetakse Clickhouse\u2019i pikaajaliseks s\u00e4ilitamiseks.\n<\/li>\n<\/ul>\n<p>\nSama s\u00fcsteem t\u00f6\u00f6tab ka AWS-is, lihtsalt asendame Graylogi Kafka ja Cloudwatchiga. Saadame sinna logid, mille tagaj\u00e4rjel on k\u00f5ik v\u00e4ga mugav: kohe on selge, millisele klastrile ja konteinerile need kuuluvad. Sama kehtib ka Google Stackdriveri kohta. Meie skeem t\u00f6\u00f6tab nii on-premise lahenduses Kafka'ga kui ka pilves.\u00a0<\/p>\n<p>Kui meil pole Kubernetes'e pod'e, on skeem pisut keerulisem, kuid toimib samade p\u00f5him\u00f5tete alusel.<\/p>\n<p><img decoding=\"async\" alt=\"Tootmisvalmis pildid k8s jaoks\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKonteineri sees k\u00e4ivad samad protsessid, mida orkestreeritakse S6 abil. K\u00f5ik need protsessid on k\u00e4ivitatud \u00fches konteineris.<\/p>\n<h1>Kokkuv\u00f5ttes<\/h1>\n<p>\nOleme loonud tervikliku lahenduse piltide koostamiseks ja kasutusele v\u00f5tmiseks, logide ja m\u00f5\u00f5dikute kogumise ja edastamise v\u00f5imalustega:<\/p>\n<ul>\n<li>Oleme v\u00e4lja t\u00f6\u00f6tanud standardiseeritud l\u00e4henemise piltide koostamiseks ja selle alusel loonud CI-malle;\n<\/li>\n<li>Andmete kogumise agendid on meie Telegrafi laiendused. Oleme neid h\u00e4sti testinud tootmises;\n<\/li>\n<li>Kasutame mutation webhook'i agendiga konteinerite sisestamiseks pod'desse;\u00a0\n<\/li>\n<li>Oleme integreerunud Kubernetes\u2019e\/Rancheri \u00f6kos\u00fcsteemi;\n<\/li>\n<li>Saame k\u00e4itada samu konteinereid erinevates orkestreerimiss\u00fcsteemides ja saavutada oodatud tulemuse;\n<\/li>\n<li>Oleme loonud t\u00e4iesti d\u00fcnaamilise konteinerihalduskonfiguratsiooni.\u00a0\n<\/li>\n<\/ul>\n<p>\nKaastoimetaja: <b>Ilya Prudnikov<\/b><br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Tootmisvalmis pildid k8s | ProHoster","description":"See on lugu sellest, kuidas me kasutame konteineritootes, eriti Kubernetes'e all.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}