{"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\/sv\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Production-ready bilder f\u00f6r k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Den h\u00e4r historien handlar om hur vi anv\u00e4nder containrar i produktionsmilj\u00f6, s\u00e4rskilt under Kubernetes. Artikeln handlar om insamling av metrik och loggar fr\u00e5n containrar, samt byggande av bilder.<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r 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 \/>\nVi kommer fr\u00e5n fintech-f\u00f6retaget Exness, som utvecklar tj\u00e4nster f\u00f6r onlinehandel och fintech-produkter f\u00f6r B2B och B2C. I v\u00e5r R&amp;D finns det m\u00e5nga olika team, och avdelningen f\u00f6r utveckling har \u00f6ver 100 anst\u00e4llda.<\/p>\n<p>Vi representerar teamet som ansvarar f\u00f6r plattformen f\u00f6r insamling och k\u00f6rning av kod av v\u00e5ra utvecklare. Specifikt ansvarar vi f\u00f6r insamling, lagring och tillhandah\u00e5llande av metrik, loggar och h\u00e4ndelser fr\u00e5n applikationer. F\u00f6r n\u00e4rvarande hanterar vi cirka tre tusen Docker-containrar i produktionsmilj\u00f6, uppr\u00e4tth\u00e5ller v\u00e5rt big data-lager p\u00e5 50 TB och tillhandah\u00e5ller arkitekturl\u00f6sningar som byggs runt v\u00e5r infrastruktur: Kubernetes, Rancher och olika offentliga molnleverant\u00f6rer.\u00a0<\/p>\n<h1>V\u00e5r motivation<\/h1>\n<p>\nVad brinner? Ingen kan svara. Var \u00e4r fokus? Sv\u00e5rt att f\u00f6rst\u00e5. N\u00e4r b\u00f6rjade det brinna? Det g\u00e5r att ta reda p\u00e5, men inte omedelbart.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVarf\u00f6r st\u00e5r vissa containrar stilla medan andra har fallit? Vilken container orsakade det? Utifr\u00e5n verkar containrarna likadana, men inuti har varje sin egen Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00e5ra utvecklare \u00e4r kompetenta personer. De skapar bra tj\u00e4nster som ger f\u00f6retaget vinst. Men det uppst\u00e5r ocks\u00e5 problem n\u00e4r containrarna med applikationerna sprider sig. En container f\u00f6rbrukar f\u00f6r mycket CPU, en annan n\u00e4tverk, en tredje I\/O-operationer, och en fj\u00e4rde g\u00f6r \u00f6verhuvudtaget oklara saker med sockets. Allt detta faller och skeppet sjunker.\u00a0<\/p>\n<h1>Agenter<\/h1>\n<p>\nF\u00f6r att f\u00f6rst\u00e5 vad som h\u00e4nder inuti beslutade vi att installera agenter direkt i containrarna.<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDessa agenter \u00e4r kontrollprogram som h\u00e5ller containrarna i ett s\u00e5dant tillst\u00e5nd s\u00e5 att de inte f\u00f6rst\u00f6r varandra. Agenterna \u00e4r standardiserade, vilket g\u00f6r att vi kan standardisera tillv\u00e4gag\u00e5ngss\u00e4ttet f\u00f6r underh\u00e5ll av containrar.\u00a0<\/p>\n<p>I v\u00e5rt fall m\u00e5ste agenterna tillhandah\u00e5lla loggar i ett standardformat, taggade och med throttling. Dessutom m\u00e5ste de ge oss standardiserade metrik som \u00e4r utbyggbara ur aff\u00e4rsapplikationernas perspektiv.<\/p>\n<p>Under agenter avser vi ocks\u00e5 verktyg f\u00f6r drift och underh\u00e5ll som kan fungera i olika orkestreringssystem, och st\u00f6der olika images (Debian, Alpine, Centos osv.).<\/p>\n<p>\u00c4ntligen m\u00e5ste agenter st\u00f6dja en enkel CI\/CD som inkluderar Docker-filer. Annars kommer skeppet att g\u00e5 s\u00f6nder eftersom containrarna b\u00f6rjar levereras p\u00e5 \"sneda\" sp\u00e5r.<\/p>\n<h1>Byggprocess och uppbyggnad av m\u00e5limagen<\/h1>\n<p>\nF\u00f6r att allt ska vara standardiserat och hanterbart m\u00e5ste vi f\u00f6lja en standardiserad byggprocess. D\u00e4rf\u00f6r har vi beslutat att bygga containrar med hj\u00e4lp av containrar - s\u00e5dan \u00e4r v\u00e5r rekursion.<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nH\u00e4r representeras containrarna med solida konturer. Vi best\u00e4mde oss f\u00f6r att l\u00e4gga in distributionerna i dem, s\u00e5 att \"livet inte k\u00e4ndes som en dans p\u00e5 rosor\". Varf\u00f6r detta gjordes, kommer vi att ber\u00e4tta nedan.<br \/>\n\u00a0<br \/>\nResultatet blev ett verktyg f\u00f6r byggande - en container av viss version som refererar till specifika versioner av distributionerna och specifika versioner av skripten.<\/p>\n<p>Hur anv\u00e4nder vi det? Vi har en Docker Hub d\u00e4r containern finns. Vi speglar den in i v\u00e5rt eget system f\u00f6r att bli av med externa beroenden. Vi fick en container som markerats med gult. Vi skapar en mall f\u00f6r att installera alla n\u00f6dv\u00e4ndiga distributioner och skript i containern. D\u00e4refter bygger vi en fullst\u00e4ndig bild som \u00e4r redo f\u00f6r drift: utvecklarna l\u00e4gger in sin kod och vissa egna specifika beroenden.\u00a0<\/p>\n<p>Vad \u00e4r f\u00f6rdelarna med ett s\u00e5dant tillv\u00e4gag\u00e5ngss\u00e4tt?\u00a0<\/p>\n<ul>\n<li>F\u00f6r det f\u00f6rsta, komplett versionskontroll av byggverktyg - byggcontainer, versioner av skript och distributioner.\u00a0<\/li>\n<li>F\u00f6r det andra, har vi uppn\u00e5tt standardisering: vi skapar mallar, mellanliggande och driftsklara bilder p\u00e5 samma s\u00e4tt.\u00a0<\/li>\n<li>F\u00f6r det tredje ger containrarna oss portabilitet. Idag anv\u00e4nder vi Gitlab, och imorgon byter vi till TeamCity eller Jenkins och kan p\u00e5 samma s\u00e4tt k\u00f6ra v\u00e5ra containrar.\u00a0<\/li>\n<li>F\u00f6r det fj\u00e4rde, minimering av beroenden. Vi har inte av en slump lagt distributioner i containern, eftersom detta g\u00f6r att vi inte beh\u00f6ver ladda ner dem varje g\u00e5ng fr\u00e5n Internet.\u00a0<\/li>\n<li>F\u00f6r det femte, har hastigheten p\u00e5 byggprocessen \u00f6kat - tillg\u00e5ngen p\u00e5 lokala kopior av bilder g\u00f6r att vi inte beh\u00f6ver l\u00e4gga tid p\u00e5 nedladdningar, eftersom det finns en lokal bild.\u00a0<\/li>\n<\/ul>\n<p>\nMed andra ord har vi uppn\u00e5tt en kontrollerad och flexibel byggprocess. Vi anv\u00e4nder samma verktyg f\u00f6r att bygga alla containrar med fullst\u00e4ndig versionering.\u00a0<\/p>\n<h1>Hur fungerar v\u00e5r byggprocess?<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nByggandet startar med ett kommando och processen k\u00f6rs i en bild (markerad med r\u00f6d). Utvecklaren har en Docker-fil (markerad med gul), som vi renderar genom att byta ut variabler mot v\u00e4rden. Samtidigt l\u00e4gger vi till header och footer - detta \u00e4r v\u00e5ra agenter.\u00a0<\/p>\n<p>Headern l\u00e4gger till distributioner fr\u00e5n motsvarande bilder. Och footern installerar v\u00e5ra tj\u00e4nster, konfigurerar belastningsstart, loggning och andra agenter, byter ut entrypoint osv.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi \u00f6verv\u00e4gde l\u00e4nge om vi skulle anv\u00e4nda en supervisor. Till slut best\u00e4mde vi att vi beh\u00f6vde en. Vi valde S6. Supervisorn m\u00f6jligg\u00f6r hantering av containern: den g\u00f6r det m\u00f6jligt att ansluta till den om huvudprocessen kraschar och ger manuell kontroll \u00f6ver containern utan att beh\u00f6va \u00e5terskapa den. Loggar och m\u00e4tv\u00e4rden \u00e4r processer som k\u00f6rs inuti containern. Vi m\u00e5ste ocks\u00e5 kontrollera dem, och det g\u00f6r vi med hj\u00e4lp av supervisorn. Slutligen tar S6 hand om housekeeping, signalbearbetning och andra uppgifter.<\/p>\n<p>Eftersom vi anv\u00e4nder olika orkestreringssystem, efter byggandet och startandet av containern, m\u00e5ste den f\u00f6rst\u00e5 i vilken milj\u00f6 den befinner sig och agera utifr\u00e5n situationen. Till exempel:<br \/>\nDetta g\u00f6r att vi kan bygga en bild och k\u00f6ra den i olika orkestreringssystem, d\u00e4r den kommer att startas med h\u00e4nsyn till specifika krav fr\u00e5n detta orkestreringssystem.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6r samma container f\u00e5r vi olika processtr\u00e4d i Docker och Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNyttolasten k\u00f6rs under supervisorn S6. Observera collector och events - detta \u00e4r v\u00e5ra agenter som ansvarar f\u00f6r loggar och m\u00e4tv\u00e4rden. I Kubernetes finns de inte, men i Docker finns de. Varf\u00f6r?\u00a0<\/p>\n<p>Om vi ser p\u00e5 specifikationen f\u00f6r \u2018pod\u2019 (h\u00e4refter Kubernetes pod) kommer vi att se att containern events k\u00f6rs i en pod d\u00e4r det finns en separat container collector som utf\u00f6r funktionen av att samla m\u00e4tv\u00e4rden och loggar. Vi kan anv\u00e4nda Kubernetes-funktioner: k\u00f6ra containrar i samma pod, i samma process- och\/eller n\u00e4tverksutrymmen. Faktiskt inf\u00f6ra v\u00e5ra agenter och utf\u00f6ra vissa funktioner. Och om samma container startas i Docker f\u00e5r den alla samma m\u00f6jligheter, det vill s\u00e4ga kan leverera loggar och m\u00e4tv\u00e4rden, eftersom agenterna kommer att k\u00f6ras inuti.\u00a0<\/p>\n<h1>M\u00e4tv\u00e4rden och loggar<\/h1>\n<p>\nLeverans av m\u00e4tv\u00e4rden och loggar \u00e4r en komplex uppgift. Det finns flera aspekter kopplade till dess l\u00f6sning.<br \/>\nInfrastrukturen skapas f\u00f6r att hantera nyttolast, inte f\u00f6r massdistribution av loggar. Det vill s\u00e4ga att denna process b\u00f6r utf\u00f6ras med minimala resurskrav f\u00f6r containrarna. Vi str\u00e4var efter att hj\u00e4lpa v\u00e5ra utvecklare: \"Ta en Docker Hub-container, starta den, s\u00e5 kan vi leverera loggar.\"\u00a0<\/p>\n<p>Den andra aspekten \u00e4r begr\u00e4nsningen av loggvolymen. Om flera containrar genererar en \u00f6kning av loggvolymen (t.ex. en applikation som i en loop skriver stacktrace), \u00f6kar belastningen p\u00e5 CPU, kommunikationskanaler och logghanteringssystemet, vilket p\u00e5verkar v\u00e4rdenheten och andra containrar p\u00e5 v\u00e4rdenheten, och ibland leder detta till att v\u00e4rdenheten \"fallerar\".\u00a0<\/p>\n<p>Den tredje aspekten \u00e4r att st\u00f6dja s\u00e5 m\u00e5nga metoder f\u00f6r insamling av m\u00e4tv\u00e4rden som m\u00f6jligt direkt fr\u00e5n starten. Fr\u00e5n att l\u00e4sa filer och fr\u00e5ga Prometheus-endpoint till att anv\u00e4nda specifika applikationsprotokoll.<\/p>\n<p>Och den sista aspekten \u00e4r att minimera resursf\u00f6rbrukningen.<\/p>\n<p>Vi har valt en open-source-l\u00f6sning i Go kallad Telegraf. Det \u00e4r en universell koppling som st\u00f6djer \u00f6ver 140 typer av ing\u00e5ngskanaler (input plugins) och 30 typer av utg\u00e5ngskanaler (output plugins). Vi har vidareutvecklat den och nu ska vi ber\u00e4tta hur den anv\u00e4nds i v\u00e5rt fall med Kubernetes.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnta att en utvecklare deployar en belastning, och Kubernetes f\u00e5r en beg\u00e4ran om att skapa en pod. Vid detta \u00f6gonblick skapas automatiskt en container med namnet Collector f\u00f6r varje pod (vi anv\u00e4nder mutation webhook). Collector \u00e4r v\u00e5r agent. Vid start konfigurerar denna container sig sj\u00e4lv f\u00f6r att arbeta med Prometheus och logginsamlingssystemet.<\/p>\n<ul>\n<li>F\u00f6r detta anv\u00e4nder den pod-annoteringar, och beroende p\u00e5 inneh\u00e5llet skapar den till exempel en slutpunkt f\u00f6r Prometheus.\u00a0\n<\/li>\n<li>Baserat p\u00e5 pod-specifikationen och specifika konfigurationer f\u00f6r containrar beslutar den hur loggar ska levereras.\n<\/li>\n<\/ul>\n<p>\nLoggar samlas in via Docker API: utvecklarna beh\u00f6ver bara skriva dem till stdout eller stderr, och sedan tar Collector hand om resten. Loggarna samlas in i chunkar med viss f\u00f6rdr\u00f6jning f\u00f6r att f\u00f6rhindra eventuell \u00f6verbelastning av v\u00e4rdenheten.\u00a0<\/p>\n<p>M\u00e4tv\u00e4rden samlas in per instans av arbetsbelastningar (rocesser) i containrar. Allt m\u00e4rks med taggar: namespace, pod och s\u00e5 vidare, och konverteras sedan till Prometheus-format - och blir tillg\u00e4ngligt f\u00f6r insamling (f\u00f6rutom loggar). Dessutom skickar vi loggar, m\u00e4tv\u00e4rden och h\u00e4ndelser till Kafka och vidare:<\/p>\n<ul>\n<li>Loggar \u00e4r tillg\u00e4ngliga i Graylog (f\u00f6r visuell analys);\n<\/li>\n<li>Loggar, m\u00e4tningar och h\u00e4ndelser skickas till Clickhouse f\u00f6r l\u00e5ngsiktig lagring.\n<\/li>\n<\/ul>\n<p>\nP\u00e5 samma s\u00e4tt fungerar allt i AWS, endast att vi byter ut Graylog med Kafka mot Cloudwatch. Vi skickar loggar dit, och allt blir mycket bekv\u00e4mt: det \u00e4r direkt klart vilket kluster och vilken container de h\u00f6r till. Detsamma g\u00e4ller f\u00f6r Google Stackdriver. S\u00e5 v\u00e5r l\u00f6sning fungerar b\u00e5de on-premise med Kafka och i molnet.\u00a0<\/p>\n<p>Om vi inte har Kubernetes med pods, blir systemet n\u00e5got mer komplicerat, men det fungerar enligt samma principer.<\/p>\n<p><img decoding=\"async\" alt=\"Production-ready bilder f\u00f6r k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInuti containern k\u00f6rs samma processer, de orkestreras med hj\u00e4lp av S6. Samma processer har startats inuti en och samma container.<\/p>\n<h1>I slut\u00e4ndan<\/h1>\n<p>\nVi har skapat en helhetsl\u00f6sning f\u00f6r att bygga och k\u00f6ra bilder i produktion, med alternativ f\u00f6r insamling och leverans av loggar och m\u00e4tningar:<\/p>\n<ul>\n<li>Vi har utvecklat en standardiserad metod f\u00f6r att bygga bilder och utifr\u00e5n den har vi utvecklat CI-mallar;\n<\/li>\n<li>Agenter f\u00f6r datainsamling \u00e4r v\u00e5ra Telegraf-till\u00e4gg. Vi har testat dem ordentligt i produktion;\n<\/li>\n<li>Vi anv\u00e4nder mutation webhook f\u00f6r att integrera containrar med agenter i pods;\u00a0\n<\/li>\n<li>Vi har integrerat oss i Kubernetes\/Rancher-ekosystemet;\n<\/li>\n<li>Vi kan k\u00f6ra identiska containrar i olika orkestreringssystem och f\u00e5 det resultat vi f\u00f6rv\u00e4ntar oss;\n<\/li>\n<li>Vi har skapat en helt dynamisk konfiguration f\u00f6r hantering av containrar.\u00a0\n<\/li>\n<\/ul>\n<p>\nMedf\u00f6rfattare: <b>Ilja Prudnikov<\/b><br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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":"Denna ber\u00e4ttelse handlar om hur vi anv\u00e4nder containrar i produktionsmilj\u00f6, s\u00e4rskilt under Kubernetes.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/production-ready-images-for-k8s","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/81173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}