{"id":96065,"date":"2020-10-07T13:42:09","date_gmt":"2020-10-07T11:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf"},"modified":"2020-10-07T13:42:09","modified_gmt":"2020-10-07T11:42:09","slug":"problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","title":{"rendered":"Probleem \"nutikast\" konteineripiltide puhastamisest ja selle lahendus werf'is","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Probleem &quot;nutikast&quot; konteineripiltide puhastamisest ja selle lahendus werf&#039;is\" src=\"\/wp-content\/uploads\/2020\/10\/1410cea46bb8dcdc3ac06db11ed5a402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArtiklis k\u00e4sitletakse konteinerite registrites (nt Docker Registry) kogunevate piltide puhastamise probleeme kaasaegsete CI\/CD torujuhtmete tingimustes, mis on m\u00f5eldud Kuberneteses tarnitavatele pilvep\u00f5histele rakendustele. Toome v\u00e4lja peamised piltide aktuaalsuse kriteeriumid ja nendest tulenevad raskused puhastamise automatiseerimisel, ruumi s\u00e4\u00e4stmisel ja meeskondade vajaduste rahuldamisel. L\u00f5puks r\u00e4\u00e4gime konkreetse avatud l\u00e4htekoodiga projekti n\u00e4itel, kuidas neid raskusi \u00fcletada.<\/p>\n<h2>Sissejuhatus<\/h2>\n<p>\nKonteinerite registris olevate piltide arv v\u00f5ib kiiresti kasvada, h\u00f5ivates rohkem ruumi salvestuses ja suurenedes seel\u00e4bi oluliselt selle maksumust. Ruumi kontrollimiseks, piiramiseks v\u00f5i vastuv\u00f5etava kasvu s\u00e4ilitamiseks registry's kasutatakse tavaliselt:<\/p>\n<ol>\n<li>fikseeritud arvu silte piltide jaoks;<\/li>\n<li>millelegi muule nagu piltide puhastamine.<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEsimene piirang on m\u00f5nikord lubatav v\u00e4ikestes meeskondades. Kui arendajatele piisab p\u00fcsivatest siltest (<code>latest<\/code>, <code>main<\/code>, <code>test<\/code>, <code>boris<\/code> jne), ei paisu register suuruseks ja saab pikka aega t\u00e4ielikult unustada puhastamisest. K\u00f5ik mitteaktuaalsed pildid \u00fcksteise \u00fcle kirjutatakse ja puhastamiseks ei j\u00e4\u00e4 lihtsalt t\u00f6\u00f6d (k\u00f5ik toimub tavap\u00e4rase r\u00e4mpsup\u00fc\u00fcdja kaudu).<\/p>\n<p>Siiski piirab selline l\u00e4henemine tugevalt arendustegevust ja on harva kasutatav kaasaegsetes CI\/CD projektides. Arendamise lahutamatuks osaks on saanud <strong>automaatika<\/strong>, mis v\u00f5imaldab uute funktsioonide testimist, juurutamist ja tarnimist kasutajatele palju kiiremini. N\u00e4iteks meie k\u00f5igis projektides luuakse iga commiti ajal automaatselt CI-pipe. Seal luuakse pilt, testitakse, suunatakse erinevatesse Kubernetes keskkondadesse t\u00f5rgete v\u00e4ltimiseks ja \u00fclej\u00e4\u00e4nud kontrollide jaoks, ja kui k\u00f5ik on h\u00e4sti, j\u00f5uavad muudatused l\u00f5ppkasutajani. See pole ammu mitte raketiteadus, vaid paljudele igap\u00e4evane praktika \u2014 t\u00f5en\u00e4oliselt ka teile, kuna loete seda artiklit.<\/p>\n<p>Kuna vigade k\u00f5rvaldamine ja uue funktsionaalsuse arendamine toimub paralleelselt ning v\u00e4ljastamine v\u00f5ib toimuda mitu korda p\u00e4evas, on ilmselge, et arendusprotsessiga kaasneb m\u00e4rkimisv\u00e4\u00e4rne arv commit'e, ja seega - <strong>suure arvu piltide olemasolu registry's.<\/strong>Seet\u00f5ttu kerkib teravalt \u00fcles k\u00fcsimus efektiivse registry puhastamise korraldamisest, st mitteaktuaalsete piltide eemaldamisest.<\/p>\n<p>Kuidas aga kindlaks teha, kas pilt on asjakohane?<\/p>\n<h2>Pildi asjakohasuse kriteeriumid<\/h2>\n<p>\nEnamikul juhtudel on peamised kriteeriumid j\u00e4rgmised:<\/p>\n<p>1. Esimene (k\u00f5ige ilmsem ja k\u00f5ikidest k\u00f5ige kriitilisem) \u2014 need on pildid, mis <strong>hetkel kasutatakse Kuberneteses<\/strong>. Nende eemaldamine v\u00f5ib p\u00f5hjustada t\u00f5siseid kulusid seoses produktsiooni seiskumisega (n\u00e4iteks v\u00f5ivad pildid olla vajalikud kopeerimise ajal) v\u00f5i t\u00fchistada meeskonna pingutused, kes tegeleb t\u00f5rgete t\u00f5rkeotsinguga m\u00f5nes kontuuris. <i>(Sellep\u00e4rast tegime eraldi <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/k8s-image-availability-exporter\"><i>Prometheus eksportija<\/i><\/a><\/noindex><i>, mis j\u00e4lgib selliste piltide puudumist igas Kubernetes-klastris.)<\/i><\/p>\n<p>2. Teine (v\u00e4hem ilmne, kuid samuti v\u00e4ga oluline ja j\u00e4lle seotud kasutamisega) \u2014 pildid, mis <strong>on vajalikud rikka juhtudel, kui esinevad t\u00f5sised probleemid<\/strong> praeguses versioonis. N\u00e4iteks, kui r\u00e4\u00e4kida Helm'ist, siis on need pildid, mis on kasutusel salvestatud v\u00e4ljalaskeversioonides. (Muide, Helm'il on vaikimisi 256 revideerimise piirm\u00e4\u00e4r, kuid kas kellelgi on t\u00f5eliselt vajadust s\u00e4ilitada <i>nii<\/i> suurt versioonide arvu?..) Me hoiame versioone just selleks, et neid hiljem kasutada, st et saaksime vajadusel \u201etagasi p\u00f6\u00f6rduda\u201c.<\/p>\n<p>3. Kolmas \u2014 <strong>arendajate vajadused<\/strong>: k\u00f5ik pildid, mis on seotud nende praeguste t\u00f6\u00f6dega. N\u00e4iteks, kui vaatame PR'i, on m\u00f5istlik j\u00e4tta pilt, mis vastab viimasele commit'ile ja, \u00fctleme, eelmisele commit'ile: nii saab arendaja kiiresti naasta igasse \u00fclesandesse ja t\u00f6\u00f6tada viimaste muudatustega. <\/p>\n<p>4. Neljas \u2014 pildid, mis <strong>vastavad meie rakenduse versioonidele<\/strong>, st on l\u00f5pptooted: v1.0.0, 20.04.01, sierra jms.<\/p>\n<p>NB: Siin v\u00e4lja toodud kriteeriumid on formuleeritud loodud on p\u00f5hinedes kogemustele, mis on saadud koost\u00f6\u00f6s k\u00fcmnete arendajate meeskondadega erinevatest ettev\u00f5tetest. Kuid loomulikult v\u00f5ivad need kriteeriumid erinevalt s\u00f5ltuda arendusprotsesside ja kasutatava infrastruktuuri (nt kui Kubernetesit ei kasutata) spetsiifikast. <\/p>\n<h2>Kriteeriumite vastavus ja olemasolevad lahendused<\/h2>\n<p>\nPopulaarsed konteineriregistrite teenused pakuvad tavaliselt oma pildipuhastuspoliitikat: nendes saate m\u00e4\u00e4rata tingimused, mille alusel silt kustutatakse registrist. Kuid nende tingimuste v\u00f5imalused on piiratud selliste parameetritega nagu nimed, loomise aeg ja siltide arv*.<\/p>\n<p><i>* S\u00f5ltub konkreetsetest lahendustest container registry. Oleme kaalunud j\u00e4rgmiste lahenduste v\u00f5imalusi: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbor Registry, JFrog Artifactory, Quay.io \u2014 seisuga september 2020.<\/i><\/p>\n<p>Selline parameetrite kogum on piisav, et rahuldada neljandat kriteeriumi \u2014 see t\u00e4hendab valides pilte, mis vastavad versioonidele. K\u00f5ikide \u00fclej\u00e4\u00e4nud kriteeriumite puhul peab aga leidma mingisuguse kompromissi (karmema v\u00f5i vastupidi, leebema poliitika) vastavalt ootustele ja rahalistele v\u00f5imalustele.<\/p>\n<p>N\u00e4iteks kolmas kriteerium \u2014 arendajate vajadustega seotud \u2014 v\u00f5ib lahendada meeskondade sees toimingute korraldamise kaudu: spetsiifiliste piltide nimetamine, spetsiaalsete lubade loetelu koostamine ja sisemised kokkulepped. Kuid l\u00f5puks tuleb see ikkagi automatiseerida. Ja kui valmis lahendused ei rahulda vajadusi, tuleb teha midagi oma k\u00e4tega.<\/p>\n<p>Sarnane olukord on ka kahe esimese kriteeriumiga: neid ei saa t\u00e4ita ilma andmete saamiseta v\u00e4lisest s\u00fcsteemist \u2014 just sellest, kus rakenduste juurutamine toimub (meie puhul on see Kubernetes).<\/p>\n<h3>T\u00f6\u00f6voo illustratsioon Git-is<\/h3>\n<p>\nOletame, et t\u00f6\u00f6tate umbes sellise skeemi j\u00e4rgi Git-is:<\/p>\n<p><img decoding=\"async\" alt=\"Probleem &quot;nutikast&quot; konteineripiltide puhastamisest ja selle lahendus werf&#039;is\" src=\"\/wp-content\/uploads\/2020\/10\/45c9bfb6755da1b4d6be05b51ab17429.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Scheemis m\u00e4rgitud pea ikooniga on konteineripildid, mis on hetkel juurutatud Kuberneteses m\u00f5nedele kasutajatele (l\u00f5ppkasutajatele, testijatele, juhtidele jne) v\u00f5i mida arendajad kasutavad t\u00f5rgete t\u00f5rkeotsinguks ja muudel eesm\u00e4rkidel.<\/i><\/p>\n<p>Mida juhtub, kui puhastuspoliitikad lubavad j\u00e4tta (mitte kustutada) pilte ainult <b>m\u00e4\u00e4rapidude nimede j\u00e4rgi<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Probleem &quot;nutikast&quot; konteineripiltide puhastamisest ja selle lahendus werf&#039;is\" src=\"\/wp-content\/uploads\/2020\/10\/e57ff24cb818799d28e8eb006aea2eb5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIlmselgelt ei meeldi see stsenaarium kellelegi.<\/p>\n<p>Mis muutub, kui poliitikad v\u00f5imaldavad mitte kustutada pilte <b>m\u00e4\u00e4ratud ajavahemiku \/ viimaseid commit\u2019e arvu p\u00f5hjal<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Probleem &quot;nutikast&quot; konteineripiltide puhastamisest ja selle lahendus werf&#039;is\" src=\"\/wp-content\/uploads\/2020\/10\/7743581e6e64affb0a207ee156c00f6e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTulemus on olnud m\u00e4rkimisv\u00e4\u00e4rselt parem, kuid on endiselt kaugel ideaalist. L\u00f5ppude l\u00f5puks on meil endiselt arendajaid, kellele on vaja pilte registris (v\u00f5i isegi juurutatud K8s-s), et t\u00f5rkeid t\u00f5rkeotsinguks\u2026<\/p>\n<p>Kokkuv\u00f5ttes ei paku konteineriregistrite kaudu saadaval olevad funktsioonid piisavat paindlikkust puhastamise osas, mille peamine p\u00f5hjus on <strong>v\u00e4lismaailmaga suhtlemise puudumine<\/strong>. Tulemuseks on see, et meeskonnad, kes vajavad sellist paindlikkust, peavad piltide eemaldamist \u201ev\u00e4ljastpoolt\u201c ise rakendama, kasutades Docker Registry API-d (v\u00f5i vastava rakenduse natiivset API-d).<\/p>\n<p>Otsisime universaalset lahendust, mis automatiseeriks piltide puhastamise erinevate meeskondade jaoks, kes kasutavad erinevaid registreid\u2026<\/p>\n<h2>Meie tee universaalse piltide puhastamiseni<\/h2>\n<p>\nKust see vajadus tuleb? Asi on selles, et me ei ole \u00fcksi arendajate r\u00fchm, vaid meeskond, mis teenindab mitmeid selliseid r\u00fchmi, aidates komplekselt lahendada CI\/CD k\u00fcsimusi. Ja peamine tehniline t\u00f6\u00f6riist selleks on avatud l\u00e4htekoodiga utiliit <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/\">werf<\/a><\/noindex>. Selle erip\u00e4ra on see, et see ei t\u00e4ida ainult \u00fchte funktsiooni, vaid toob esile pideva tarnimise protsessid k\u00f5igil etappidel: kogumisest kuni juurutamiseni.<\/p>\n<p>Piltide registreerimine* (kohe p\u00e4rast nende koostamist) on sellise utiliidi ilmne funktsioon. Ja kuna pildid pannakse sinna s\u00e4ilitamiseks, siis \u2014 kui teie ladustamine ei ole l\u00f5putu \u2014 tuleb vastutada ka nende hilisema puhastamise eest. Edasi r\u00e4\u00e4gime, kuidas me selles osas edu saavutasime, j\u00e4rgides k\u00f5iki ette antud kriteeriume.<\/p>\n<p><i>* Kuigi registreerimised v\u00f5ivad olla erinevad (Docker Registry, GitLabi konteineri register, Harbor jne), seisavad nende kasutajad silmitsi sama probleemiga. Meie universaalne lahendus ei s\u00f5ltu registreerimise rakendusest, kuna see tehakse v\u00e4ljaspool registreid ja pakub \u00fchtlast k\u00e4itumist k\u00f5igile.<\/i><\/p>\n<p>Kuigi kasutame werfi rakenduse n\u00e4itena, loodame, et rakendatud l\u00e4henemised on kasulikud ka teistele meeskondadele, kes silmitsi seisavad sarnaste raskustega.<\/p>\n<p>Nii et me asusime <i>v\u00e4lis<\/i> mehhanismi rakendama piltide puhastamiseks \u2014 selle asemel, et kasutada konteineriregistrites juba olemasolevaid v\u00f5imalusi. Esimene samm oli Docker Registry API kasutamine nende lihtsate poliitikate loomiseks, mis k\u00e4sitlesid siltide arvu ja nende loomise aega (nagu eespool mainitud). Neile lisati <strong>lubatud nimekiri p\u00f5hjal, mida kasutati juurutatud infrastruktuuris<\/strong>, st, Kubernetes. Viimase jaoks oli piisav, et l\u00e4bi Kubernetes API l\u00e4bida k\u00f5ik juurutatud ressursid ja saada v\u00e4\u00e4rtuste nimekirja. <code>image<\/code>.<\/p>\n<p>See lihtne lahendus lahendas k\u00f5ige kriitilisema probleemi (kriteerium nr 1), kuid see oli vaid meie teekonna algus puhastusmehhanismi parendamiseks. J\u00e4rgmine ja palju huvitavam samm oli lahendamine <strong>seostada avaldatud pildid Git'i ajalooga.<\/strong>.<\/p>\n<h3>Siltimisplaanid<\/h3>\n<p>\nAlustuseks valisime l\u00e4henemise, mille kohaselt peab l\u00f5pppilt salvestama vajalikku teavet puhastamiseks ja me ehitasime protsessi siltimisplaanide peale. Pildi avaldamisel valis kasutaja teatud siltimisv\u00f5imaluse (<code>git-haru<\/code>, <code>git-commit<\/code> v\u00f5i <code>git-silt<\/code>) ja kasutas vastavat v\u00e4\u00e4rtust. CI-s\u00fcsteemides seadistati need v\u00e4\u00e4rtused automaatselt keskkonnamuutujate alusel. Sisuliselt <strong>seostati l\u00f5pppilt teatud Git'i primitiiviga,<\/strong>hoides vajalikku teavet puhastamiseks silte.<\/p>\n<p>Selle l\u00e4henemise raames saadi poliitikate kogum, mis v\u00f5imaldas Git'i kasutada ainsa t\u00f5e allikana:<\/p>\n<ul>\n<li>Kui haru\/silt eemaldati Git'is, eemaldati automaatselt ka seotud pildid registrist.<\/li>\n<li>Piltide arv, mis oli seotud Git'i siltide ja commit'idega, sai reguleerida valitud skeemis kasutatud siltide arvu ja seotud commit'i loomise aega.<\/li>\n<\/ul>\n<p>\nKokkuv\u00f5ttes rahuldas saadud rakendus meie vajadusi, kuid peagi ootas meid uus v\u00e4ljakutse. Asi on selles, et Git'i primitiivide siltimisplaanide kasutamise ajal sattusime mitmete puudustega kokku. <i>(Kuna nende kirjeldamine \u00fcletab selle artikli teema, saavad k\u00f5ik huvilised tutvuda \u00fcksikasjadega. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>siin<\/i><\/a><\/noindex><i>.)<\/i> Seet\u00f5ttu, otsustades \u00fcle minna efektiivsemale siltimisv\u00f5imalusele (sisu p\u00f5hine siltimine), pidime meie rakendust piltide puhastamiseks \u00fcle vaatama.<\/p>\n<h3>Uus algoritm<\/h3>\n<p>\nMiks? Siltimise k\u00e4igus sisu p\u00f5hine siltimine v\u00f5imaldab igal sildil rahuldada mitmeid Git'i commit'e. Piltide puhastamisel ei saa enam l\u00e4htuda <i>seda<\/i> commit'ist, mille p\u00f5hjal uus silt registrisse lisati.<\/p>\n<p>Uue puhastusalgoritmi jaoks otsustati \u00fcle minna siltimisplaanidest ja luua <strong>protsess meta-piltide peale,<\/strong>iga\u00fcks neist salvestab sideme:<\/p>\n<ul>\n<li>commit, mille avaldamine toimus (ilma et oleks oluline, kas pilt registris konteinerites lisandus, muutus v\u00f5i j\u00e4i samaks);<\/li>\n<li>ja meie sisemise identifikaatori, mis vastab kogutud pildile.<\/li>\n<\/ul>\n<p>\nTeisis\u00f5nu, oli tagatud <strong>avaldatud siltide seos Git commitidega<\/strong>.<\/p>\n<h3>L\u00f5plik konfiguratsioon ja \u00fcldine algoritm<\/h3>\n<p>\nKasutajatele on konfigureerimise puhastamisel saadaval poliitikad, mille alusel valitakse aktuaalsed pildid. Iga selline poliitika m\u00e4\u00e4ratletakse:<\/p>\n<ul>\n<li>mitme viite kaudu, st Git-siltide v\u00f5i Git-haru kaudu, mida kasutatakse skannimise ajal;<\/li>\n<li>ja otsitava pildi limiit iga viite jaoks.<\/li>\n<\/ul>\n<p>\nIllustratsiooni jaoks \u2013 siin on, kuidas vaikimisi poliitikad v\u00e4lja n\u00e4evad:<\/p>\n<pre><code class=\"plaintext\">cleanup:\n  keepPolicies:\n  - references:\n      tag: \\\/.*\\\/ \n      limit:\n        last: 10\n  - references:\n      branch: \\\/.*\\\/ \n      limit:\n        last: 10\n        in: 168h\n        operator: And\n    imagesPerReference:\n      last: 2\n      in: 168h\n      operator: And\n  - references:\n      branch: \\\/^(main|staging|production)$\\\/ \n    imagesPerReference:\n      last: 10\n<\/code><\/pre>\n<p>\nSelline konfiguratsioon sisaldab kolme poliitikat, mis vastavad j\u00e4rgmistele reeglitele:<\/p>\n<ol>\n<li>Hoida pilti 10 viimase Git-sildi jaoks (sildi loomise kuup\u00e4eva j\u00e4rgi).<\/li>\n<li>Hoida mitte rohkem kui 2 pilti, mis on avaldatud viimase n\u00e4dala jooksul, mitte rohkem kui 10 haru jaoks, mis on aktiivsed viimase n\u00e4dala jooksul.<\/li>\n<li>Hoida 10 pilti harude jaoks <code>main<\/code>, <code>staging<\/code> ja <code>production<\/code>.<\/li>\n<\/ol>\n<p>\nL\u00f5plik algoritm sisaldab j\u00e4rgmisi samme:<\/p>\n<ul>\n<li>Manifestide saamine konteineri registrist.<\/li>\n<li>Piltide eemaldamine, mida kasutatakse Kuberneteses, kuna need on juba eelnevalt v\u00e4ljavalitud, k\u00fcsides K8s API-lt.<\/li>\n<li>Git-ajaloo skannimine ja piltide eemaldamine antud poliitikate j\u00e4rgi.<\/li>\n<li>\u00dclej\u00e4\u00e4nud piltide eemaldamine.<\/li>\n<\/ul>\n<p>\nTagasi meie illustratsiooni juurde, siin on, mida werfiga saate:<\/p>\n<p><img decoding=\"async\" alt=\"Probleem &quot;nutikast&quot; konteineripiltide puhastamisest ja selle lahendus werf&#039;is\" src=\"\/wp-content\/uploads\/2020\/10\/c453092dca23860a0dda604843845507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuid isegi kui te ei kasuta werf-i, v\u00f5ib sarnane l\u00e4henemine edasisele piltide puhastamisele \u2013 \u00fchel v\u00f5i teisel viisil (vastavalt eelistatud piltide sildistamise l\u00e4henemisele) \u2013 olla rakendatud ka muudes s\u00fcsteemides\/ utiliitides. Sellega piisab, kui meeles pidada, milliseid probleeme v\u00f5ib esineda, ja leida v\u00f5imalused teie teeninduskeskkonnas, mis v\u00f5imaldavad nende lahendust sujuvalt integreerida. Loodame, et meie l\u00e4bip\u00f5idud tee aitab teil n\u00e4ha ka teie erijuhtumit uute detailide ja m\u00f5tetega.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<ul>\n<li>Varsti v\u00f5i hiljem puutub enamik meeskondi kokku registri \u00fclet\u00e4itumise probleemiga. <\/li>\n<li>Otsuste tegemisel tuleb esmalt m\u00e4\u00e4ratleda pildikehtivuse kriteeriumid.<\/li>\n<li>Tuntud konteineriregistrite teenuste pakutavad t\u00f6\u00f6riistad v\u00f5imaldavad organiseerida v\u00e4ga lihtsa puhastamise, mis ei arvesta 'v\u00e4list maailma': Kuberneteses kasutatavad pildid ja meeskonna t\u00f6\u00f6protsesside erip\u00e4rad.<\/li>\n<li>Paindlik ja t\u00f5hus algoritm peaks olema teadlik CI\/CD protsessidest, hallates mitte ainult Docker-piltide andmeid.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S.<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">Sisu p\u00f5hine m\u00e4rgistamine werf'i kogujas: miks ja kuidas see t\u00f6\u00f6tab?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-way merge werf-is: Kubernetesesse installimine koos Helmiga 'steroidide peal'<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Toetamine monorepo ja multirepo werf-is ning kuidas see on seotud Docker Registryga<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">werf 1.1 v\u00e4ljaanne: t\u00e4na t\u00e4iustused ehitajale ja tulevikuplaanid<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/522024\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96065","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=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.\" \/>\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\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\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\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\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-10-07T11:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-07T11:42:09+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\udd47Probleem 'nutikast' konteineripiltide puhastamisest ja selle lahendus werf | ProHoster","description":"Artiklis k\u00e4sitletakse.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","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\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster","og:description":"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","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-10-07T11:42:09+00:00","article:modified_time":"2020-10-07T11:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96065","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 10:52:24","updated":"2022-10-01 08:58:07","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\/96065","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=96065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/96065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/96066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=96065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=96065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=96065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}