{"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\/sq\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","title":{"rendered":"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf\" src=\"\/wp-content\/uploads\/2020\/10\/1410cea46bb8dcdc3ac06db11ed5a402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArtikulli shqyrton problematik\u00ebn e pastrimit t\u00eb imazheve q\u00eb grumbullohen n\u00eb regjistrat e kontejner\u00ebve (Docker Registry dhe homolog\u00ebt e tij) n\u00eb realitetin e pipelines moderne CI\/CD p\u00ebr aplikacione cloud native q\u00eb dor\u00ebzohen n\u00eb Kubernetes. Jan\u00eb paraqitur kriteret kryesore p\u00ebr relevanc\u00ebn e imazheve dhe v\u00ebshtir\u00ebsit\u00eb q\u00eb lindin nga ato gjat\u00eb automatizimit t\u00eb pastrimit, ruajtjes s\u00eb hap\u00ebsir\u00ebs dhe p\u00ebrmbushjes s\u00eb k\u00ebrkesave t\u00eb skuadrave. S\u00eb fundi, me shembuj konkret\u00eb nga nj\u00eb projekt Open Source, do t\u00eb tregojm\u00eb se si k\u00ebto v\u00ebshtir\u00ebsi mund t\u00eb tejkalohen.<\/p>\n<h2>Hyrje<\/h2>\n<p>\nNumri i imazheve n\u00eb regjistrin e kontejner\u00ebve mund t\u00eb rritet shpejt, duke z\u00ebn\u00eb m\u00eb shum\u00eb hap\u00ebsir\u00eb n\u00eb ruajtje dhe, p\u00ebr pasoj\u00eb, duke shtuar ndjesh\u00ebm kostot e saj. P\u00ebr t\u00eb kontrolluar, kufizuar ose mbajtur nj\u00eb rritje t\u00eb pranueshme t\u00eb hap\u00ebsir\u00ebs s\u00eb z\u00ebn\u00eb n\u00eb registry, \u00ebsht\u00eb e zakonshme:<\/p>\n<ol>\n<li>t\u00eb p\u00ebrdoren nj\u00eb num\u00ebr fikse etiketash p\u00ebr imazhet;<\/li>\n<li>t\u00eb pastrohen imazhet n\u00eb nj\u00ebfar\u00eb m\u00ebnyre.<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKufizimi i par\u00eb ndonj\u00ebher\u00eb \u00ebsht\u00eb i pranuesh\u00ebm p\u00ebr ekipe t\u00eb vogla. N\u00ebse zhvilluesve u mjaftojn\u00eb etiketat e vazhdueshme (<code>latest<\/code>, <code>main<\/code>, <code>test<\/code>, <code>boris<\/code> etj.), regjistri nuk do t\u00eb fryhet n\u00eb madh\u00ebsi dhe p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb nuk do t\u00eb mendohet as p\u00ebr pastrimin. N\u00eb fund t\u00eb fundit, t\u00eb gjith\u00eb imazhet jo-relevante p\u00ebrzihen dhe p\u00ebr pastrimin thjesht nuk mbetet pun\u00eb (gjith\u00e7ka b\u00ebhet nga mbledh\u00ebsi standard i mbeturinave).<\/p>\n<p>Megjithat\u00eb, ky qasje e kufizon shum\u00eb zhvillimin dhe rrall\u00eb zbatohet n\u00eb CI\/CD t\u00eb projekteve moderne. Nj\u00eb pjes\u00eb e pandashme e zhvillimit \u00ebsht\u00eb <strong>automatizimi<\/strong>, i cili lejon q\u00eb t\u00eb testohet, zhvillohet dhe dor\u00ebzohet shum\u00eb m\u00eb shpejt funksionaliteti i ri p\u00ebr p\u00ebrdoruesit. P\u00ebr shembull, n\u00eb t\u00eb gjitha projektet tona, me \u00e7do commit, krijohet automatikisht nj\u00eb pipeline CI. N\u00eb t\u00eb, nd gathered imazhi, testohet, shp\u00ebrndahet n\u00eb konture t\u00eb ndryshme Kubernetes p\u00ebr debug dhe kontrollet e tjera, dhe n\u00ebse gjith\u00e7ka shkon mir\u00eb \u2014 ndryshimet arrijn\u00eb te p\u00ebrdoruesi i fundit. Dhe kjo nuk \u00ebsht\u00eb m\u00eb nj\u00eb shkenc\u00eb raketore, por nj\u00eb p\u00ebrditshm\u00ebri p\u00ebr shum\u00eb \u2014 ndoshta edhe p\u00ebr ju, pasi po lexoni k\u00ebt\u00eb artikull.<\/p>\n<p>Duke pasur parasysh se eliminimi i bug-eve dhe zhvillimi i funksionalitetit t\u00eb ri b\u00ebhet paralelisht, dhe l\u00ebshimet mund t\u00eb realizohen disa her\u00eb n\u00eb dit\u00eb, \u00ebsht\u00eb e qart\u00eb se procesi i zhvillimit shoq\u00ebrohet me nj\u00eb num\u00ebr t\u00eb konsideruesh\u00ebm commit-esh, dhe p\u00ebr pasoj\u00eb \u2014 <strong>nj\u00eb num\u00ebr t\u00eb madh imazhesh n\u00eb registry<\/strong>. Si rezultat, ndodhet n\u00eb m\u00ebnyr\u00eb urgjente nevoja p\u00ebr organizimin e nj\u00eb pastrimi efektiv t\u00eb registry-t, dmth. eliminimin e imazheve jo-relevante.<\/p>\n<p>Poros si t\u00eb p\u00ebrcaktohet n\u00ebse nj\u00eb imazh \u00ebsht\u00eb aktual?<\/p>\n<h2>Kriteret e aktualitetit t\u00eb imazhit<\/h2>\n<p>\nN\u00eb shumic\u00ebn d\u00ebrrmuese t\u00eb rasteve, kriteret kryesore do t\u00eb jen\u00eb k\u00ebto:<\/p>\n<p>1. E para (m\u00eb e dukshme dhe m\u00eb kritike nga t\u00eb gjitha) \u2014 jan\u00eb imazhet q\u00eb <strong>po p\u00ebrdoren n\u00eb Kubernetes<\/strong>. Eliminimi i k\u00ebtyre imazheve mund t\u00eb \u00e7oj\u00eb n\u00eb kosto t\u00eb m\u00ebdha p\u00ebr shkak t\u00eb pushimit t\u00eb production (p\u00ebr shembull, imazhet mund t\u00eb nevojiten gjat\u00eb replikimit) ose t\u00eb shfuqizoj\u00eb p\u00ebrpjekjet e ekipit q\u00eb merret me debug n\u00eb ndonj\u00eb nga linjat. <i>(P\u00ebr k\u00ebt\u00eb arsye, ne madje kemi b\u00ebr\u00eb nj\u00eb <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/k8s-image-availability-exporter\"><i>Prometheus exporter<\/i><\/a><\/noindex><i>, q\u00eb monitoron munges\u00ebn e k\u00ebtyre imazheve n\u00eb \u00e7do klaster Kubernetes.)<\/i><\/p>\n<p>2. E dyta (m\u00eb pak e dukshme, por gjithashtu shum\u00eb e r\u00ebnd\u00ebsishme dhe p\u00ebrs\u00ebri lidhet me operimin) \u2014 jan\u00eb imazhet q\u00eb <strong>nevojiten p\u00ebr rikthim n\u00eb rast se shfaqen probleme serioze<\/strong> n\u00eb versionin aktual. P\u00ebr shembull, n\u00eb rastin e Helm-it, k\u00ebto jan\u00eb imazhet q\u00eb p\u00ebrdoren n\u00eb versionet e ruajtura t\u00eb l\u00ebshimit. (P\u00ebr t'u th\u00ebn\u00eb, si parazgjedhje n\u00eb Helm, ka nj\u00eb kufi prej 256 rishikimesh, por v\u00ebshtir\u00eb se dikush ka nevoj\u00eb reale p\u00ebr ruajtjen <i>e nj\u00eb<\/i> kaq shum\u00eb versioneve?..) Sepse ne, p\u00ebr shembull, ruajm\u00eb versionet, q\u00eb t\u00eb mund t'i p\u00ebrdorim m\u00eb pas, dmth. 't\u00eb rikthemi' n\u00eb to kur t\u00eb jet\u00eb e nevojshme.<\/p>\n<p>3. E treta \u2014 <strong>nevojat e zhvilluesve<\/strong>: t\u00eb gjith\u00eb imazhet q\u00eb lidhen me pun\u00ebt e tyre aktuale. P\u00ebr shembull, n\u00ebse po shqyrtojm\u00eb nj\u00eb PR, ka shum\u00eb kuptim t\u00eb l\u00ebm\u00eb nj\u00eb imazh q\u00eb korrespondon me commit-in e fundit dhe, le t\u00eb themi, commit-in e m\u00ebparsh\u00ebm: k\u00ebshtu zhvilluesi mund t\u00eb rikthehet shpejt te \u00e7do detyr\u00eb dhe t\u00eb punoj\u00eb me ndryshimet e fundit. <\/p>\n<p>4. E kat\u00ebrta \u2014 imazhet q\u00eb <strong>korrespondoni me versionet e aplikacionit ton\u00eb<\/strong>, dmth. jan\u00eb produkti p\u00ebrfundimtar: v1.0.0, 20.04.01, sierra etj.<\/p>\n<p>NB: Kriteret e p\u00ebrcaktuara k\u00ebtu jan\u00eb formuluar mbi p\u00ebrvoj\u00ebn e bashk\u00ebpunimit me dhjet\u00ebra ekipe zhvillimi nga kompani t\u00eb ndryshme. Megjithat\u00eb, sigurisht, n\u00eb var\u00ebsi t\u00eb ve\u00e7orive n\u00eb proceset e zhvillimit dhe infrastruktur\u00ebs s\u00eb p\u00ebrdorur (p\u00ebr shembull, n\u00ebse nuk p\u00ebrdoret Kubernetes), k\u00ebto kritere mund t\u00eb ndryshojn\u00eb. <\/p>\n<h2>P\u00ebrputhshm\u00ebria me kriteret dhe zgjidhjet ekzistuese<\/h2>\n<p>\nSh\u00ebrbimet e njohura me container registry zakonisht ofrojn\u00eb politikat e tyre t\u00eb pastrimit t\u00eb imazheve: n\u00eb to mund t\u00eb p\u00ebrcaktoni kushtet n\u00ebn t\u00eb cilat etiketa fshihet nga registry. Megjithat\u00eb, mund\u00ebsit\u00eb e k\u00ebtyre kushteve jan\u00eb t\u00eb kufizuara nga parametra si emrat, koha e krijimit dhe numri i etiketimeve*.<\/p>\n<p><i>* Varet nga realizimet e ve\u00e7anta t\u00eb container registry. Ne shqyrtuam mund\u00ebsit\u00eb e zgjidhjeve t\u00eb m\u00ebposhtme: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbor Registry, JFrog Artifactory, Quay.io \u2014 deri m\u00eb  shtator 2020.<\/i><\/p>\n<p>Ky grup parametrash \u00ebsht\u00eb mjaft i mjaftuesh\u00ebm p\u00ebr t\u00eb p\u00ebrmbushur kriterin e kat\u00ebrt \u2014 dometh\u00ebn\u00eb, p\u00ebr t\u00eb filtruar imazhet q\u00eb p\u00ebrkojn\u00eb me versionet. Megjithat\u00eb, p\u00ebr t\u00eb gjitha kriteret e tjera duhet t\u00eb zgjidhni ndonj\u00eb zgjidhje kompromisi (nj\u00eb politik\u00eb m\u00eb t\u00eb ashp\u00ebr ose p\u00ebrkundrazi, m\u00eb t\u00eb but\u00eb) \u2014 n\u00eb var\u00ebsi t\u00eb pritshm\u00ebrive dhe mund\u00ebsive financiare.<\/p>\n<p>P\u00ebr shembull, kriteri i tret\u00eb \u2014 i lidhur me nevojat e zhvilluesve \u2014 mund t\u00eb zgjidhet n\u00ebp\u00ebrmjet organizimit t\u00eb proceseve brenda ekipeve: em\u00ebrtimi specifik i imazheve, mbajtja e listave t\u00eb miratuara dhe marr\u00ebveshjeve t\u00eb brendshme. Por n\u00eb fund t\u00eb fundit, p\u00ebrs\u00ebri duhet ta automatizoni. Dhe n\u00ebse mund\u00ebsit\u00eb e zgjidhjeve t\u00eb gatshme nuk jan\u00eb t\u00eb mjaftueshme, duhet t\u00eb b\u00ebni di\u00e7ka t\u00eb vet\u00ebzhb\u00ebsuar.<\/p>\n<p>Situata \u00ebsht\u00eb e ngjashme me dy kriteret e para: ato nuk mund t\u00eb p\u00ebrmbushen pa marr\u00eb t\u00eb dh\u00ebna nga nj\u00eb sistem t\u00eb jasht\u00ebm \u2014 ai i nj\u00ebjt\u00eb ku ndodh implementimi i aplikacioneve (n\u00eb rastin ton\u00eb, kjo \u00ebsht\u00eb Kubernetes).<\/p>\n<h3>Ilustrimi i workflow n\u00eb Git<\/h3>\n<p>\nSupozoni se punoni n\u00eb nj\u00eb skem\u00eb t\u00eb till\u00eb n\u00eb Git:<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf\" src=\"\/wp-content\/uploads\/2020\/10\/45c9bfb6755da1b4d6be05b51ab17429.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Imazhet e kontejner\u00ebve q\u00eb jan\u00eb aktualisht t\u00eb implementuara n\u00eb Kubernetes p\u00ebr ndonj\u00eb p\u00ebrdorues (p\u00ebrdoruesit p\u00ebrfundimtar\u00eb, testuesit, menaxher\u00ebt etj.) ose p\u00ebrdoren nga zhvilluesit p\u00ebr debagimin dhe q\u00ebllime t\u00eb ngjashme sh\u00ebnohen me nj\u00eb ikon\u00eb t\u00eb kok\u00ebs n\u00eb diagram.<\/i><\/p>\n<p>\u00c7far\u00eb do t\u00eb ndodhte n\u00ebse politikat e pastrimit lejojn\u00eb l\u00ebnien (mosfshirjen) e imazheve vet\u00ebm <b>n\u00ebn emrat e caktuar t\u00eb etiketimeve<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf\" src=\"\/wp-content\/uploads\/2020\/10\/e57ff24cb818799d28e8eb006aea2eb5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSigurisht, nj\u00eb skenar i till\u00eb nuk do t\u00eb k\u00ebnaqte ask\u00ebnd.<\/p>\n<p>\u00c7far\u00eb do t\u00eb ndryshonte n\u00ebse politikat lejojn\u00eb q\u00eb imazhet t\u00eb mos fshihen <b>n\u00ebn nj\u00eb interval t\u00eb caktuar kohor \/ numrin e komiteteve t\u00eb fundit<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf\" src=\"\/wp-content\/uploads\/2020\/10\/7743581e6e64affb0a207ee156c00f6e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRezultati \u00ebsht\u00eb p\u00ebrmir\u00ebsuar ndjesh\u00ebm, megjithat\u00eb, ende \u00ebsht\u00eb larg nga ideali. Sepse kemi ende zhvillues q\u00eb kan\u00eb nevoj\u00eb p\u00ebr imazhe n\u00eb registrin (ose madje t\u00eb implementuara n\u00eb K8s) p\u00ebr t\u00eb debaguar gabimet...<\/p>\n<p>P\u00ebrmbledhsh\u00ebm, situata e tregut tregon se funksionalitetet e disponueshme n\u00eb regjistrat e konteiner\u00ebve nuk ofrojn\u00eb mjaft fleksibilitet n\u00eb pastrimin, dhe arsyeja kryesore p\u00ebr k\u00ebt\u00eb \u00ebsht\u00eb <strong>mungesa e mund\u00ebsis\u00eb p\u00ebr t\u00eb nd\u00ebrvepruar me bot\u00ebn e jashtme<\/strong>. Nd\u00ebrsa ekipet q\u00eb kan\u00eb nevoj\u00eb p\u00ebr nj\u00eb fleksibilitet t\u00eb till\u00eb, detyrohen t\u00eb realizojn\u00eb vet\u00eb fshirjen e imazheve \"nga jasht\u00eb\", duke p\u00ebrdorur API-n\u00eb e Docker Registry (ose API-n\u00eb natyrore t\u00eb implementimit p\u00ebrkat\u00ebs).<\/p>\n<p>Megjithat\u00eb, ne k\u00ebrkonim nj\u00eb zgjidhje universale q\u00eb do t\u00eb automatizonte pastrimin e imazheve p\u00ebr ekzistenc\u00eb t\u00eb ndryshme ekipesh q\u00eb p\u00ebrdorin regjistra t\u00eb ndrysh\u00ebm\u2026<\/p>\n<h2>Rruga jon\u00eb drejt pastrimit universale t\u00eb imazheve<\/h2>\n<p>\nNga ka lindur kjo nevoj\u00eb? \u00cbsht\u00eb se ne nuk jemi nj\u00eb grup zhvilluesish t\u00eb ve\u00e7ant\u00eb, por nj\u00eb ekip q\u00eb sh\u00ebrben nj\u00eb s\u00ebr\u00eb grupeve t\u00eb tilla, duke ndihmuar n\u00eb zgjidhjen e problemeve CI\/CD n\u00eb m\u00ebnyr\u00eb gjith\u00ebp\u00ebrfshir\u00ebse. Dhe instrumenti yn\u00eb teknik kryesor p\u00ebr k\u00ebt\u00eb \u00ebsht\u00eb utilitarja Open Source <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/\">werf<\/a><\/noindex>. Ve\u00e7oria e saj \u00ebsht\u00eb se ajo nuk realizon nj\u00eb funksion t\u00eb vet\u00ebm, por shoq\u00ebron proceset e d\u00ebrgimit t\u00eb vazhduesh\u00ebm n\u00eb t\u00eb gjitha fazat: nga nd\u00ebrtimi deri tek vendosja.<\/p>\n<p>Publikimi i imazheve n\u00eb regjist\u00ebr* (menj\u00ebher\u00eb pas nd\u00ebrtimit t\u00eb tyre) \u00ebsht\u00eb nj\u00eb funksion i qart\u00eb i nj\u00eb utilitare t\u00eb till\u00eb. Dhe p\u00ebr sa koh\u00eb q\u00eb imazhet ruhen aty, n\u00ebse ruajtja juaj nuk \u00ebsht\u00eb e pafund, \u00ebsht\u00eb e nevojshme t\u00eb merret gjithashtu me pastrimin e tyre t\u00eb m\u00ebvonsh\u00ebm. Si arrit\u00ebm suksese n\u00eb k\u00ebt\u00eb, duke plot\u00ebsuar t\u00eb gjitha kriteret e caktuara, do t\u00eb flasim m\u00eb posht\u00eb.<\/p>\n<p><i>* Edhe pse regjistrat vet\u00eb mund t\u00eb jen\u00eb t\u00eb ndrysh\u00ebm (Docker Registry, GitLab Container Registry, Harbor etj.), p\u00ebrdoruesit e tyre p\u00ebrballen me t\u00eb nj\u00ebjtat probleme. Zgjidhja universale n\u00eb rastin ton\u00eb nuk varet nga implementimi i regjistrit, pasi realizohet jasht\u00eb vet\u00eb regjistrave dhe ofron nj\u00eb sjellje t\u00eb nj\u00ebjt\u00eb p\u00ebr t\u00eb gjith\u00eb.<\/i><\/p>\n<p>Megjith\u00ebse ne p\u00ebrdorim werf si nj\u00eb shembull t\u00eb implementimit, shpresojm\u00eb q\u00eb qasjet e p\u00ebrdorura do t\u00eb jen\u00eb t\u00eb dobishme p\u00ebr ekipe t\u00eb tjera q\u00eb hasin v\u00ebshtir\u00ebsi t\u00eb ngjashme.<\/p>\n<p>Pra, ne u angazhuam <i>n\u00eb<\/i> implementimin e mekanizmit p\u00ebr pastrimin e imazheve \u2014 n\u00eb vend t\u00eb mund\u00ebsive q\u00eb tashm\u00eb jan\u00eb t\u00eb integruara n\u00eb regjistrat e konteiner\u00ebve. Hapi i par\u00eb ishte p\u00ebrdorimi i API-s\u00eb s\u00eb Docker Registry p\u00ebr t\u00eb krijuar disa politika primitive n\u00eb lidhje me numrin e etiketave dhe koh\u00ebn e krijimit t\u00eb tyre (t\u00eb p\u00ebrmendura m\u00eb lart). K\u00ebtyre iu shtua <strong>lista e lejuar bazuar n\u00eb imazhet q\u00eb p\u00ebrdoren n\u00eb infrastruktur\u00ebn e vendosur<\/strong>, pra Kubernetes. P\u00ebr t\u00eb fundit, ishte e mjaftueshme t\u00eb kalonim p\u00ebrmes API-s\u00eb Kubernetes p\u00ebr t\u00eb skanuar t\u00eb gjith\u00eb burimet e derdhura dhe p\u00ebr t\u00eb marr\u00eb nj\u00eb list\u00eb me vlera. <code>image<\/code>.<\/p>\n<p>Ky zgjidhje triviale zgjidhi problemin m\u00eb kritik (kriteri nr. 1), por ishte vet\u00ebm fillimi i rrug\u00ebtimit ton\u00eb p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar mekanizmin e pastrimit. Hapi tjet\u00ebr \u2014 dhe m\u00eb interesanti \u2014 ishte zgjidhja <strong>p\u00ebr t\u00eb lidhur imazhet publikuese me historin\u00eb e Git.<\/strong>.<\/p>\n<h3>Skemat e etiketimit.<\/h3>\n<p>\nN\u00eb fillim, ne zgjodh\u00ebm nj\u00eb qasje ku imazhi p\u00ebrfundimtar duhet t\u00eb mbante informacionin e nevojsh\u00ebm p\u00ebr pastrimin dhe organizuam procesin mbi skemat e etiketimit. Kur b\u00ebhej publikimi i imazhit, p\u00ebrdoruesi zgjidhte nj\u00eb opsion t\u00eb ve\u00e7ant\u00eb etiketimi (<code>git-branch<\/code>, <code>git-commit<\/code> ose <code>git-tag<\/code>) dhe p\u00ebrdorte vler\u00ebn p\u00ebrkat\u00ebse. N\u00eb sistemet CI, vendosja e k\u00ebtyre vlerave b\u00ebhej automatikisht n\u00eb baz\u00eb t\u00eb variablave t\u00eb ambientit. N\u00eb thelb <strong>imazhi p\u00ebrfundimtar lidhej me nj\u00eb primitiv t\u00eb caktuar t\u00eb Git<\/strong>, duke ruajtur t\u00eb dh\u00ebnat e nevojshme p\u00ebr pastrimin n\u00eb etiketa.<\/p>\n<p>N\u00eb kuad\u00ebr t\u00eb k\u00ebsaj qasje, u krijua nj\u00eb grup politikash q\u00eb lejonin p\u00ebrdorimin e Git si burimi i vet\u00ebm i s\u00eb v\u00ebrtet\u00ebs:<\/p>\n<ul>\n<li>Kur dekretohej nj\u00eb deg\u00eb\/tag n\u00eb Git, imazhet e lidhura n\u00eb registry fshiheshin automatikisht.<\/li>\n<li>Numri i imazheve t\u00eb lidhura me etiketat dhe komitetet e Git mund t\u00eb rregullohej me numrin e etiketave t\u00eb p\u00ebrdorura n\u00eb skem\u00ebn e p\u00ebrzgjedhur dhe koh\u00ebn e krijimit t\u00eb komitetit t\u00eb lidhur.<\/li>\n<\/ul>\n<p>\nN\u00eb p\u00ebrgjith\u00ebsi, realizimi q\u00eb do t\u00eb rezultonte p\u00ebrmbushte nevojat tona, por s\u00eb shpejti na priste nj\u00eb sfid\u00eb t\u00eb re. Faktikisht, gjat\u00eb p\u00ebrdorimit t\u00eb skemave t\u00eb etiketimit mbi primitiv\u00ebt e Git, ne p\u00ebrballeshim me nj\u00eb num\u00ebr t\u00eb defekteve. <i>(P\u00ebr shkak se p\u00ebrshkrimi i tyre kalon jasht\u00eb tem\u00ebs s\u00eb k\u00ebtij artikulli, t\u00eb gjith\u00eb ata q\u00eb kan\u00eb interes mund t\u00eb informohen mbi detajet. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>k\u00ebtu<\/i><\/a><\/noindex><i>.)<\/i> Prandaj, duke marr\u00eb vendimin p\u00ebr kalimin n\u00eb nj\u00eb qasje m\u00eb efikase ndaj etiketimit (etiketimi i bazuar n\u00eb p\u00ebrmbajtje), na duhej t\u00eb rishikonim edhe realizimin e pastrimit t\u00eb imazheve.<\/p>\n<h3>Algoritmi i ri.<\/h3>\n<p>\nPse? Kur etiketimi b\u00ebhet n\u00eb kuad\u00ebr t\u00eb etiketimit t\u00eb bazuar n\u00eb p\u00ebrmbajtje, \u00e7do etiket\u00eb mund t\u00eb plot\u00ebsoj\u00eb nj\u00eb shum\u00ebllojshm\u00ebri komitetesh n\u00eb Git. N\u00eb pastrimin e imazheve nuk mund t\u00eb fillojm\u00eb m\u00eb <i>t\u00eb<\/i> nga komiteti n\u00eb t\u00eb cilin u shtua nj\u00eb etiket\u00eb e re n\u00eb registry.<\/p>\n<p>P\u00ebr algoritmin e ri t\u00eb pastrimit u vendos t\u00eb largohej nga skemat e etiketimit dhe t\u00eb organizohej <strong>procesi mbi meta-imazhe<\/strong>, \u00e7do nj\u00eb nga t\u00eb cilat ruan lidhjen nga:<\/p>\n<ul>\n<li>komitit, n\u00eb t\u00eb cilin u publikua publikimi (nuk ka r\u00ebnd\u00ebsi n\u00ebse u shtua, ndryshua apo q\u00ebndroi i nj\u00ebjt\u00eb imazhi n\u00eb regjistrin e konteiner\u00ebve);<\/li>\n<li>dhe identifikuesi yn\u00eb t\u00eb brendsh\u00ebm, p\u00ebrkat\u00ebs p\u00ebr imazhin e mbledhur.<\/li>\n<\/ul>\n<p>\nMe fjal\u00eb t\u00eb tjera, u siguruar <strong>lidhi etiketat e publikuara me komitetet n\u00eb Git<\/strong>.<\/p>\n<h3>Konfigurimi p\u00ebrfundimtar dhe algoritmi i p\u00ebrgjithsh\u00ebm<\/h3>\n<p>\nP\u00ebrdoruesit n\u00eb konfigurimin e pastrimit kan\u00eb akses n\u00eb politikat, sipas t\u00eb cilave realizohet p\u00ebrzgjedhja e imazheve aktuale. \u00c7do politik\u00eb e till\u00eb p\u00ebrcaktohet:<\/p>\n<ul>\n<li>nga nj\u00eb grup referencesh, pra etiketa Git ose deg\u00eb Git, t\u00eb cilat p\u00ebrdoren gjat\u00eb skanimit;<\/li>\n<li>dhe nj\u00eb kufi p\u00ebr imazhet e k\u00ebrkuara p\u00ebr \u00e7do reference nga grupa.<\/li>\n<\/ul>\n<p>\nP\u00ebr ilustrovimin \u2014 ja si duket konfigurimi i politikave p\u00ebr default:<\/p>\n<pre><code class=\"plaintext\">pastrimi:\n  mbajPolitikat:\n  - referencat:\n      etiketa: \\\/.*\\\/ \n      kufiri:\n        i fundit: 10\n  - referencat:\n      dega: \\\/.*\\\/ \n      kufiri:\n        i fundit: 10\n        n\u00eb: 168h\n        operator: Dhe\n    imazhetP\u00ebrReferenc\u00eb:\n      i fundit: 2\n      n\u00eb: 168h\n      operator: Dhe\n  - referencat:\n      dega: \\\/^(main|staging|production)$\\\/\n    imazhetP\u00ebrReferenc\u00eb:\n      i fundit: 10\n<\/code><\/pre>\n<p>\nKjo konfigurim p\u00ebrmban tre politika, t\u00eb cilat p\u00ebrmbushin k\u00ebto rregulla:<\/p>\n<ol>\n<li>T\u00eb ruajm\u00eb imazhin p\u00ebr 10 etiketat e fundit Git (sipas dat\u00ebs s\u00eb krijimit t\u00eb etik\u00ebs).<\/li>\n<li>T\u00eb ruajm\u00eb p\u00ebr m\u00eb shum\u00eb se 2 imazhe, t\u00eb publikuara jav\u00ebn e fundit, p\u00ebr m\u00eb shum\u00eb se 10 deg\u00eb me aktivitet n\u00eb jav\u00ebn e fundit.<\/li>\n<li>T\u00eb ruajm\u00eb p\u00ebr 10 imazhe p\u00ebr deg\u00ebt <code>main<\/code>, <code>staging<\/code> dhe <code>production<\/code>.<\/li>\n<\/ol>\n<p>\nAlgoritmi p\u00ebrfundimtar p\u00ebrfshin hapat e m\u00ebposht\u00ebm:<\/p>\n<ul>\n<li>Marrja e manifestave nga container registry.<\/li>\n<li>P\u00ebrjashtimi i imazheve q\u00eb p\u00ebrdoren n\u00eb Kubernetes, pasi q\u00eb i kemi p\u00ebrzgjedhur m\u00eb par\u00eb, duke pyetur K8s API.<\/li>\n<li>Skanimi i historis\u00eb Git dhe p\u00ebrjashtimi i imazheve sipas politikave t\u00eb caktuara.<\/li>\n<li>Fshirja e imazheve t\u00eb mbetura.<\/li>\n<\/ul>\n<p>\nDuke u rikthyer te ilust\u00ebrimi yn\u00eb, ja \u00e7far\u00eb ndodh me werf:<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i pastrimit \u201cinteligjent\u201d t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf\" src=\"\/wp-content\/uploads\/2020\/10\/c453092dca23860a0dda604843845507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMegjithat\u00eb, edhe n\u00ebse nuk e p\u00ebrdorni werf, nj\u00eb qasje e ngjashme p\u00ebr pastrimin e avancuar t\u00eb imazheve \u2014 n\u00eb nj\u00eb zbatim t\u00eb till\u00eb apo tjet\u00ebr (n\u00eb p\u00ebrputhje me qasjen e preferuar p\u00ebr etiketimin e imazheve) \u2014 mund t\u00eb aplikohet edhe n\u00eb sisteme \/ mjete t\u00eb tjera. Mjafton t\u00eb mbani n\u00eb mend problemet q\u00eb lindin dhe t\u00eb gjeni ato mund\u00ebsi n\u00eb stek\u00ebn tuaj q\u00eb lejojn\u00eb integrimin e zgjidhjeve m\u00eb t\u00eb p\u00ebrshtatshme. Shpresojm\u00eb se rruga q\u00eb kaluam do t\u00eb ndihmoj\u00eb n\u00eb shqyrtimin e rastit tuaj t\u00eb ve\u00e7ant\u00eb me detaje dhe mendime t\u00eb reja.<\/p>\n<h2>P\u00ebrfundim<\/h2>\n<p><\/p>\n<ul>\n<li>P\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb ose von\u00eb, problemi i mbushjes s\u00eb regjistrit p\u00ebrballet me shumic\u00ebn e ekipeve. <\/li>\n<li>Kur k\u00ebrkoni zgjidhje, \u00ebsht\u00eb e nevojshme t\u00eb p\u00ebrcaktoni kriteret e relevanc\u00ebs s\u00eb imazhit.<\/li>\n<li>Mjetet e ofruara nga sh\u00ebrbimet popullore t\u00eb container registry lejojn\u00eb organizimin e nj\u00eb pastrimi shum\u00eb t\u00eb thjesht\u00eb, i cili nuk merr parasysh \"bot\u00ebn e jashtme\": imazhet q\u00eb p\u00ebrdoren n\u00eb Kubernetes dhe ve\u00e7orit\u00eb e proceseve t\u00eb pun\u00ebs n\u00eb ekip.<\/li>\n<li>Nj\u00eb algorit\u00ebm fleksib\u00ebl dhe efektiv duhet t\u00eb ket\u00eb njohuri p\u00ebr proceset CI\/CD, duke operuar jo vet\u00ebm me t\u00eb dh\u00ebnat e imazheve Docker.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S.<\/h2>\n<p>\nLexoni gjithashtu n\u00eb blogun ton\u00eb:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">Etiketimi e bazuar n\u00eb p\u00ebrmbajtje n\u00eb grumbulluesin werf: pse dhe si funksionon?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-way merge n\u00eb werf: deploy n\u00eb Kubernetes me Helm \"n\u00eb steroide\"<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Mb\u00ebshtetje p\u00ebr monorepo dhe multirepo n\u00eb werf dhe \u00e7far\u00eb lidhjeje ka kjo me Docker Registry<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">L\u00ebshimi i werf 1.1: p\u00ebrmir\u00ebsime n\u00eb nd\u00ebrtuesin sot dhe planet p\u00ebr t\u00eb ardhmen<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Burimi: <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.2 - 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\/sq\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Problemi i \"pastrimit t\u00eb zgjuar\" t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf | ProHoster","description":"Artikulli shqyrton.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/96065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=96065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/96065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/96066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=96065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=96065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=96065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}