Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

L-artikolu jiddiskuti l-problemi tat-tindif ta 'immaġini li jakkumulaw fir-reġistri tal-kontejners (Docker Registry u l-analogi tiegħu) fir-realtajiet ta' pipelines moderni CI/CD għal applikazzjonijiet indiġeni tas-sħab mogħtija lil Kubernetes. Jingħataw il-kriterji ewlenin għar-rilevanza tal-immaġini u d-diffikultajiet li jirriżultaw fl-awtomatizzazzjoni tat-tindif, l-iffrankar tal-ispazju u l-issodisfar tal-ħtiġijiet tat-timijiet. Fl-aħħarnett, billi nużaw l-eżempju ta’ proġett speċifiku ta’ Open Source, aħna ngħidulek kif dawn id-diffikultajiet jistgħu jingħelbu.

Introduzzjoni

In-numru ta 'immaġini f'reġistru tal-kontejners jista' jikber malajr, jieħu aktar spazju għall-ħażna u b'hekk iżid l-ispiża tiegħu b'mod sinifikanti. Biex tikkontrolla, tillimita jew tinżamm tkabbir aċċettabbli tal-ispazju okkupat fir-reġistru, huwa aċċettat:

  1. uża numru fiss ta' tikketti għall-immaġini;
  2. naddaf l-immaġini b'xi mod.


L-ewwel limitazzjoni kultant hija aċċettabbli għal timijiet żgħar. Jekk l-iżviluppaturi għandhom biżżejjed tags permanenti (latest, main, test, boris eċċ.), ir-reġistru mhux se jintefaħ fid-daqs u għal żmien twil ma jkollokx għalfejn taħseb biex tnaddafha xejn. Wara kollox, l-immaġini irrilevanti kollha huma mħassra, u sempliċement ma fadal l-ebda xogħol għat-tindif (kollox isir minn kollettur taż-żibel regolari).

Madankollu, dan l-approċċ jillimita ħafna l-iżvilupp u rari huwa applikabbli għal proġetti moderni CI/CD. Parti integrali mill-iżvilupp kien awtomazzjoni, li jippermettilek tittestja, tuża u tagħti funzjonalità ġdida lill-utenti ħafna aktar malajr. Pereżempju, fil-proġetti kollha tagħna, jinħoloq awtomatikament pipeline CI ma 'kull impenn. Fiha, l-immaġni hija mmuntata, ittestjata, imxerrda għal diversi ċirkwiti Kubernetes għad-debugging u l-kontrolli li jifdal, u jekk kollox ikun tajjeb, il-bidliet jaslu għand l-utent aħħari. U din m'għadhiex xjenza rokit, iżda okkorrenza ta 'kuljum għal ħafna - x'aktarx għalik, peress li qed taqra dan l-artikolu.

Peress li l-iffissar ta 'bugs u l-iżvilupp ta' funzjonalità ġdida jitwettqu b'mod parallel, u r-rilaxxi jistgħu jsiru diversi drabi kuljum, huwa ovvju li l-proċess ta 'żvilupp huwa akkumpanjat minn numru sinifikanti ta' impenji, li jfisser numru kbir ta 'immaġini fir-reġistru. Bħala riżultat, tqum il-kwistjoni tal-organizzazzjoni tat-tindif effettiv tar-reġistru, i.e. tneħħi immaġini irrilevanti.

Imma kif tiddetermina jekk immaġini hijiex rilevanti?

Kriterji għar-rilevanza tal-immaġni

Fil-maġġoranza l-kbira tal-każijiet, il-kriterji ewlenin se jkunu:

