{"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 \u201enutika\u201d konteinerite piltide puhastus ja selle lahendus werf'is","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Probleem \u201enutika\u201d konteinerite piltide puhastus 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 (Docker Registry ja sarnastes) kogunevate piltide puhastamise probleemistikku, arvestades t\u00e4nap\u00e4evaseid CI\/CD torujuhtmeid cloud native rakenduste jaoks, mis on tarnitud Kubernetesesse. Esitatakse peamised kriteeriumid piltide asjakohasuse osas ja nendest tulenevad raskused puhastamise automatiseerimisel, ruumi s\u00e4\u00e4stmisel ja meeskondade vajaduste rahuldamisel. L\u00f5puks, kasutades konkreetse Open Source projekti n\u00e4idet, r\u00e4\u00e4gime, kuidas neid raskusi \u00fcletada.<\/p>\n<h2>Sissejuhatus<\/h2>\n<p>\nKonteinerite registris olevate piltide arv v\u00f5ib kiiresti suureneda, kulutades rohkem ruumi salvestusmahule ning seel\u00e4bi suurendades oluliselt selle maksumust. Registris ruumi kontrollimise, piiramise v\u00f5i vastuv\u00f5etava kasvu s\u00e4ilitamise jaoks on tavaks:<\/p>\n<ol>\n<li>kasutada fikseeritud arvu silte piltidele;<\/li>\n<li>mingil moel 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 pidevatest siltidest (<code>latest<\/code>, <code>main<\/code>, <code>test<\/code>, <code>boris<\/code> ja jne), register ei suureneks, ja pikalt ei pea \u00fcldse muretsema puhastamise p\u00e4rast. K\u00f5ik aegumatud kujutised asendatakse, ning puhastamiseks ei j\u00e4\u00e4 lihtsalt t\u00f6\u00f6d (k\u00f5ik toimub tavalise pr\u00fcgikoguja kaudu).<\/p>\n<p>Kuid selline l\u00e4henemine piirab arendust ja sageli ei ole see rakendatav kaasaegse CI\/CD projektide puhul. Arenduse lahutamatu osa on <strong>automatiseerimine<\/strong>, mis v\u00f5imaldab palju kiiremini testida, juurutada ja edastada uusi funktsioone kasutajatele. N\u00e4iteks meie k\u00f5igis projektides luuakse igal commitil automaatselt CI-pipeline. Seal kogutakse pilt, testitakse, juurutatakse erinevatesse Kubernetes'i keskkondadesse t\u00f5rgeteotsimiseks ja j\u00e4relej\u00e4\u00e4nud kontrollide l\u00e4biviimiseks, ning kui k\u00f5ik on h\u00e4sti, j\u00f5uavad muudatused l\u00f5ppkasutajani. See ei ole ammu enam rocket science, vaid iga p\u00e4evane praktika paljudele \u2014 t\u00f5en\u00e4oliselt ka teile, kui loete seda artiklit.<\/p>\n<p>Kuna vigade k\u00f5rvaldamine ja uute funktsioonide arendamine toimub paralleelselt ning v\u00e4ljalasked v\u00f5ivad toimuda mitu korda p\u00e4evas, on ilmne, et arendusprotsessiga kaasneb m\u00e4rkimisv\u00e4\u00e4rne hulk commit'e, seega \u2014 <strong>registreerimises on palju pilte<\/strong>. Seet\u00f5ttu tekib terav k\u00fcsimus t\u00f5husast registri puhastamisest, st mittesobivate piltide eemaldamisest.<\/p>\n<p>Aga kuidas \u00fcldse m\u00e4\u00e4rata, kas pilt on asjakohane?<\/p>\n<h2>Pildi asjakohasuse kriteeriumid<\/h2>\n<p>\nEnamikul juhtudel on p\u00f5hikriteeriumid j\u00e4rgmised:<\/p>\n<p>1. Esimene (k\u00f5ige ilmsem ja kriitilisem) \u2014 see on pildid, mis <strong>on hetkel kasutusel Kuberneteses<\/strong>. Nende piltide eemaldamine v\u00f5ib p\u00f5hjustada t\u00f5siseid kulusid seoses tootmise seiskumisega (n\u00e4iteks v\u00f5ivad need pildid olla vajalikud replikatsiooniks) v\u00f5i t\u00fchistada meeskonna pingutused, mis tegeleb silumine \u00fche v\u00f5i teise kontuuri peal. <i>(Sel p\u00f5hjusel oleme isegi loonud spetsiaalse <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/k8s-image-availability-exporter\"><i>Prometheuse eksportija<\/i><\/a><\/noindex><i>, mis j\u00e4lgib selliste piltide puudumist igas Kubernetesi klastris.)<\/i><\/p>\n<p>2. Teine (v\u00e4hem ilmne, kuid samuti v\u00e4ga oluline ja j\u00e4lle tootmisega seotud) \u2014 pildid, mis <strong>on vajalikud tagasip\u00f6\u00f6rdumiseks t\u00f5siste probleemide ilmnemisel<\/strong> praeguses versioonis. N\u00e4iteks, Helmiga seoses on need pildid, mida kasutatakse salvestatud versioonides. (Muide, Helmil on vaikimisi 256 versiooni piirm\u00e4\u00e4r, kuid t\u00f5en\u00e4oliselt pole kellelgi tegelikult vajadust salvestada <i>sellist<\/i> suur hulk versioone?..) Just selleks me versioone salvestame, et saaksime neid hiljem kasutada, st \u201etagasi kerida\u201d, kui on vaja.<\/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, siis on m\u00f5istlik hoida pilt, mis vastab viimasele commit'ile ja \u00fctleme, eelmisele commit'ile: nii saab arendaja kiiresti naasta mis tahes \u00fclesande juurde ja t\u00f6\u00f6tada viimaste muudatustega. <\/p>\n<p>4. Neljas \u2014 pildid, mis <strong>vastavad meie rakenduse versioonidele<\/strong>, st on l\u00f5pp-produkt: v1.0.0, 20.04.01, sierra jne.<\/p>\n<p>NB: Siin m\u00e4\u00e4ratletud kriteeriumid on koostatud kogenud arendustiimide koost\u00f6\u00f6kogemuse p\u00f5hjal erinevatest ettev\u00f5tetest. Kuid loomulikult v\u00f5ivad need kriteeriumid varieeruda s\u00f5ltuvalt arendusprotsesside ja kasutatava infrastruktuuri (nt Kubernetes'i mittekasutamine) spetsiifilisusest. <\/p>\n<h2>Kriteeriumite vastavus ja olemasolevad lahendused<\/h2>\n<p>\nPopulaarsed container registry teenused pakuvad tavaliselt oma imagede puhastusreegleid: nendes on v\u00f5imalik m\u00e4\u00e4rata tingimusi, mille kohaselt silt registry's kustutatakse. Kuid nende tingimuste v\u00f5imalused on piiratud selliste parameetritega nagu nimed, loomise aeg ja siltide arv*.<\/p>\n<p><i>* S\u00f5ltub konkreetsetest rakendustest container registry. Oleme uurinud 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>Selliste parameetrite kogum on t\u00e4iesti piisav, et t\u00e4ita neljas kriteerium \u2014 see t\u00e4hendab valida pilte, mis vastavad versioonidele. Kuid k\u00f5igi teiste kriteeriumide puhul tuleb teha mingisugune kompromisslahendus (rangem v\u00f5i vastupidi, leebem poliitika) \u2014 s\u00f5ltuvalt ootustest ja rahalistest v\u00f5imalustest.<\/p>\n<p>N\u00e4iteks kolmandat kriteeriumi \u2014 mis on seotud arendajate vajadustega \u2014 saab lahendada protsesside korraldamise kaudu meeskondades: spetsiifilised pildinimed, spetsiaalsete lubatud loendite koostamine ja sisemised kokkulepped. Kuid l\u00f5puks on vaja see ikkagi automatiseerida. Ja kui valmis lahenduste v\u00f5imalused ei piisa, tuleb midagi oma k\u00e4tega teha.<\/p>\n<p>Sama kehtib kahe esimese kriteeriumi kohta: neid ei saa t\u00e4ita, saamata andmeid v\u00e4lisest s\u00fcsteemist \u2014 just sealt, kus rakenduste juurutamine toimub (meie puhul on see Kubernetes).<\/p>\n<h3>Workflowsi illustreerimine Git-is<\/h3>\n<p>\nEeldame, et t\u00f6\u00f6tate umbes sellise skeemi j\u00e4rgi Git-is:<\/p>\n<p><img decoding=\"async\" alt=\"Probleem \u201enutika\u201d konteinerite piltide puhastus 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>Kujutise ikooniga on n\u00e4idatud konteinerite pildid, mis on praegu Kuberneteses kasutuses m\u00f5ne kasutaja (l\u00f5ppkasutajad, testijad, juhendajad jne) jaoks v\u00f5i mida arendajad kasutavad t\u00f5rgete silumiseks ja sarnaste eesm\u00e4rkide jaoks.<\/i><\/p>\n<p>Mis juhtub, kui puhastuspoliitikad lubavad j\u00e4tta (mitte kustutada) pildid ainult <b>m\u00e4\u00e4ratud sildinimede j\u00e4rgi.<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Probleem \u201enutika\u201d konteinerite piltide puhastus 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 selline stsenaarium kellelegi.<\/p>\n<p>Mis muutub, kui poliitikad lubavad mitte kustutada pilte <b>m\u00e4\u00e4ratud ajavahemiku \/ viimaste commitide arvu j\u00e4rgi.<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Probleem \u201enutika\u201d konteinerite piltide puhastus 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 m\u00e4rgatavalt parem, kuid siiski kaugel ideaalist. Meil on endiselt arendajaid, kellele on vajalikud registris olevad pildid (v\u00f5i isegi Kuberneteses kasutatavad) t\u00f5rkeotsingu jaoks...<\/p>\n<p>Kokkuv\u00f5ttes valitsev olukord turul: konteineriregistrites pakutavad funktsioonid ei paku puhastamiseks piisavalt paindlikkust ja peamine p\u00f5hjus on \u2014 <strong>puudub v\u00f5imalus suhelda v\u00e4lismaailmaga.<\/strong>. Tundub, et meeskonnad, kellele on vajalik selline paindlikkus, peavad ise teostama piltide eemaldamise \u201ev\u00e4ljastpoolt\u201d, kasutades Docker Registry API-d (v\u00f5i vastava teostuse natiivset API-d).<\/p>\n<p>Kuid me otsisime universaalset lahendust, mis automatiseeriks piltide puhastamise erinevate meeskondade jaoks, kes kasutavad erinevaid registrite...<\/p>\n<h2>Meie tee universaalse piltide puhastamise suunal<\/h2>\n<p>\nKust see vajadus tuleb? Asi on selles, et me ei ole eraldi arendajate r\u00fchm, vaid meeskond, mis teenindab korraga mitut sellist, aidates lahendada CI\/CD k\u00fcsimusi terviklikult. Ja peamine tehniline t\u00f6\u00f6riist selle jaoks 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 \u00fchteainust funktsiooni, vaid toetab pideva kohaletoimetamise protsesse k\u00f5igil etappidel: kogumisest kuni juurutamiseni.<\/p>\n<p>Piltide avaldamine registris* (vahetult p\u00e4rast nende kogumist) on sellise utiliidi ilmselge funktsioon. Ja kuna pildid pannakse sinna hoidmiseks, siis \u2014 kui teie salvestusruum ei ole piiramatud \u2014 peate vastutama ka nende edasise puhastamise eest. Edasi r\u00e4\u00e4gime sellest, kuidas me oleme selles edukad, rahuldades k\u00f5ik seatud kriteeriumid.<\/p>\n<p><i>* Kuigi registrid v\u00f5ivad olla erinevad (Docker Registry, GitLabi konteineri register, Harbor jne), seisavad nende kasutajad silmitsi samade probleemidega. Universaalne lahendus meie puhul ei s\u00f5ltu registri rakendusest, kuna see teostatakse registritest v\u00e4ljaspool ja pakub k\u00f5igile sama k\u00e4itumist.<\/i><\/p>\n<p>Kuigi kasutame werfi n\u00e4itena rakendusest, loodame, et rakendatud l\u00e4henemisviisid on kasulikud ka teistele meeskondadele, kes seisavad silmitsi sarnaste keerukustega.<\/p>\n<p>Nii et me v\u00f5tsime k\u00e4sile <i>v\u00e4lise<\/i> mehhanismi piltide puhastamiseks \u2014 erinevalt neist v\u00f5imalustest, mis on juba konteinerite registrites sisse ehitatud. Esimene samm oli Docker Registry API kasutamine, et luua endiselt primitiivseid poliitikaid siltide arvu ja nende loomise aja kohta (nagu juba mainitud). Neile lisati <strong>lubamise nimekiri, mis p\u00f5hineb rakendatud infrastruktuuris kasutatavatel piltidel<\/strong>, st Kubernetes. Viimase jaoks oli piisav, kui Kubernetes API kaudu l\u00e4bi k\u00e4ia k\u00f5ik juurutatud ressursid ja saada nimekiri v\u00e4\u00e4rtustest. <code>pilt<\/code>.<\/p>\n<p>See lihtne lahendus lahendas k\u00f5ige kriitilisema probleemi (kriteerium nr 1), kuid oli alles meie teekonna algus puhastusmehhanismi t\u00e4iustamiseks. J\u00e4rgmine ja palju huvitavam samm oli <strong>seostada avaldatud pildid Git'i ajalooga<\/strong>.<\/p>\n<h3>M\u00e4rgistamisstrateegiad<\/h3>\n<p>\nAlguses valisime l\u00e4henemise, kus l\u00f5plik pilt peab sisaldama vajalikku teavet puhastamiseks, ja \u00fcles ehitasime protsessi m\u00e4rgistusstrateegiate p\u00f5hjal. Pildi avaldamisel valis kasutaja kindla m\u00e4rgistamisvaliku (<code>git-branch<\/code>, <code>git-commit<\/code> v\u00f5i <code>git-tag<\/code>) ja kasutas vastavat v\u00e4\u00e4rtust. CI-s\u00fcsteemides m\u00e4\u00e4rati need v\u00e4\u00e4rtused automaatselt keskkonnamuutujate alusel. Sisuliselt <strong>seoti l\u00f5plik pilt kindla Git'i primitiiviga<\/strong>, hoides puhastamiseks vajalikke andmeid etikettides.<\/p>\n<p>Selle l\u00e4henemise raames loodi poliitikate kogum, mis v\u00f5imaldas kasutada Git'i kui ainust t\u00f5ep\u00e4devuse allikat:<\/p>\n<ul>\n<li>Kui Git'is kustutati haru\/tag, kustutati automaatselt ka seotud pildid registrist.<\/li>\n<li>Git-t\u00e4gidega ja commit'idega seotud piltide arvu saab reguleerida valitud skeemis kasutatud etiketide arvuga ja seotud commit'i loomise ajaga.<\/li>\n<\/ul>\n<p>\nKokkuv\u00f5ttes vastas valminud teostus meie vajadustele, kuid peagi ootas meid uus v\u00e4ljakutse. Asi on selles, et Git'i primitiivide p\u00f5histe etiketiskeemide kasutamise ajal oleme kokku puutunud mitmete puudustega. <i>(Kuna nende kirjeldus j\u00e4\u00e4b k\u00e4esoleva artikli teemast v\u00e4lja, v\u00f5ivad k\u00f5ik huvilised tutvuda \u00fcksikasjadega <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>siit<\/i><\/a><\/noindex><i>.)<\/i> Seet\u00f5ttu, otsustades liikuda t\u00f5husama l\u00e4henemise suunas etiketiseerimise (sisup\u00f5hine etikettimine) osas, pidime l\u00e4bi vaatama ka piltide puhastamise teostuse.<\/p>\n<h3>Uus algoritm<\/h3>\n<p>\nMiks? Sisup\u00f5hises etikettimises v\u00f5ib iga etikett rahuldada mitmeid commit'e Git'is. Piltide puhastamisel ei saa enam l\u00e4htuda <i>ainult<\/i> commit'ist, mille alusel uus etikett registrisse lisati.<\/p>\n<p>Uue puhastuse algoritmi jaoks otsustati loobuda etiketiseerimise skeemidest ja luua <strong>protsess meta-piltide p\u00f5hjal<\/strong>, millest iga\u00fches hoitakse sidet:<\/p>\n<ul>\n<li>kommiit, millega tehti avaldamine (ilmtingimata ei oma t\u00e4htsust, kas pilt konteinerristis lisandus, muutus v\u00f5i j\u00e4i samaks);<\/li>\n<li>ja meie sisemise identifikaatori, mis vastab koostatud pildile.<\/li>\n<\/ul>\n<p>\nTeisis\u00f5nu, tagati <strong>avaldatud siltide ja Git'i kommintide seos<\/strong>.<\/p>\n<h3>L\u00f5plik konfigureerimine ja \u00fcldine algoritm<\/h3>\n<p>\nKasutajad said puhastuskonfiguratsioonis k\u00e4tte poliitikad, mille alusel valitakse aktuhed pildid. Iga selline poliitika m\u00e4\u00e4ratletakse:<\/p>\n<ul>\n<li>rohke reference'iga, st Git'i siltide v\u00f5i Git'i harudega, mida kasutatakse skannimisel;<\/li>\n<li>ja otsitava pildi limiidiga iga reference'i jaoks.<\/li>\n<\/ul>\n<p>\nIlustratsiooniks \u2014 siin on, kuidas vaikimisi poliitikate konfiguratsioon v\u00e4lja n\u00e4gi:<\/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 pilt 10 viimase Git-sildi jaoks (sildi loomise kuup\u00e4eva alusel).<\/li>\n<li>S\u00e4ilitada mitte rohkem kui 2 pilti, mis on avaldatud viimase n\u00e4dala jooksul, kuni 10 haru tegevusega viimase n\u00e4dala jooksul.<\/li>\n<li>S\u00e4ilitada 10 pilti harude jaoks. <code>main<\/code>, <code>staging<\/code> ja <code>tootmisse<\/code>.<\/li>\n<\/ol>\n<p>\nKokkuv\u00f5tlik algoritm koosneb j\u00e4rgmistest sammudest:<\/p>\n<ul>\n<li>Manifestide saamine konteineri registrist.<\/li>\n<li>Piltide v\u00e4listamine, mida kasutatakse Kuberneteses, kuna need on juba eelnevalt valitud, k\u00fcsides K8s API-lt.<\/li>\n<li>Git-i ajaloos skaneerimine ja piltide v\u00e4listamine vastavalt m\u00e4\u00e4ratud poliitikatele.<\/li>\n<li>J\u00e4relej\u00e4\u00e4nud piltide kustutamine.<\/li>\n<\/ul>\n<p>\nNaastes meie illustratsiooni juurde, siin on see, mis juhtub werfiga:<\/p>\n<p><img decoding=\"async\" alt=\"Probleem \u201enutika\u201d konteinerite piltide puhastus 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 piltide edasisele puhastamisele \u2014 mis tahes rakenduses (vastavalt eelistatud piltide sildistamise l\u00e4henemisele) \u2014 olla rakendatav ka muudes s\u00fcsteemides\/utiliitides. Piisab, kui m\u00e4letada neid probleeme, mis v\u00f5ivad tekkida, ja leida need v\u00f5imalused oma tehnoloogias, mis v\u00f5imaldavad nende lahendusi sujuvalt integreerida. Loodame, et meie l\u00e4bitud tee aitab vaadata ka teie konkreetset juhtumit uute detailide ja m\u00f5tetega.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<ul>\n<li>Varem v\u00f5i hiljem puutub enamik meeskondi kokku registri t\u00e4itumise probleemiga. <\/li>\n<li>Lahenduste otsimisel on esmalt vaja m\u00e4\u00e4ratleda piltide asjakohasuse kriteeriumid.<\/li>\n<li>Populaarsete konteineriregistri teenuste pakkumised v\u00f5imaldavad korraldada v\u00e4ga lihtsa puhastuse, mis ei arvesta \"v\u00e4list maailma\": pildid, mida kasutatakse Kuberneteses, ja meeskonna t\u00f6\u00f6protsesside erip\u00e4rad.<\/li>\n<li>Paindlik ja t\u00f5hus algoritm peaks arvestama CI\/CD-protsessidega, t\u00f6\u00f6tlema mitte ainult Docker-pilte.<\/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 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: Kubernetes'i deploy Helmiga \"steroidide peal\"<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Monorepo ja multirepo tugi werf'is ja kuidas siia sobib Docker Registry<\/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 parendused ehitajas 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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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\udd47Konteinerite \"nutika\" puhastamise probleem ja selle lahendus werf | ProHoster","description":"Artiklis k\u00e4sitletakse konteinerite puhastamise probleeme, mis kogunevad registritesse (Docker Registry ja selle analoogid) kaasaegsete CI\/CD-torude kontekstis cloud native rakenduste jaoks, mis tarnitakse Kubernetesesse. Toodud on peamised piltide asjakohasuse kriteeriumid ja nendest tulenevad keerukused puhastamise automatiseerimisel, ruumi s\u00e4\u00e4stmisel ja meeskondade vajaduste rahuldamisel. L\u00f5puks toome n\u00e4ite konkreetsest Open Source projektist, kuidas neid","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 \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","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"},"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}]}}