{"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 'p\u00ebrgjithsh\u00ebm' t\u00eb pastrimit 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 &#039;p\u00ebrgjithsh\u00ebm&#039; t\u00eb pastrimit 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 analog\u00ebt e tij) n\u00eb kontekstin e pipeline-ve moderne CI\/CD p\u00ebr aplikacione cloud native, t\u00eb shp\u00ebrndara n\u00eb Kubernetes. Paraqiten kritere kryesore t\u00eb relevanc\u00ebs s\u00eb imazheve dhe v\u00ebshtir\u00ebsit\u00eb q\u00eb rrjedhin prej tyre gjat\u00eb automatizimit t\u00eb pastrimit, ruajtjes s\u00eb hap\u00ebsir\u00ebs dhe p\u00ebrmbushjes s\u00eb nevojave t\u00eb ekipeve. N\u00eb fund, me shembuj nga nj\u00eb projekt konkret Open Source, do t\u00eb tregojm\u00eb se si mund t\u00eb kap\u00ebrcehen k\u00ebto sfida.<\/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 rritur ndjesh\u00ebm koston e saj. P\u00ebr t\u00eb kontrolluar, kufizuar ose mbajtur nj\u00eb rritje t\u00eb pranueshme t\u00eb hap\u00ebsir\u00ebs q\u00eb z\u00eb n\u00eb registry, miratohet:<\/p>\n<ol>\n<li>t\u00eb p\u00ebrdoren nj\u00eb num\u00ebr fikse etiketash p\u00ebr imazhet;<\/li>\n<li>ndonj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb pastruar imazhet.<\/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 p\u00ebrhershme (<code>latest<\/code>, <code>main<\/code>, <code>test<\/code>, <code>boris<\/code> dhe t\u00eb tilla), regjistri nuk do t\u00eb fryhet n\u00eb p\u00ebrmasa dhe p\u00ebr nj\u00eb periudh\u00eb t\u00eb gjat\u00eb nuk do t\u00eb mendoni fare p\u00ebr pastrimin. T\u00eb gjitha imazhet e pasakt\u00ebsuara shuhen, dhe p\u00ebr pastrimin nuk mbetet asnj\u00eb pun\u00eb (gjith\u00e7ka b\u00ebhet nga mbledh\u00ebsi i zakonsh\u00ebm i mbeturinave).<\/p>\n<p>Megjithat\u00eb, ky qasje kufizon shum\u00eb zhvillimin dhe \u00ebsht\u00eb rrall\u00eb e aplikueshme p\u00ebr CI\/CD-t\u00eb e projekteve moderne. Nj\u00eb pjes\u00eb e pandashme e zhvillimit \u00ebsht\u00eb b\u00ebr\u00eb <strong>automatizimi<\/strong>, q\u00eb lejon testimin, implementimin dhe shp\u00ebrndarjen e funksionaliteteve t\u00eb reja p\u00ebr p\u00ebrdoruesit shum\u00eb m\u00eb shpejt. P\u00ebr shembull, n\u00eb t\u00eb gjitha projektet tona, me \u00e7do komit automatikisht krijohet nj\u00eb pipeline CI. Aty krijohet imazhi, testohet, vendoset n\u00eb kontejner\u00ebt e ndrysh\u00ebm Kubernetes p\u00ebr debugim dhe kontroll t\u00eb mbetur, dhe n\u00ebse gjith\u00e7ka shkon mir\u00eb \u2014 ndryshimet arrijn\u00eb deri te p\u00ebrdoruesi p\u00ebrfundimtar. Dhe kjo nuk \u00ebsht\u00eb m\u00eb rocket science, por nj\u00eb gj\u00eb e zakonshme p\u00ebr shum\u00eb - ndoshta edhe p\u00ebr ju, q\u00eb po e lexoni k\u00ebt\u00eb artikull.<\/p>\n<p>Duke pasur parasysh q\u00eb eliminimi i gabimeve dhe zhvillimi i funksionaliteteve t\u00eb reja b\u00ebhet paralelisht, dhe l\u00ebshimet mund t\u00eb kryhen 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 komit\u00ebsh, dhe kjo do t\u00eb thot\u00eb \u2014 <strong>numri i madh i imazheve n\u00eb registry<\/strong>. Si rezultat, lind me urgjenc\u00eb \u00e7\u00ebshtja e organizimit t\u00eb nj\u00eb pastrimi efektiv t\u00eb registry-t, dmth, eliminimi i imazheve jo relevante.<\/p>\n<p>Por si t\u00eb p\u00ebrcaktojm\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb, a \u00ebsht\u00eb imazhi i r\u00ebnd\u00ebsish\u00ebm?<\/p>\n<h2>Kriteret e r\u00ebnd\u00ebsishm\u00ebris\u00eb s\u00eb imazhit<\/h2>\n<p>\nN\u00eb shumic\u00ebn d\u00ebrrmuese t\u00eb rasteve, kriteret kryesore do t\u00eb jen\u00eb si m\u00eb posht\u00eb:<\/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>n\u00eb k\u00ebt\u00eb moment po p\u00ebrdoren n\u00eb Kubernetes<\/strong>. Eliminimi i k\u00ebtyre imazheve mund t\u00eb \u00e7oj\u00eb n\u00eb kosto t\u00eb r\u00ebnd\u00ebsishme p\u00ebr shkak t\u00eb nd\u00ebrprerjes s\u00eb prodhimit (p\u00ebr shembull, imazhet mund t\u00eb nevojiten p\u00ebr replikim) ose t\u00eb minoj\u00eb p\u00ebrpjekjet e ekipit q\u00eb merret me debugimin n\u00eb ndonj\u00eb nga sektor\u00ebt. <i>(P\u00ebr k\u00ebt\u00eb arsye, ne madje krijuam 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 imazheve t\u00eb tilla 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 lidhur me operimin) \u2014 imazhet q\u00eb <strong>nevojiten p\u00ebr kthim mbrapa n\u00eb rast se zbulohet ndonj\u00eb problem serioz<\/strong> n\u00eb versionin aktual. P\u00ebr shembull, n\u00eb rastin e Helm, k\u00ebto jan\u00eb imazhet q\u00eb p\u00ebrdoren n\u00eb versionet e ruajtura t\u00eb l\u00ebshimit. (P\u00ebr not\u00eb, me default n\u00eb Helm ka nj\u00eb limit prej 256 rishikimesh, por ndoshta askush nuk ka nevoj\u00eb realisht p\u00ebr ruajtjen e <i>tillave<\/i> nj\u00eb numri t\u00eb till\u00eb t\u00eb madh versionesh?..) Ajo q\u00eb ne, p\u00ebr shembull, i ruajm\u00eb versionet \u00ebsht\u00eb p\u00ebr t'i p\u00ebrdorur m\u00eb von\u00eb, dmth. \"t\u00eb kthehemi\" n\u00eb to n\u00eb rast nevoje.<\/p>\n<p>3. T\u00eb tretin \u2014 <strong>nevojat e zhvilluesve<\/strong>: t\u00eb gjitha imazhet q\u00eb lidhen me pun\u00ebt e tyre t\u00eb tanishme. P\u00ebr shembull, n\u00ebse po shqyrtojm\u00eb PR, ka kuptim t\u00eb l\u00ebshohet nj\u00eb imazh q\u00eb p\u00ebrkon me commitin m\u00eb t\u00eb fundit dhe, le t\u00eb themi, commitin e m\u00ebparsh\u00ebm: k\u00ebshtu zhvilluesi do t\u00eb mund t\u00eb kthehet shpejt n\u00eb \u00e7do detyr\u00eb dhe t\u00eb punoj\u00eb me ndryshimet e fundit. <\/p>\n<p>4. T\u00eb kat\u00ebrtin \u2014 imazhet q\u00eb <strong>p\u00ebrkojn\u00eb 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: Kritere q\u00eb jan\u00eb p\u00ebrcaktuar k\u00ebtu jan\u00eb formuluar n\u00eb baz\u00eb t\u00eb p\u00ebrvoj\u00ebs s\u00eb bashk\u00ebpunimit me nj\u00ebzetra ekipe zhvilluesish nga kompani t\u00eb ndryshme. Megjithat\u00eb, natyrisht, n\u00eb var\u00ebsi t\u00eb ve\u00e7antive n\u00eb proceset e zhvillimit dhe infrastruktur\u00ebs s\u00eb p\u00ebrdorur (p.sh., n\u00ebse Kubernetes nuk p\u00ebrdoret), 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 registry t\u00eb kontejner\u00ebve, zakonisht ofrojn\u00eb politikat e tyre p\u00ebr pastrimin e imazheve: n\u00eb to mund t\u00eb p\u00ebrcaktoni kushtet n\u00eb t\u00eb cilat nj\u00eb etiket\u00eb largohet nga registry. Megjithat\u00eb, mund\u00ebsit\u00eb e k\u00ebtyre kushteve kufizohen deri n\u00eb parametra t\u00eb till\u00eb si emrat, koha e krijimit dhe numri i etiketave*.<\/p>\n<p><i>* Varet nga zbatimet specifike 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 n\u00eb gjendje deri m\u00eb shtator 2020.<\/i><\/p>\n<p>Ky set parametrash \u00ebsht\u00eb mjaft i mjaftuesh\u00ebm p\u00ebr t\u00eb p\u00ebrmbushur kriterin e kat\u00ebrt \u2014 q\u00eb do t\u00eb thot\u00eb t\u00eb zgjedh\u00ebsh imazhe q\u00eb p\u00ebrputhen me versionet. Megjithat\u00eb, p\u00ebr t\u00eb gjitha kriteret e tjera, duhet t\u00eb zgjidhni nj\u00eb zgjidhje kompromisi (nj\u00eb politik\u00eb m\u00eb t\u00eb ashp\u00ebr ose, p\u00ebrkundrazi, m\u00eb leht\u00ebsuese) \u2014 var\u00ebsisht nga pritshm\u00ebrit\u00eb dhe mund\u00ebsit\u00eb financiare.<\/p>\n<p>P\u00ebr shembull, kriteri i tret\u00eb \u2014 i lidhur me nevojat e zhvilluesve \u2014 mund t\u00eb zgjidhet p\u00ebrmes organizimit t\u00eb proceseve brenda ekipeve: em\u00ebrtimi specifik i imazheve, mbajtja e listave t\u00eb lejuara dhe marr\u00ebveshjet e brendshme. Por, n\u00eb fund t\u00eb fundit, \u00ebsht\u00eb e nevojshme ta automatizoni at\u00eb. Dhe n\u00ebse mund\u00ebsit\u00eb e zgjidhjeve t\u00eb gatshme nuk mjaftojn\u00eb, duhet t\u00eb b\u00ebni di\u00e7ka t\u00eb vetme.<\/p>\n<p>Situata me dy kriteret e para \u00ebsht\u00eb e ngjashme: ato nuk mund t\u00eb p\u00ebrmbushen pa marr\u00eb t\u00eb dh\u00ebna nga nj\u00eb sistem t\u00eb jasht\u00ebm \u2014 ai q\u00eb zhvillohet aplikacioneve (n\u00eb rastin ton\u00eb, kjo \u00ebsht\u00eb Kubernetes).<\/p>\n<h3>Ilustrimi i fluksit t\u00eb pun\u00ebs n\u00eb Git<\/h3>\n<p>\nSupozoni se punoni p\u00ebraf\u00ebrsisht sipas k\u00ebsaj skeme n\u00eb Git:<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i &#039;p\u00ebrgjithsh\u00ebm&#039; t\u00eb pastrimit 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>Ikona me kok\u00eb n\u00eb diagram tregon imazhet e konteiner\u00ebve, t\u00eb cilat jan\u00eb aktualisht t\u00eb vendosura n\u00eb Kubernetes p\u00ebr disa p\u00ebrdorues (p\u00ebrdoruesit e fundit, testuesit, menaxher\u00ebt etj.) ose p\u00ebrdoren nga zhvilluesit p\u00ebr debug dhe q\u00ebllime t\u00eb ngjashme.<\/i><\/p>\n<p>\u00c7far\u00eb do t\u00eb ndodh\u00eb n\u00ebse politikat e pastrimit lejojn\u00eb q\u00eb t\u00eb lihen (nuk fshihen) imazhe vet\u00ebm <b>p\u00ebr emrat e etiketave t\u00eb caktuara<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i &#039;p\u00ebrgjithsh\u00ebm&#039; t\u00eb pastrimit 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 \/>\nSikur nj\u00eb skenar i till\u00eb nuk do t\u00eb g\u00ebzonte ask\u00ebnd.<\/p>\n<p>\u00c7far\u00eb do t\u00eb ndryshoj\u00eb n\u00ebse politikat lejojn\u00eb t\u00eb mos fshihen imazhet <b>p\u00ebr nj\u00eb interval t\u00eb caktuar kohor \/ numrin e komiteteve m\u00eb t\u00eb fundit<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i &#039;p\u00ebrgjithsh\u00ebm&#039; t\u00eb pastrimit 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 idealit. Sepse kemi ende zhvillues q\u00eb kan\u00eb nevoj\u00eb p\u00ebr imazhe n\u00eb regjistrin (ose madje t\u00eb vendosura n\u00eb K8s) p\u00ebr debug t\u00eb gabimeve\u2026<\/p>\n<p>Duke p\u00ebrmbledhur situat\u00ebn aktuale n\u00eb treg: funksionet e disponueshme n\u00eb regjistrat e konteiner\u00ebve nuk ofrojn\u00eb fleksibilitet t\u00eb mjaftuesh\u00ebm gjat\u00eb pastrimit, dhe shkaku kryesor \u00ebsht\u00eb <strong>nuk ka mund\u00ebsi p\u00ebr t\u00eb bashk\u00ebvepruar me bot\u00ebn e jashtme<\/strong>. K\u00ebshtu q\u00eb ekipet q\u00eb kan\u00eb nevoj\u00eb p\u00ebr nj\u00eb fleksibilitet t\u00eb till\u00eb, jan\u00eb t\u00eb detyruara t\u00eb implementojn\u00eb vet\u00eb fshirjen e imazheve \"jasht\u00eb\", duke p\u00ebrdorur API-n\u00eb e Docker Registry (ose API-n\u00eb native t\u00eb implementimit p\u00ebrkat\u00ebs).<\/p>\n<p>Megjithat\u00eb, ne k\u00ebrkonim nj\u00eb zgjidhje universale q\u00eb do t\u00eb automatizonte procesin e pastrimit t\u00eb imazheve p\u00ebr grupe t\u00eb ndryshme, duke p\u00ebrdorur regjistra t\u00eb ndrysh\u00ebm...<\/p>\n<h2>Rruga jon\u00eb drejt nj\u00eb pastrimi universale t\u00eb imazheve<\/h2>\n<p>\nPse ka nj\u00eb nevoj\u00eb t\u00eb till\u00eb? Kjo ndodh sepse ne nuk jemi vet\u00ebm nj\u00eb grup zhvilluesish, por nj\u00eb ekip q\u00eb sh\u00ebrben menj\u00ebher\u00eb p\u00ebr shum\u00eb grupe, duke ndihmuar n\u00eb zgjidhjen e pyetjeve CI\/CD n\u00eb m\u00ebnyr\u00eb gjith\u00ebp\u00ebrfshir\u00ebse. Dhe mjeti yn\u00eb kryesor teknik p\u00ebr k\u00ebt\u00eb \u00ebsht\u00eb nj\u00eb mjet Open Source. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/\">werf<\/a><\/noindex>. Karakteristika e tij \u00ebsht\u00eb se ai nuk kryen nj\u00eb funksion t\u00eb vet\u00ebm, por shoq\u00ebron proceset e dor\u00ebzimit t\u00eb vazhduesh\u00ebm n\u00eb t\u00eb gjitha etapet: nga nd\u00ebrtimi deri n\u00eb implementim.<\/p>\n<p>D\u00ebrgimi n\u00eb regjistrin* e imazheve (menj\u00ebher\u00eb pas nd\u00ebrtimit t\u00eb tyre) \u00ebsht\u00eb nj\u00eb funksion i duksh\u00ebm i k\u00ebtij mjeti. Dhe n\u00ebse imazhet ruhen atje, at\u00ebher\u00eb - n\u00ebse depoja juaj nuk \u00ebsht\u00eb e pafund - duhet t\u00eb merrni p\u00ebrgjegj\u00ebsi edhe p\u00ebr pastrimin e m\u00ebtejsh\u00ebm t\u00eb tyre. M\u00eb tej do t\u00eb tregojm\u00eb se si arrit\u00ebm t\u00eb kemi sukses n\u00eb k\u00ebt\u00eb, duke p\u00ebrmbushur t\u00eb gjith\u00eb kriteret e caktuara.<\/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. Nj\u00eb zgjidhje universale n\u00eb rastin ton\u00eb nuk varet nga implementimi i regjistrit, pasi ekzekutohet jasht\u00eb vet\u00eb regjistrave dhe ofron t\u00eb nj\u00ebjtin sjellje p\u00ebr t\u00eb gjith\u00eb.<\/i><\/p>\n<p>Megjithat\u00eb, 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 edhe p\u00ebr ekipet e tjera q\u00eb p\u00ebrballen me v\u00ebshtir\u00ebsi t\u00eb ngjashme.<\/p>\n<p>K\u00ebshtu, ne u mor\u00ebm me <i>implementimin<\/i> e nj\u00eb mekanizmi p\u00ebr pastrimin e imazheve \u2014 n\u00eb vend t\u00eb mund\u00ebsive q\u00eb jan\u00eb tashm\u00eb t\u00eb nd\u00ebrtuara n\u00eb regjistrat p\u00ebr kontejner\u00ebt. Hapi i par\u00eb ishte p\u00ebrdorimi i API-t t\u00eb Docker Registry p\u00ebr t\u00eb krijuar ato politika primitive mbi numrin e etiketimeve dhe koh\u00ebn e krijimit t\u00eb tyre (t\u00eb p\u00ebrmendura m\u00eb par\u00eb). Ata mor\u00ebn nj\u00eb <strong>list\u00eb lejesh t\u00eb bazuar n\u00eb imazhet q\u00eb p\u00ebrdoren n\u00eb infrastruktur\u00ebn e vendosur<\/strong>, pra, Kubernetes. P\u00ebr k\u00ebt\u00eb t\u00eb fundit, ishte e mjaftueshme q\u00eb p\u00ebrmes API-t t\u00eb Kubernetes t\u00eb kalonim p\u00ebrmes t\u00eb gjitha burimeve t\u00eb vendosura dhe t\u00eb merrnim 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 p\u00ebrmir\u00ebsimin e mekanizmit t\u00eb pastrimit. Hapi tjet\u00ebr \u2014 dhe shum\u00eb m\u00eb interesant \u2014 ishte zgjidhja <strong>p\u00ebr t\u00eb lidhur imazhet e publikuara me historin\u00eb e Git<\/strong>.<\/p>\n<h3>Skemat e etiketimit<\/h3>\n<p>\nP\u00ebr t\u00eb filluar, ne zgjodh\u00ebm nj\u00eb qasje ku imazhi p\u00ebrfundimtar duhet t\u00eb ruaj\u00eb informacionin e nevojsh\u00ebm p\u00ebr pastrimin, dhe nd\u00ebrtuam procesin mbi skemat e etiketimit. Gjat\u00eb publikimit t\u00eb imazhit, p\u00ebrdoruesi zgjidhte nj\u00eb opsion t\u00eb caktuar 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 p\u00ebrputhje me variablat e mjedisit. N\u00eb thelb <strong>imazhi p\u00ebrfundimtar lidhej me nj\u00eb primitiv t\u00eb caktuar 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 nj\u00eb deg\u00eb\/tag hiqej n\u00eb Git, imazhet e lidhura n\u00eb regjistrat fshiheshin automatikisht.<\/li>\n<li>Numri i imazheve t\u00eb lidhur me etiketat dhe angazhimet Git mund t\u00eb rregullohet n\u00ebp\u00ebrmjet numrit t\u00eb etiketave t\u00eb p\u00ebrdorura n\u00eb skem\u00ebn e zgjedhur dhe koh\u00ebs s\u00eb krijimit t\u00eb angazhimit t\u00eb lidhur.<\/li>\n<\/ul>\n<p>\nN\u00eb p\u00ebrgjith\u00ebsi, realizimi i arritur plot\u00ebsonte nevojat tona, por s\u00eb shpejti na priste nj\u00eb sfid\u00eb e re. Ajo q\u00eb ndodhi ishte se gjat\u00eb koh\u00ebs s\u00eb p\u00ebrdorimit t\u00eb skemave t\u00eb etiketimit sipas principeve t\u00eb Git, u p\u00ebrball\u00ebm me nj\u00eb s\u00ebr\u00eb dob\u00ebsish. <i>(Duke qen\u00eb se p\u00ebrshkrimi i tyre \u00ebsht\u00eb jasht\u00eb tem\u00ebs s\u00eb k\u00ebtij artikulli, t\u00eb gjith\u00eb t\u00eb interesuarit mund t\u00eb informohen p\u00ebr detajet <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>k\u00ebtu<\/i><\/a><\/noindex><i>.)<\/i> Prandaj, pasi mor\u00ebm vendimin p\u00ebr t\u00eb kaluar n\u00eb nj\u00eb qasje m\u00eb efikase t\u00eb etiketimit (etiketimi i bazuar n\u00eb p\u00ebrmbajtje), na duhej t\u00eb rishikonim gjithashtu realizimin e pastrimit t\u00eb imazheve.<\/p>\n<h3>Algoritmi i ri<\/h3>\n<p>\nPse? N\u00eb etiketimin e bazuar n\u00eb p\u00ebrmbajtje, \u00e7do etiket\u00eb mund t\u00eb p\u00ebrmbush\u00eb shum\u00eb angazhime n\u00eb Git. N\u00eb pastrimin e imazheve nuk mund t\u00eb bazohemi m\u00eb <i>vet\u00ebm<\/i> n\u00eb angazhimin n\u00eb t\u00eb cilin etiketa e re u shtua n\u00eb regjist\u00ebr.<\/p>\n<p>P\u00ebr algoritmin e ri t\u00eb pastrimit, u vendos t\u00eb largohemi nga skemat e etiketimit dhe t\u00eb strukturojm\u00eb <strong>procesin n\u00eb metaimazhe<\/strong>, secili prej t\u00eb cil\u00ebve ruan lidhjen e:<\/p>\n<ul>\n<li>komitit, n\u00eb t\u00eb cilin u publikua (nuk ka r\u00ebnd\u00ebsi n\u00ebse u shtua, ndryshua ose mbeti i nj\u00ebjt\u00eb imazhi n\u00eb regjistrin e konteiner\u00ebve);<\/li>\n<li>dhe identifikuesit ton\u00eb t\u00eb brendsh\u00ebm, t\u00eb cilit i p\u00ebrket imazhi i nd\u00ebrtuar.<\/li>\n<\/ul>\n<p>\nMe fjal\u00eb t\u00eb tjera, \u00ebsht\u00eb siguruar <strong>lidhja e etiketave t\u00eb 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 tani kan\u00eb n\u00eb dispozicion politika, sipas t\u00eb cilave b\u00ebhet p\u00ebrzgjedhja e imazheve t\u00eb aktualizuara. \u00c7do politik\u00eb e till\u00eb p\u00ebrcaktohet nga:<\/p>\n<ul>\n<li>nj\u00eb grup referencesh, pra etiketa Git ose deg\u00eb Git, q\u00eb p\u00ebrdoren gjat\u00eb skanimit;<\/li>\n<li>dhe nj\u00eb kufi p\u00ebr imazhet n\u00eb k\u00ebrkim p\u00ebr \u00e7do referenc\u00eb nga grupi.<\/li>\n<\/ul>\n<p>\nP\u00ebr ilustrim \u2014 ja si e kan\u00eb marr\u00eb form\u00ebn konfigurimet e politikave n\u00eb m\u00ebnyr\u00eb nokle:<\/p>\n<pre><code class=\"plaintext\">pastrimi:\n  mbajPolitika:\n  - referencat:\n      etiket\u00eb: \\\/.*\\\/\\\n      kufiri:\n        i fundit: 10\n  - referencat:\n      dega: \\\/.*\\\/\\\n      kufiri:\n        i fundit: 10\n        n\u00eb: 168h\n        operatori: Dhe\n    imazhetP\u00ebrReferenc\u00eb:\n      i fundit: 2\n      n\u00eb: 168h\n      operatori: 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 tri politika, t\u00eb cilat p\u00ebrputhen me rregullat e m\u00ebposhtme:<\/p>\n<ol>\n<li>T\u00eb ruhet imazhi p\u00ebr 10 etiketat Git t\u00eb fundit (sipas dat\u00ebs s\u00eb krijimit t\u00eb etiket\u00ebs).<\/li>\n<li>Ruaj deri n\u00eb 2 imazhe t\u00eb publikuara n\u00eb jav\u00ebn e fundit, p\u00ebr deri n\u00eb 10 deg\u00eb me aktivitet n\u00eb jav\u00ebn e fundit.<\/li>\n<li>Ruaj deri n\u00eb 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\u00ebrb\u00ebhet nga hapat e m\u00ebposht\u00ebm:<\/p>\n<ul>\n<li>Marrja e manifestimeve nga container registry.<\/li>\n<li>P\u00ebrjashtimi i imazheve q\u00eb p\u00ebrdoren n\u00eb Kubernetes, pasi ato tashm\u00eb i kemi p\u00ebrzgjedhur duke marr\u00eb informacione nga K8s API.<\/li>\n<li>Skano historin\u00eb Git dhe p\u00ebrjashto imazhet sipas politikave t\u00eb caktuara.<\/li>\n<li>Fshij imazhet e mbetura.<\/li>\n<\/ul>\n<p>\nDuke iu kthyer ilust\u00ebrimit ton\u00eb, ja \u00e7far\u00eb ndodh me werf:<\/p>\n<p><img decoding=\"async\" alt=\"Problemi i &#039;p\u00ebrgjithsh\u00ebm&#039; t\u00eb pastrimit 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 p\u00ebrdorni werf, nj\u00eb qasje e ngjashme p\u00ebr pastrimin e avancuar t\u00eb imazheve \u2014 n\u00eb nj\u00eb form\u00eb apo tjet\u00ebr (duke p\u00ebrputhur me qasjen preferenciale p\u00ebr etiketimin e imazheve) \u2014 mund t\u00eb aplikohet edhe n\u00eb sisteme ose mjete t\u00eb tjera. Mjafton t\u00eb mbani parasysh problemet q\u00eb lindin dhe t\u00eb gjeni mund\u00ebsit\u00eb n\u00eb stakun tuaj q\u00eb lejojn\u00eb implementimin e zgjidhjes s\u00eb tyre n\u00eb m\u00ebnyr\u00eb sa m\u00eb t\u00eb qet\u00eb. Shpresojm\u00eb se rruga q\u00eb kemi ndjekur do t'ju ndihmoj\u00eb t\u00eb shikoni edhe rastin tuaj t\u00eb ve\u00e7ant\u00eb me detaje dhe mendime t\u00eb reja.<\/p>\n<h2>P\u00ebrfundimi<\/h2>\n<p><\/p>\n<ul>\n<li>Her\u00ebt a von\u00eb, shumica e ekipeve p\u00ebrballen me problemin e mbushjes s\u00eb registry. <\/li>\n<li>Kur k\u00ebrkoni zgjidhje, \u00ebsht\u00eb thelb\u00ebsore t\u00eb p\u00ebrcaktoni kriteret e r\u00ebnd\u00ebsishm\u00ebris\u00eb s\u00eb imazheve.<\/li>\n<li>Mjetet e ofruara nga sh\u00ebrbimet e njohura t\u00eb regjistrimit t\u00eb kontejner\u00ebve lejojn\u00eb nj\u00eb pastrim shum\u00eb t\u00eb thjesht\u00eb, i cili nuk merr parasysh \"bot\u00ebn e jashtme\": imazhet q\u00eb p\u00ebrdoren n\u00eb Kubernetes dhe karakteristikat e proceseve t\u00eb pun\u00ebs n\u00eb ekip.<\/li>\n<li>Nj\u00eb algorit\u00ebm fleksib\u00ebl dhe efikas duhet t\u00eb ket\u00eb nj\u00eb kuptim t\u00eb procesit 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 me baz\u00eb p\u00ebrmbajtjeje n\u00eb mbledh\u00ebsin werf: p\u00ebrse 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: shp\u00ebrndarja 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\/\">P\u00ebrkrahja e monorepo dhe multirepo n\u00eb werf dhe \u00e7far\u00eb lidhje ka 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 mbledh\u00ebs 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.0.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\/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.0.1\" \/>\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 men\u00e7ur\" t\u00eb imazheve t\u00eb kontejner\u00ebve dhe zgjidhja e tij n\u00eb werf | ProHoster","description":"Artikulli \u00ebsht\u00eb shqyrtuar.","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}]}}