{"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\/hr\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Slike spremne za produkciju za k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ova pri\u010da govori o tome kako koristimo kontejnere u produkcijskom okru\u017eenju, posebno pod Kubernetesom. \u010clanak je posve\u0107en prikupljanju metrika i logova s kontejnera, kao i izradi slika.<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za 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 \/>\nMi smo iz fintech kompanije Exness, koja se bavi razvojem usluga za online trgovanje i fintech proizvode za B2B i B2C. U na\u0161em R&amp;D-u postoji mnogo razli\u010ditih timova, a u odjelu razvoja ima preko 100 zaposlenika.<\/p>\n<p>Predstavljamo tim koji je zadu\u017een za platformu za prikupljanje i pokretanje koda na\u0161ih programera. Konkretno, odgovorni smo za prikupljanje, pohranu i pru\u017eanje metrika, logova i doga\u0111anja iz aplikacija. Trenutno upravljamo s pribli\u017eno tri tisu\u0107e Docker kontejnera u produkcijskom okru\u017eenju, podr\u017eavamo na\u0161e big data skladi\u0161te od 50 TB te pru\u017eamo arhitektonska rje\u0161enja koja se grade oko na\u0161e infrastrukture: Kubernetes, Rancher i razli\u010diti javni cloud pru\u017eatelji.\u00a0<\/p>\n<h1>Na\u0161a motivacija<\/h1>\n<p>\n\u0160to gori? Nitko ne mo\u017ee odgovoriti. Gdje je \u017eari\u0161te? Te\u0161ko je razumjeti. Kada se zapalilo? Mogu\u0107e je otkriti, ali ne odmah.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZa\u0161to neki kontejneri stoje, a drugi su pali? Koji je kontejner kriv za to? Iako su izvana kontejneri isti, unutra svaki ima svog Nea.<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161i programeri su sposobni ljudi. Prave dobre usluge koje donose profit kompaniji. No, ponekad se dogode problemi kada kontejneri s aplikacijama idu naopa\u010dke. Jedan kontejner tro\u0161i previ\u0161e CPU-a, drugi mre\u017eu, tre\u0107i ulazno-izlazne operacije, a \u010detvrti \u010dak nije jasno \u0161to radi s socketima. Sve to pada i brod tone.\u00a0<\/p>\n<h1>Agenti<\/h1>\n<p>\nKako bismo shvatili \u0161to se de\u0161ava unutra, odlu\u010dili smo instalirati agente direktno u kontejnere.<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvi agenti su sredstva koja odr\u017eavaju kontejnere u takvom stanju da se me\u0111usobno ne uni\u0161tavaju. Agenti su standardizirani, \u0161to omogu\u0107ava standardizirani pristup odr\u017eavanju kontejnera.\u00a0<\/p>\n<p>U na\u0161em slu\u010daju, agenti trebaju pru\u017eati logove u standardnom formatu, ozna\u010dene i s throttlingom. Tako\u0111er, trebaju nam pru\u017eiti standardizirane metrike, pro\u0161irive s aspekta poslovnih aplikacija.<\/p>\n<p>Pod agentima se tako\u0111er podrazumijevaju alati za upravljanje i odr\u017eavanje, koji mogu raditi u razli\u010ditim sustavima orkestracije i podr\u017eavaju razli\u010dite slike (Debian, Alpine, Centos itd.).<\/p>\n<p>Na kraju, agenti moraju odr\u017eavati jednostavan CI\/CD, koji uklju\u010duje Docker datoteke. Ina\u010de \u0107e se brod raspasti, jer \u0107e se kontejneri po\u010deti isporu\u010divati po \"krivim\" tra\u010dnicama.<\/p>\n<h1>Proces izgradnje i struktura ciljnog image-a<\/h1>\n<p>\nKako bi sve bilo standardizirano i upravljivo, potrebno je pridr\u017eavati se nekog standardnog procesa izgradnje. Zato smo odlu\u010dili izgraditi kontejnere koriste\u0107i kontejnere \u2014 takva je rekursija.<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvdje su kontejneri prikazani kao \u010dvrste konture. Uz to smo odlu\u010dili staviti u njih distribucije, kako \"\u017eivot ne bi bio samo bajka\". Za\u0161to je to napravljeno, re\u0107i \u0107emo u nastavku.<br \/>\n\u00a0<br \/>\nKao rezultat, dobili smo alat za izgradnju \u2014 kontejner odre\u0111ene verzije, koji se odnosi na odre\u0111ene verzije distribucija i odre\u0111ene verzije skripti.<\/p>\n<p>Kako ga primjenjujemo? Imamo Docker Hub, gdje se nalazi kontejner. Odra\u017eavamo ga unutar svog sustava, kako bismo se oslobodili vanjskih ovisnosti. Dobio se kontejner ozna\u010den \u017eutom bojom. Stvaramo predlo\u017eak kako bismo instalirali sve potrebne distribucije i skripte u kontejner. Nakon toga, sastavljamo gotov image spreman za kori\u0161tenje: programeri ubacuju svoj kod i neke svoje posebne ovisnosti.\u00a0<\/p>\n<p>\u0160to je dobro u ovom pristupu?\u00a0<\/p>\n<ul>\n<li>Prvo, potpuna kontrola verzija alata za izgradnju \u2014 kontejner za izgradnju, verzije skripti i distribucija.\u00a0<\/li>\n<li>Drugo, postigli smo standardizaciju: na isti na\u010din stvaramo predlo\u0161ke, privremene i gotove za kori\u0161tenje image-e.\u00a0<\/li>\n<li>Tre\u0107e, kontejneri nam osiguravaju prenosivost. Danas koristimo GitLab, a sutra mo\u017eemo pre\u0107i na TeamCity ili Jenkins i na isti na\u010din pokretati na\u0161e kontejnere.\u00a0<\/li>\n<li>\u010cetvrto, minimizacija ovisnosti. Nismo slu\u010dajno stavili distribucije u kontejner, jer to omogu\u0107ava da ih ne preuzimamo svaki put s Interneta.\u00a0<\/li>\n<li>Peto, pove\u0107ana brzina izgradnje \u2014 vo\u0111enje lokalnih kopija image-a omogu\u0107ava nam da ne tro\u0161imo vrijeme na preuzimanje, jer imamo lokalni image.\u00a0<\/li>\n<\/ul>\n<p>\nDrugim rije\u010dima, postigli smo kontrolirani i fleksibilni proces izgradnje. Koristimo iste alate za izgradnju svih kontejnera s punim vo\u0111enjem verzija.\u00a0<\/p>\n<h1>Kako funkcionira na\u0161 postupak izgradnje?<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPokretanje se vr\u0161i jednom naredbom, proces se izvr\u0161ava unutar slike (ozna\u010deno crvenom). Programer ima Docker datoteku (ozna\u010deno \u017eutom), koju renderiramo zamjenom varijabli s vrijednostima. Uz to dodajemo zaglavlja i podno\u017eja \u2014 to su na\u0161i agenti.\u00a0<\/p>\n<p>Zaglavlje dodaje distribucije iz odgovaraju\u0107ih slika. Podno\u017eje postavlja na\u0161e usluge unutra, konfigurira pokretanje radnog optere\u0107enja, logiranje i ostale agente, zamjenjuje entrypoint itd.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDugo smo razmi\u0161ljali o tome trebamo li supervizor. Na kraju smo odlu\u010dili da nam je potreban. Odabrali smo S6. Supervizor osigurava upravljanje kontejnerom: omogu\u0107uje povezivanje s njim u slu\u010daju pada glavnog procesa i osigurava ru\u010dno upravljanje kontejnerom bez ponovnog kreiranja. Logovi i metrike su procesi koji se izvr\u0161avaju unutar kontejnera. Njih tako\u0111er treba nekako kontrolirati, a to radimo putem supervizora. Na kraju, S6 preuzima izvr\u0161avanje odr\u017eavanja, obradu signala i druge zadatke.<\/p>\n<p>Budu\u0107i da koristimo razli\u010dite orkestracijske sustave, nakon izgradnje i pokretanja, kontejner treba shvatiti u kojem se okru\u017eenju nalazi i djelovati prema situaciji. Na primjer:<br \/>\nTo nam omogu\u0107uje da izgradimo jednu sliku i pokrenemo je u razli\u010ditim orkestracijskim sustavima, pritom \u0107e se pokrenuti s obzirom na specifi\u010dnosti tog sustava orkestracije.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZa isti kontejner dobivamo razli\u010dita procesna stabla u Dockeru i Kubernetesu:<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKoristan teret se izvr\u0161ava pod supervizorom S6. Obavezno obratite pa\u017enju na kolektor i doga\u0111aje \u2014 to su na\u0161i agenti odgovorni za logove i metrike. U Kubernetesu ih nema, dok u Dockeru postoje. Za\u0161to?\u00a0<\/p>\n<p>Ako pogledamo specifikaciju \u201epoda\u201d (ovdje i dalje \u2013 Kubernetes pod), vidjet \u0107emo da se kontejner doga\u0111aja izvr\u0161ava u podu, u kojem postoji odvojeni kontejner kolektora koji obavlja funkciju prikupljanja metrika i logova. Mo\u017eemo iskoristiti mogu\u0107nosti Kubernetes-a: pokretanje kontejnera u istom podu, u jedinstvenim procesnim i\/ili mre\u017enim prostorima. U stvari, implementirati svoje agente i izvr\u0161avati odre\u0111ene funkcije. I ako se taj isti kontejner pokrene u Dockeru, dobit \u0107e iste mogu\u0107nosti, tj. mo\u0107i \u0107e dostaviti logove i metrike jer \u0107e agenti biti pokrenuti unutar njega.\u00a0<\/p>\n<h1>Metrike i logovi<\/h1>\n<p>\nDostavljanje metrika i logova je slo\u017een zadatak. Sa njegovim rje\u0161avanjem povezani su razli\u010diti aspekti.<br \/>\nInfrastruktura se stvara za izvr\u0161avanje korisnog optere\u0107enja, a ne za masovnu isporuku dnevnika. To zna\u010di da ovaj proces treba izvoditi s minimalnim zahtjevima prema resursima kontejnera. Te\u017eimo pomo\u0107i na\u0161im programerima: \"Uzmite Docker Hub kontejner, pokrenite ga, i mi \u0107emo mo\u0107i dostaviti dnevnike\".\u00a0<\/p>\n<p>Drugi aspekt je ograni\u010denje volumena dnevnika. Ako do\u0111e do situacije s pove\u0107anjem volumena dnevnika u nekoliko kontejnera (aplikacija u petlji ispisuje stack-trace), optere\u0107enje CPU-a, komunikacijskih kanala i sustava obrade dnevnika raste, \u0161to utje\u010de na rad doma\u0107ina u cjelini i na druge kontejnere na doma\u0107inu, \u0161to katkad dovodi do \"pada\" doma\u0107ina.\u00a0<\/p>\n<p>Tre\u0107i aspekt je potreba da se podr\u017ei \u0161to vi\u0161e metoda prikupljanja metrika iz kutije. Od \u010ditanja datoteka i ispitivanja Prometheus-endpointa do kori\u0161tenja specifi\u010dnih aplikacijskih protokola.<\/p>\n<p>I posljednji aspekt je potreba da se minimizira potro\u0161nja resursa.<\/p>\n<p>Odabrali smo open-source rje\u0161enje na Go pod nazivom Telegraf. To je univerzalni konektor koji podr\u017eava vi\u0161e od 140 vrsta ulaznih kanala (input plugins) i 30 vrsta izlaznih (output plugins). Dorabili smo ga i sada \u0107emo objasniti kako se koristi u na\u0161em slu\u010daju s Kubernetesom.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPretpostavimo da programer implementira optere\u0107enje, a Kubernetes dobiva zahtjev za stvaranje pod-a. U tom trenutku za svaki pod automatski se stvara kontejner pod nazivom Collector (koristimo mutation webhook). Collector je na\u0161 agent. Pri pokretanju, ovaj kontejner se postavlja za rad s Prometheusom i sustavom za prikupljanje dnevnika.<\/p>\n<ul>\n<li>Za to koristi anotacije poda, i ovisno o njenom sadr\u017eaju, stvara, recimo, krajnju to\u010dku end-point za Prometheus;\u00a0\n<\/li>\n<li>Na temelju specifikacije poda i specifi\u010dnih postavki kontejnera odlu\u010duje kako isporu\u010divati dnevnike.\n<\/li>\n<\/ul>\n<p>\nDnevnik prikupljamo putem Docker API-ja: programerima je dovoljno staviti ih u stdout ili stderr, a zatim \u0107e Collector obaviti ostalo. Dnevnici se prikupljaju u chunkovima s odre\u0111enim ka\u0161njenjem, kako bi se sprije\u010dilo mogu\u0107e preoptere\u0107enje doma\u0107ina.\u00a0<\/p>\n<p>Metrike se prikupljaju po instancama radnog optere\u0107enja (procesima) u kontejnerima. Sve se ozna\u010dava oznakama: namespace, pod i tako dalje, a zatim se konvertira u Prometheus format \u2013 i postaje dostupno za prikupljanje (osim dnevnika). Tako\u0111er, dnevnici, metrike i doga\u0111aji \u0161alju se u Kafka i dalje:<\/p>\n<ul>\n<li>Dnevnici su dostupni u Graylogu (za vizualnu analizu);\n<\/li>\n<li>Logovi, metrike i doga\u0111aji \u0161alju se u Clickhouse za dugoro\u010dno skladi\u0161tenje.\n<\/li>\n<\/ul>\n<p>\nIsto tako sve radi u AWS-u, samo zamjenjujemo Graylog s Kafka za Cloudwatch. \u0160aljemo logove tamo i sve je vrlo prakti\u010dno: odmah je jasno kojem klusteru i kontejneru pripadaju. Ista stvar vrijedi i za Google Stackdriver. Dakle, shema radi i on-premise s Kafkom, i u oblaku.\u00a0<\/p>\n<p>Ako nemamo Kubernetes s podovima, shema postaje malo slo\u017eenija, ali radi prema istim principima.<\/p>\n<p><img decoding=\"async\" alt=\"Slike spremne za produkciju za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnutar kontejnera izvr\u0161avaju se isti procesi, orkestrirani pomo\u0107u S6. Svi ti procesi pokrenuti su unutar jednog kontejnera.<\/p>\n<h1>U kona\u010dnici<\/h1>\n<p>\nKreirali smo cjelovito rje\u0161enje za izgradnju i pokretanje slika u produkciji, s opcijama za prikupljanje i dostavu logova i metrike:<\/p>\n<ul>\n<li>Razvili smo standardizirani pristup za izgradnju slika, na temelju kojeg smo razvili CI predlo\u0161ke;\n<\/li>\n<li>Agenti za prikupljanje podataka su na\u0161i pro\u0161irenja Telegraf. Dobro smo ih testirali u produkciji;\n<\/li>\n<li>Primjenjujemo mutation webhook za implementaciju kontejnera s agentima u podovima;\u00a0\n<\/li>\n<li>Integrirali smo se u ekosustav Kubernetes\/Rancher;\n<\/li>\n<li>Mo\u017eemo izvr\u0161avati iste kontejnere u razli\u010ditim sustavima orkestracije i dobiti o\u010dekivani rezultat;\n<\/li>\n<li>Kreirali smo potpuno dinami\u010dku konfiguraciju za upravljanje kontejnerima.\u00a0\n<\/li>\n<\/ul>\n<p>\nKoautor: <b>Ilja Prudnikov<\/b><br \/>\n<br \/>Izvor: <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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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\udd47Production-ready images for k8s | ProHoster","description":"Ova pri\u010da o tome kako koristimo kontejnere u produkcijskom okru\u017eenju, osobito pod Kubernetes.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}