1. L-ewwel (l-aktar ovvju u kritiku ta 'kulħadd) huwa l-immaġini li bħalissa użat fil-Kubernetes. It-tneħħija ta 'dawn l-immaġini tista' tirriżulta fi spejjeż sinifikanti ta 'waqfien tal-produzzjoni (pereżempju, l-immaġini jistgħu jkunu meħtieġa għar-replikazzjoni) jew jiċħdu l-isforzi tat-tim debugging fuq kwalunkwe linja. (Għal din ir-raġuni għamilna anke speċjali esportatur Prometheus, li jsegwi n-nuqqas ta' immaġini bħal dawn fi kwalunkwe cluster Kubernetes.)

2. It-tieni (inqas ovvju, iżda wkoll importanti ħafna u għal darb'oħra jirrelata mal-isfruttament) - immaġini li meħtieġa għal rollback f'każ ta' skoperta ta' problemi serji fil-verżjoni attwali. Pereżempju, fil-każ ta' Helm, dawn huma immaġini li jintużaw f'verżjonijiet salvati tar-rilaxx. (Mill-mod, awtomatikament f'Helm il-limitu huwa 256 reviżjoni, iżda huwa improbabbli li xi ħadd verament jeħtieġ li jsalva tali numru kbir ta’ verżjonijiet?..) Wara kollox, aħna, b’mod partikolari, naħżnu verżjonijiet sabiex inkunu nistgħu nużawhom aktar tard, i.e. "roll back" lilhom jekk meħtieġ.

3. It-tielet - bżonnijiet tal-iżviluppatur: L-immaġini kollha li huma relatati max-xogħol attwali tagħhom. Pereżempju, jekk qed nikkunsidraw PR, allura jagħmel sens li tħalli immaġni li tikkorrispondi għall-aħħar impenn u, ngħidu aħna, l-impenn preċedenti: b'dan il-mod l-iżviluppatur jista 'malajr jerġa' lura għal kwalunkwe kompitu u jaħdem bl-aħħar bidliet.

4. Ir-raba ' - immaġini li jikkorrispondu mal-verżjonijiet tal-applikazzjoni tagħna, i.e. huma l-prodott finali: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, eċċ.

NB: Il-kriterji definiti hawn ġew ifformulati abbażi tal-esperjenza ta' interazzjoni ma' għexieren ta' timijiet ta' żvilupp minn kumpaniji differenti. Madankollu, ovvjament, skont l-ispeċifiċitajiet fil-proċessi ta 'żvilupp u l-infrastruttura użata (pereżempju, Kubernetes ma jintużax), dawn il-kriterji jistgħu jvarjaw.

Eliġibilità u soluzzjonijiet eżistenti

Servizzi popolari b'reġistri tal-kontejners, bħala regola, joffru l-politiki tagħhom ta 'tindif tal-immaġni: fihom tista' tiddefinixxi l-kundizzjonijiet li taħthom titneħħa tikketta mir-reġistru. Madankollu, dawn il-kundizzjonijiet huma limitati minn parametri bħall-ismijiet, il-ħin tal-ħolqien, u n-numru ta 'tikketti*.

* Jiddependi fuq implimentazzjonijiet speċifiċi tar-reġistru tal-kontejners. Aħna ikkunsidrajna l-possibbiltajiet tas-soluzzjonijiet li ġejjin: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Reġistru, Harbour Reġistru, JFrog Artifactory, Quay.io - minn Settembru'2020.

Dan is-sett ta 'parametri huwa pjuttost biżżejjed biex jissodisfa r-raba' kriterju - jiġifieri, biex tagħżel stampi li jikkorrispondu għall-verżjonijiet. Madankollu, għall-kriterji l-oħra kollha, wieħed irid jagħżel xi tip ta’ soluzzjoni ta’ kompromess (politika aktar iebsa jew, għall-kuntrarju, aktar klementi) – skont l-aspettattivi u l-kapaċitajiet finanzjarji.

Pereżempju, it-tielet kriterju - relatat mal-ħtiġijiet tal-iżviluppaturi - jista 'jiġi solvut billi jiġu organizzati proċessi fi ħdan timijiet: ismijiet speċifiċi ta' immaġini, iż-żamma ta 'listi ta' permessi speċjali u ftehimiet interni. Iżda fl-aħħar mill-aħħar għad irid jiġi awtomatizzat. U jekk il-kapaċitajiet ta 'soluzzjonijiet lesti mhumiex biżżejjed, trid tagħmel xi ħaġa tiegħek.

Is-sitwazzjoni bl-ewwel żewġ kriterji hija simili: ma jistgħux jiġu sodisfatti mingħajr ma jirċievu data minn sistema esterna - dik fejn l-applikazzjonijiet huma skjerati (fil-każ tagħna, Kubernetes).

Illustrazzjoni tal-fluss tax-xogħol f'Git

Ejja ngħidu li qed taħdem xi ħaġa bħal din f'Git:

Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

L-ikona b'ras fid-dijagramma tindika immaġini tal-kontejners li bħalissa huma skjerati f'Kubernetes għal kwalunkwe utent (utenti finali, testers, maniġers, eċċ.) jew huma użati mill-iżviluppaturi għal debugging u skopijiet simili.

X'jiġri jekk il-politiki tat-tindif jippermettu biss li jinżammu immaġini (mhux imħassra) b'ismijiet ta' tags mogħtija?

Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

Ovvjament, xenarju bħal dan mhu se jagħmel lil ħadd kuntent.

X'se jinbidel jekk il-politiki jippermettu li l-immaġini ma jitħassrux? skond intervall ta' ħin partikolari / numru ta' l-aħħar impenji?

Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

Ir-riżultat sar ħafna aħjar, iżda għadu 'l bogħod mill-ideali. Wara kollox, għad għandna żviluppaturi li għandhom bżonn immaġini fir-reġistru (jew saħansitra skjerati fil-K8s) biex jiddibaggjaw bugs...

Biex tiġbor fil-qosor is-sitwazzjoni attwali tas-suq: il-funzjonijiet disponibbli fir-reġistri tal-kontejners ma joffrux biżżejjed flessibilità fit-tindif, u r-raġuni ewlenija għal dan hija ebda mod biex jinteraġixxu mad-dinja ta 'barra. Jirriżulta li timijiet li jeħtieġu tali flessibbiltà huma sfurzati jimplimentaw b'mod indipendenti t-tħassir ta 'l-immaġini "minn barra", billi jużaw l-API tar-Reġistru Docker (jew l-API nattiva ta' l-implimentazzjoni korrispondenti).

Madankollu, konna qed infittxu soluzzjoni universali li tawtomatizza t-tindif tal-immaġni għal timijiet differenti li jużaw reġistri differenti...

It-triq tagħna għat-tindif tal-immaġni universali

Minn fejn ġejja din il-ħtieġa? Il-fatt hu li m'aħniex grupp separat ta 'żviluppaturi, iżda tim li jservi ħafna minnhom f'daqqa, li jgħin biex isolvu b'mod komprensiv kwistjonijiet CI/CD. U l-għodda teknika ewlenija għal dan hija l-utilità Open Source werf. Il-partikolarità tagħha hija li ma twettaqx funzjoni waħda, iżda takkumpanja proċessi ta 'kunsinna kontinwi fl-istadji kollha: mill-assemblaġġ sal-iskjerament.

Il-pubblikazzjoni ta' stampi fir-reġistru* (immedjatament wara li jinbnew) hija funzjoni ovvja ta' tali utilità. U peress li l-immaġini jitqiegħdu hemm għall-ħażna, allura - jekk il-ħażna tiegħek mhix illimitata - jeħtieġ li tkun responsabbli għat-tindif sussegwenti tagħhom. Kif ksibna suċċess f'dan, li ssodisfaw il-kriterji speċifikati kollha, se jiġi diskuss aktar.

* Għalkemm ir-reġistri nfushom jistgħu jkunu differenti (Docker Reġistru, GitLab Container Reġistru, Harbour, eċċ.), l-utenti tagħhom jiffaċċjaw l-istess problemi. Is-soluzzjoni universali fil-każ tagħna ma tiddependix fuq l-implimentazzjoni tar-reġistru, għaliex jimxi barra mir-reġistri nfushom u joffri l-istess imġieba għal kulħadd.

Għalkemm qed nużaw il-werf bħala eżempju ta' implimentazzjoni, nittamaw li l-approċċi użati jkunu utli għal timijiet oħra li jiffaċċjaw diffikultajiet simili.

Allura sirna okkupati esterni implimentazzjoni ta' mekkaniżmu għat-tindif tal-immaġini - minflok dawk il-kapaċitajiet li diġà huma mibnija f'reġistri għall-kontejners. L-ewwel pass kien li tuża l-API tar-Reġistru Docker biex toħloq l-istess politiki primittivi għan-numru ta 'tikketti u l-ħin tal-ħolqien tagħhom (imsemmija hawn fuq). Miżjud magħhom jippermettu lista bbażata fuq immaġini użati fl-infrastruttura skjerata, i.e. Kubernetes. Għal dan tal-aħħar, kien biżżejjed li tuża l-API Kubernetes biex tgħaddi mir-riżorsi kollha skjerati u tikseb lista ta 'valuri image.

Din is-soluzzjoni trivjali solviet l-aktar problema kritika (kriterju Nru 1), iżda kienet biss il-bidu tal-vjaġġ tagħna biex intejbu l-mekkaniżmu tat-tindif. Il-pass li jmiss - u ħafna aktar interessanti - kien id-deċiżjoni jassoċja immaġini ppubblikati mal-istorja Git.

Skemi ta' tikkettjar

Biex tibda, għażilna approċċ li fih l-immaġni finali għandha taħżen l-informazzjoni meħtieġa għat-tindif, u bnew il-proċess fuq skemi ta 'tikkettar. Meta ppubblika immaġni, l-utent għażel għażla speċifika ta' tikkettjar (git-branch, git-commit jew git-tag) u użat il-valur korrispondenti. Fis-sistemi CI, dawn il-valuri ġew stabbiliti awtomatikament ibbażati fuq varjabbli ambjentali. Fil-fatt l-immaġni finali kienet assoċjata ma 'primitiv Git speċifiku, jaħżnu d-dejta meħtieġa għat-tindif fit-tikketti.

Dan l-approċċ irriżulta f'sett ta' politiki li ppermettew li Git jintuża bħala s-sors uniku tal-verità:

  • Meta tħassar fergħa/tikketta f'Git, l-immaġini assoċjati fir-reġistru tħassru awtomatikament.
  • In-numru ta 'immaġini assoċjati ma' tikketti u impenji Git jista 'jiġi kkontrollat ​​min-numru ta' tikketti użati fl-iskema magħżula u l-ħin li fih inħoloq l-impenn assoċjat.

B'mod ġenerali, l-implimentazzjoni li rriżultat issodisfat il-bżonnijiet tagħna, iżda dalwaqt tistenniena sfida ġdida. Il-fatt hu li waqt li nużaw skemi ta 'tagging bbażati fuq primittivi Git, iltqajna ma' numru ta 'nuqqasijiet. (Peress li d-deskrizzjoni tagħhom hija lil hinn mill-ambitu ta 'dan l-artikolu, kulħadd jista' jiffamiljarizza ruħu mad-dettalji hawn.) Għalhekk, wara li ddeċidejna li naqilbu għal approċċ aktar effiċjenti għat-tikkettar (immarkar ibbażat fuq il-kontenut), kellna nikkunsidraw mill-ġdid l-implimentazzjoni tat-tindif tal-immaġni.

Algoritmu ġdid

Għaliex? B'tikkettar ibbażat fuq il-kontenut, kull tikketta tista 'tissodisfa impenji multipli f'Git. Meta tnaddaf immaġini, ma tistax tassumi aktar biss mill-commit fejn it-tikketta l-ġdida ġiet miżjuda mar-reġistru.

Għall-algoritmu tat-tindif il-ġdid, ġie deċiż li titbiegħed mill-iskemi ta 'tagging u tinbena proċess meta-immaġini, li kull wieħed minnhom jaħżen mazz ta':

  • l-impenn li fuqu twettqet il-pubblikazzjoni (ma jimpurtax jekk l-immaġni ġietx miżjuda, mibdula jew baqgħetx l-istess fir-reġistru tal-kontejners);
  • u l-identifikatur intern tagħna li jikkorrispondi għall-immaġni immuntata.

Fi kliem ieħor, kien ipprovdut tgħaqqad tags ippubblikati ma 'commits f'Git.

Konfigurazzjoni finali u algoritmu ġenerali

Meta tikkonfigura t-tindif, l-utenti issa għandhom aċċess għal politiki li jagħżlu immaġini kurrenti. Kull politika bħal din hija definita:

  • bosta referenzi, i.e. Tikketti Git jew fergħat Git li jintużaw waqt l-iskannjar;
  • u l-limitu ta' immaġini mfittxija għal kull referenza mis-sett.

Biex nagħtu eżempju, hekk bdiet tidher il-konfigurazzjoni tal-politika default:

cleanup:
  keepPolicies:
  - references:
      tag: /.*/
      limit:
        last: 10
  - references:
      branch: /.*/
      limit:
        last: 10
        in: 168h
        operator: And
    imagesPerReference:
      last: 2
      in: 168h
      operator: And
  - references:  
      branch: /^(main|staging|production)$/
    imagesPerReference:
      last: 10

Din il-konfigurazzjoni fiha tliet politiki li jikkonformaw mar-regoli li ġejjin:

  1. Issejvja l-immaġni għall-aħħar 10 tags Git (skond id-data tal-ħolqien tat-tikketta).
  2. Issejvja mhux aktar minn 2 immaġini ppubblikati fl-aħħar ġimgħa għal mhux aktar minn 10 ħjut b'attività fl-aħħar ġimgħa.
  3. Ħlief 10 immaġini għall-fergħat main, staging и production.

L-algoritmu finali jinżel fil-passi li ġejjin:

  • Irkuprar manifesti mir-reġistru tal-kontejners.
  • Esklużi immaġini użati fil-Kubernetes, minħabba Diġà għażilnahom minn qabel billi nivverifikaw l-API K8s.
  • Skennjar tal-istorja Git u esklużi l-immaġini bbażati fuq politiki speċifikati.
  • Tneħħi l-immaġini li fadal.

Nirritornaw għall-illustrazzjoni tagħna, dan huwa dak li jiġri bil-werf:

Il-problema tat-tindif "intelliġenti" ta 'immaġini tal-kontenituri u s-soluzzjoni tagħha fil-werf

Madankollu, anki jekk ma tużax werf, approċċ simili għat-tindif avvanzat tal-immaġni - f'implimentazzjoni waħda jew oħra (skond l-approċċ preferut għall-immarkar tal-immaġni) - jista 'jiġi applikat għal sistemi/utilitajiet oħra. Biex tagħmel dan, huwa biżżejjed li tiftakar il-problemi li jinqalgħu u ssib dawk l-opportunitajiet fil-munzell tiegħek li jippermettulek tintegra s-soluzzjoni tagħhom kemm jista 'jkun bla xkiel. Nittamaw li t-triq li vvjaġġajna tgħinek tħares lejn il-każ partikolari tiegħek b'dettalji u ħsibijiet ġodda.

Konklużjoni

  • Illum jew għada, ħafna timijiet jiltaqgħu mal-problema ta 'overflow tar-reġistru.
  • Meta tfittex soluzzjonijiet, l-ewwel huwa meħtieġ li jiġu ddeterminati l-kriterji għar-rilevanza tal-immaġni.
  • L-għodod offruti mis-servizzi popolari tar-reġistru tal-kontejners jippermettulek torganizza tindif sempliċi ħafna li ma jqisx id-"dinja ta 'barra": l-immaġini użati f'Kubernetes u l-partikolaritajiet tal-flussi tax-xogħol tat-tim.
  • Algoritmu flessibbli u effiċjenti għandu jkollu fehim tal-proċessi CI/CD u jopera mhux biss bid-dejta tal-immaġni Docker.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment