{"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\/sl\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Produkcijsko pripravljene slike za k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ta zgodba govori o tem, kako uporabljamo kontejnerje v produkcijskem okolju, zlasti pod Kubernetesom. \u010clanek je posve\u010den zbiranju metrik in logov iz kontejnerjev ter gradnji slik.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike 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 podjetja Exness, ki razvija storitve za spletno trgovanje in fintech produkte za B2B in B2C. V na\u0161em R&amp;D imamo ve\u010d razli\u010dnih ekip, v razvojnem oddelku pa imamo ve\u010d kot 100 zaposlenih.<\/p>\n<p>Predstavljamo ekipo, ki je odgovorna za platformo za zbiranje in izvajanje kode na\u0161ih razvijalcev. Konkretno skrbimo za zbiranje, shranjevanje in zagotavljanje metrik, logov in dogodkov iz aplikacij. Trenutno upravljamo s pribli\u017eno tremi tiso\u010d Docker kontejnerji v produkcijskem okolju, podpiramo na\u0161e big data skladi\u0161\u010de s kapaciteto 50 Tb in zagotavljamo arhitekturne re\u0161itve, ki temeljijo na na\u0161i infrastrukturi: Kubernetes, Rancher in razli\u010dni javni cloud ponudniki.\u00a0<\/p>\n<h1>Na\u0161a motivacija<\/h1>\n<p>\nKaj gori? Nih\u010de ne more odgovoriti. Kje je \u017eari\u0161\u010de? Te\u017eko je razumeti. Kdaj je zagorelo? To lahko ugotovimo, vendar ne takoj.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZakaj so nekateri kontejnerji obstali, drugi pa padli? Kateri kontejner je za to kriv? Zunaj so kontejnerji enaki, znotraj pa ima vsak svoj Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161i razvijalci so dobro usposobljeni. Ustvarjajo dobre storitve, ki podjetju prina\u0161ajo dobi\u010dek. A v\u010dasih pride do napak, ko se kontejnerji z aplikacijami neusklajeno obna\u0161ajo. En kontejner porabi preve\u010d CPU, drugi omre\u017eja, tretji vhodno-izhodnih operacij, \u010detrti pa sploh ni jasno, kaj dela s soketi. Vse to pada in ladja se potaplja.\u00a0<\/p>\n<h1>Agenti<\/h1>\n<p>\nDa bi razumeli, kaj se dogaja znotraj, smo se odlo\u010dili, da agenti delujejo neposredno v kontejnerjih.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTi agenti so zadr\u017eni programi, ki ohranjajo kontejnerje v takem stanju, da se med seboj ne uni\u010dijo. Agenti so standardizirani, kar omogo\u010da standardiziran pristop k vzdr\u017eevanju kontejnerjev.\u00a0<\/p>\n<p>V na\u0161em primeru morajo agenti zagotavljati loge v standardnem formatu, ozna\u010dene in s throttle-ingom. Prav tako morajo zagotavljati standardizirane metrike, ki so raz\u0161irljive z vidika poslovnih aplikacij.<\/p>\n<p>Pod agenti se prav tako razumejo orodja za operativno in vzdr\u017eevalno delo, ki znajo delovati v razli\u010dnih sistemih orkestracije in podpirajo razli\u010dne slike (Debian, Alpine, Centos itd.).<\/p>\n<p>Nazad, agenti moraju podr\u017eavati jednostavan CI\/CD, uklju\u010duju\u0107i Docker datoteke. Ina\u010de, brod \u0107e se raspasti jer \u0107e se kontejneri isporu\u010divati po 'krivim' prugama.<\/p>\n<h1>Proces izrade i struktura ciljnog image-a<\/h1>\n<p>\nDa bi sve bilo standardizirano i upravljivo, potrebno je pridr\u017eavati se nekog standardnog procesa izrade. Zato smo odlu\u010dili da izradimo kontejnere kao kontejnere \u2014 takva je ovde rekurzija.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvdje su kontejneri prikazani kao neprekidne konture. Tako\u0111er, odlu\u010dili smo da stavimo distribucije u njih, da \u017eivot ne bi izgledao kao malina. O tome za\u0161to je to u\u010dinjeno, pri\u010dat \u0107emo u nastavku.<br \/>\n\u00a0<br \/>\nKao rezultat, dobili smo alat za izradu \u2014 kontejner odre\u0111ene verzije koji se oslanja na odre\u0111ene verzije distribucija i odre\u0111ene verzije skripti.<\/p>\n<p>Kako ga primenjujemo? Imamo Docker Hub u kojem se nalazi kontejner. Mirroriramo ga unutar na\u0161eg sistema kako bismo se oslobodili vanjskih zavisnosti. Dobio se kontejner \u017eute boje. Kreiramo \u0161ablon kako bismo instalirali u kontejner sve potrebne distribucije i skripte. Nakon toga, izra\u0111ujemo image spreman za upotrebu: programeri stavljaju svoj kod i neke svoje posebne zavisnosti.\u00a0<\/p>\n<p>\u0160ta je dobro u ovom pristupu?\u00a0<\/p>\n<ul>\n<li>Prvo, potpuna verzijska kontrola alata za izradu \u2013 kontejner izrade, verzije skripti i distribucija.\u00a0<\/li>\n<li>Drugo, postigli smo standardizaciju: na isti na\u010din kreiramo \u0161ablone, me\u0111ufazne i operativne image-e.\u00a0<\/li>\n<li>Tre\u0107e, kontejneri nam obezbje\u0111uju prenosivost. Danas koristimo Gitlab, a sutra \u0107emo pre\u0107i na TeamCity ili Jenkins i isto tako \u0107emo mo\u0107i pokretati na\u0161e kontejnere.\u00a0<\/li>\n<li>\u010cetvrto, minimizacija zavisnosti. Nismo slu\u010dajno stavili distribucije u kontejner, jer to omogu\u0107ava da ih ne preuzimamo svaki put iz interneta.\u00a0<\/li>\n<li>Peto, pove\u0107ana brzina izrade \u2013 dostupnost lokalnih kopija image-a omogu\u0107ava da ne tro\u0161imo vreme na preuzimanje, jer postoji lokalni image.\u00a0<\/li>\n<\/ul>\n<p>\nDrugim re\u010dima, postigli smo kontrolisani i fleksibilni proces izrade. Koristimo iste alate za izradu bilo kojih kontejnera sa potpunim verzioniranjem.\u00a0<\/p>\n<h1>Kako funkcioni\u0161e na\u0161 postupak izrade<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZagon se za\u010dne z eno ukazno vrstico, postopek se izvede v sliki (ozna\u010dena z rde\u010do). Razvijalec ima Docker datoteko (ozna\u010dena z rumeno), ki jo upodobimo in zamenjamo spremenljivke z vrednostmi. Hkrati dodajamo headerje in footerje - to so na\u0161i agenti.\u00a0<\/p>\n<p>Header dodaja distribucije iz ustreznih slik. Footer pa ustvari na\u0161e storitve, nastavi zagon obremenitve, bele\u017eenja in drugih agentov, spremeni entrypoint itd.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDugo smo razmi\u0161ljali, ali nam potrebujemo nadzornika. Na koncu smo se odlo\u010dili, da ga potrebujemo. Izbrali smo S6. Nadzornik omogo\u010da upravljanje kontejnerja: omogo\u010da povezovanje v primeru padca glavnega procesa in zagotavlja ro\u010dno upravljanje kontejnerja brez njegove rekonstrukcije. Dnevniki in metrike so procesi, ki se izvajajo znotraj kontejnerja. Tudi njih je treba nekako nadzorovati, kar po\u010dnemo s pomo\u010djo nadzornika. Nazadnje, S6 prevzame izvajanje upravljanja, obdelave signalov in drugih nalog.<\/p>\n<p>Ker uporabljamo razli\u010dne sisteme orkestracije, mora po sestavi in zagonu kontejner razumeti, v katerem okolju se nahaja, in delovati ustrezno. Na primer:<br \/>\nTo nam omogo\u010da, da zberemo eno sliko in jo za\u017eenemo v razli\u010dnih sistemih orkestracije, pri \u010demer se bo zagnala ob upo\u0161tevanju specifi\u010dnosti tega sistema orkestracije.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZa isti kontejner dobimo razli\u010dna drevesa procesov v Dockerju in Kubernetesu:<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObremenitev se izvaja pod nadzornikom S6. Opozorite na collector in events - to so na\u0161i agenti, odgovorni za dnevnike in metrike. V Kubernetesu jih ni, v Dockerju pa so. Zakaj?\u00a0<\/p>\n<p>\u010ce pogledamo specifikacijo 'poda' (tukaj in naprej - Kubernetes pod), bomo opazili, da kontejner events deluje v podu, kjer je lo\u010den kontejner collector, ki izvaja funkcijo zbiranja metrik in dnevnikov. Izkoristimo lahko mo\u017enosti Kubernetes: zagon kontejnerjev v enem podu, v enotnem procesnem in\/ali omre\u017enem prostoru. V bistvu vgrajujemo svoje agente in izvajamo nekatere funkcije. In \u010de se ta isti kontejner za\u017eene v Dockerju, bo prejel vse iste mo\u017enosti, to je lahko dostavil dnevnike in metrike, saj bodo agenti zagnani znotraj.\u00a0<\/p>\n<h1>Metrike in dnevniki<\/h1>\n<p>\nDostava metrik in dnevnikov je zapletena naloga. Z njeno re\u0161itvijo je povezano ve\u010d vidikov.<br \/>\nInfrastruktura se gradi za izvr\u0161avanje korisnog optere\u0107enja, a ne za masovno dostavljanje logova. Drugim re\u010dima, ovaj proces treba da se izvr\u0161ava uz minimalne zahteve za resurse kontejnera. Te\u017eimo da pomognemo na\u0161im programerima: \u201eUzmi Docker Hub kontejner, pokreni ga, i mo\u017eemo dostaviti logove.\u201c\u00a0<\/p>\n<p>Drugi aspekt - ograni\u010denje obima logova. Kada se u vi\u0161e kontejnera pojavi situacija sa pove\u0107anjem obima logova (aplikacija u petlji ispisuje stack-trace), optere\u0107enje na CPU-u, komunikacionim kanalima i sistemu za obradu logova raste, \u0161to uti\u010de na rad hosta u celini i na druge kontejnere na hostu, \u0161to ponekad dovodi do \u201epada\u201c hosta.\u00a0<\/p>\n<p>Tre\u0107i aspekt - potrebno je podr\u017eati \u0161to vi\u0161e metoda za prikupljanje metrika od samog starta. Od \u010ditanja datoteka i provere Prometheus-endpoint-a do kori\u0161\u0107enja specifi\u010dnih aplikativnih protokola.<\/p>\n<p>I poslednji aspekt - potrebno je minimizovati potro\u0161nju resursa.<\/p>\n<p>Odabrali smo open-source re\u0161enje na Go-u 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). Doprinosili smo mu, a sada \u0107emo objasniti kako ga koristi na\u0161 tim na primeru Kubernetes-a.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRecimo, programer raspore\u0111uje optere\u0107enje, i Kubernetes prima zahtev za kreiranje poda. U tom trenutku za svaki pod automatski se kreira kontejner pod nazivom Collector (koristimo mutation webhook). Collector je na\u0161 agent. Na po\u010detku, ovaj kontejner se pode\u0161ava za rad sa Prometheus-om i sistemom za prikupljanje logova.<\/p>\n<ul>\n<li>Za to koristi anotacije poda, a u zavisnosti od njenog sadr\u017eaja, kreira, recimo, krajnju ta\u010dku end-point Prometheus;\u00a0\n<\/li>\n<li>Na osnovu specifikacije poda i specifi\u010dnih pode\u0161avanja kontejnera odlu\u010duje kako \u0107e se logovi dostavljati.\n<\/li>\n<\/ul>\n<p>\nLogove prikupljamo putem Docker API-ja: programerima je dovoljno da ih postave u stdout ili stderr, a zatim \u0107e se Collector pobrinuti za njih. Logovi se prikupljaju u delovima s odre\u0111enim ka\u0161njenjem, kako bi se spre\u010dila mogu\u0107a preoptere\u0107enja hosta.\u00a0<\/p>\n<p>Metri\u010dke podatke prikupljamo po instancama radnog optere\u0107enja (procesima) u kontejnerima. Sve se ozna\u010dava tagovima: namespace, pod i tako dalje, a zatim se konvertuje u Prometheus format \u2013 i postaje dostupno za prikupljanje (osim logova). Tako\u0111e, logove, metrike i doga\u0111aje \u0161aljemo u Kafka i dalje:<\/p>\n<ul>\n<li>Logovi su dostupni u Graylog-u (za vizuelnu analizu);\n<\/li>\n<li>Dnevi, metrike in dogodki se po\u0161ljejo v Clickhouse za dolgoro\u010dno shranjevanje.\n<\/li>\n<\/ul>\n<p>\nTako kot vse deluje v AWS, pri \u010demer Graylog z Kafka nadomestimo s Cloudwatch. Tja po\u0161iljamo dneve in vse postane zelo priro\u010dno: takoj je jasno, kateremu klastru in kontejnerju pripadajo. Enako velja za Google Stackdriver. Na\u0161a shema deluje tako on-premise z Kafka kot v oblakih.\u00a0<\/p>\n<p>\u010ce nimamo Kubernetes s podi, je shema nekoliko bolj zapletena, vendar deluje po istih na\u010delih.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijsko pripravljene slike za k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZnotraj kontejnerja se izvajajo isti procesi, ki jih orkestriramo s pomo\u010djo S6. Vsi ti isti procesi so zagnani znotraj enega kontejnerja.<\/p>\n<h1>Na koncu<\/h1>\n<p>\nUstvarili smo celovito re\u0161itev za gradnjo in zagon slik v proizvodnji, z mo\u017enostmi zbiranja in dostave dnevnikov in metrik:<\/p>\n<ul>\n<li>Razvili smo standardiziran pristop k gradnji slik, na njegovi osnovi pa smo razvili CI predloge;\n<\/li>\n<li>Agenti za zbiranje podatkov so na\u0161e raz\u0161iritve Telegraf. Dobro smo jih testirali v proizvodnji;\n<\/li>\n<li>Uporabljamo mutation webhook za vklju\u010devanje kontejnerjev z agenti v podih;\u00a0\n<\/li>\n<li>Integrirali smo se v ekosistem Kubernetes\/Rancher;\n<\/li>\n<li>Lahko izvajamo enake kontejnerje v razli\u010dnih sistemih orkestracije in dobimo pri\u010dakovane rezultate;\n<\/li>\n<li>Ustvarili smo popolnoma dinami\u010dno konfiguracijo za upravljanje kontejnerjev.\u00a0\n<\/li>\n<\/ul>\n<p>\nSodisar: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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\udd47Slike pripravljene za proizvodnjo za k8s | ProHoster","description":"Ta zgodba govori o tem, kako uporabljamo kontejnerje v proizvodnem okolju, predvsem pod Kubernetes.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}