Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Labarin ya tattauna matsalolin tsaftace hotuna da ke taruwa a cikin rajistar gandun daji (Docker Registry da analogues) a cikin gaskiyar bututun CI / CD na zamani don aikace-aikacen asali na girgije da aka kawo zuwa Kubernetes. An ba da babban ma'auni don dacewa da hotuna da matsalolin da ke haifar da tsaftacewa ta atomatik, adana sararin samaniya da biyan bukatun ƙungiyoyi. A ƙarshe, ta yin amfani da misalin takamaiman aikin Buɗewa, za mu gaya muku yadda za a iya shawo kan waɗannan matsalolin.

Gabatarwar

Adadin hotuna a cikin rajistar akwati na iya girma cikin sauri, yana ɗaukar ƙarin sararin ajiya don haka yana ƙaruwa da tsadar sa. Don sarrafawa, iyakance ko kiyaye haɓakar haɓakar sararin samaniya da ke cikin rajista, ana karɓa:

  1. yi amfani da ƙayyadadden adadin tags don hotuna;
  2. tsaftace hotuna ta wata hanya.


Ƙayyadaddun farko wani lokaci ana karɓa ga ƙananan ƙungiyoyi. Idan masu haɓakawa suna da isassun alamun dindindin (latest, main, test, boris da dai sauransu), wurin yin rajista ba zai kumbura cikin girman ba kuma na dogon lokaci ba za ku yi tunanin tsaftace shi ba kwata-kwata. Bayan haka, duk hotunan da ba su dace ba an shafe su, kuma babu wani aikin da ya rage don tsaftacewa (duk abin da mai tara shara na yau da kullum ya yi).

Koyaya, wannan tsarin yana iyakance haɓakawa sosai kuma yana da wuya a aiwatar da ayyukan CI/CD na zamani. Wani muhimmin bangare na ci gaban ya kasance aiki da kai, wanda ke ba ku damar gwadawa, turawa da kuma isar da sabbin ayyuka ga masu amfani da sauri. Misali, a cikin duk ayyukanmu, ana ƙirƙirar bututun CI ta atomatik tare da kowane sadaukarwa. A ciki, an tattara hoton, an gwada shi, an mirgine shi zuwa da'irori daban-daban na Kubernetes don gyarawa da sauran cak, kuma idan duk yana da kyau, canje-canje sun isa ga mai amfani da ƙarshen. Kuma wannan ba kimiyyar roka ba ce, amma abin da ya faru na yau da kullun ga mutane da yawa - wataƙila a gare ku, tunda kuna karanta wannan labarin.

Tun da gyaran gyare-gyare da haɓaka sababbin ayyuka ana aiwatar da su a layi daya, kuma ana iya yin sakewa sau da yawa a rana, a bayyane yake cewa tsarin ci gaba yana tare da adadi mai yawa na aikatawa, wanda ke nufin. adadi mai yawa na hotuna a cikin wurin yin rajista. A sakamakon haka, batun shirya ingantaccen tsaftacewa na rajista ya taso, watau. cire hotuna marasa mahimmanci.

Amma ta yaya kuke ma tantance ko hoto ya dace?

Ma'auni don dacewa da hoton

A mafi yawan lokuta, babban ma'auni zai kasance:

1. Na farko (mafi bayyananne kuma mafi mahimmanci ga kowa) shine hotunan da suke A halin yanzu ana amfani dashi a Kubernetes. Cire waɗannan hotuna na iya haifar da ƙima mai mahimmanci na ƙima (misali, ana iya buƙatar hotuna don yin kwafi) ko ƙin ƙoƙarce-ƙoƙarce na ƙungiyar akan kowane madaukai. (Don haka har ma mun yi na musamman Mai fitar da Prometheus, wanda ke bin diddigin rashin irin waɗannan hotuna a cikin kowane gungu na Kubernetes.)

2. Na biyu (ba a bayyane yake ba, amma kuma yana da mahimmanci kuma yana da alaƙa da amfani) - hotuna da da ake buƙata don juyawa idan aka gano manyan matsaloli a cikin sigar yanzu. Misali, game da Helm, waɗannan hotuna ne da ake amfani da su a cikin sigar da aka adana na sakin. (Ta hanyar, ta tsohuwa a cikin Helm iyaka shine bita 256, amma ba zai yuwu kowa da gaske yana buƙatar adanawa ba. irin wannan adadi mai yawa? “juya baya” zuwa gare su idan ya cancanta.

3. Na uku - masu haɓaka buƙatun: Duk hotunan da ke da alaƙa da aikinsu na yanzu. Misali, idan muna la'akari da PR, to yana da ma'ana don barin hoton da ya dace da alƙawarin ƙarshe kuma, a ce, alƙawarin da ya gabata: ta wannan hanyar mai haɓakawa zai iya komawa kowane ɗawainiya da sauri kuma yayi aiki tare da sabbin canje-canje.

4. Na hudu - hotuna cewa dace da nau'ikan aikace-aikacen mu, i.e. sune samfurin ƙarshe: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, da dai sauransu.

NB: An tsara ma'auni da aka ayyana a nan bisa ƙwarewar hulɗa da ƙungiyoyin ci gaba da dama daga kamfanoni daban-daban. Duk da haka, ba shakka, dangane da ƙayyadaddun ƙayyadaddun hanyoyin ci gaba da abubuwan da aka yi amfani da su (alal misali, Kubernetes ba a yi amfani da su ba), waɗannan ka'idoji na iya bambanta.

Cancantar da mafita da ake da su

Shahararrun ayyuka tare da rajistar kwantena, a matsayin mai mulkin, suna ba da manufofin tsabtace hoto na kansu: a cikin su zaku iya ayyana yanayin da aka cire tag daga wurin yin rajista. Koyaya, waɗannan sharuɗɗan an iyakance su ta sigogi kamar sunaye, lokacin ƙirƙirar, da adadin tags*.

* Ya dogara da takamaiman aiwatar da rajistar ganga. Mun yi la'akari da yuwuwar hanyoyin mafita masu zuwa: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Registry Container, Harbour Registry, JFrog Artifctory, Quay.io - har zuwa Satumba'2020.

Wannan saitin sigogi ya isa sosai don gamsar da ma'auni na huɗu - wato, don zaɓar hotuna waɗanda suka dace da sigogin. Koyaya, don duk sauran sharuɗɗa, dole ne mutum ya zaɓi wani nau'in mafita na sasantawa (mafi ƙarfi ko, akasin haka, manufofin sassauci) - ya danganta da tsammanin da damar kuɗi.

Misali, ma'auni na uku - masu alaƙa da buƙatun masu haɓakawa - ana iya warware su ta hanyar tsara matakai a cikin ƙungiyoyi: takamaiman suna na hotuna, kiyaye jerin izini na musamman da yarjejeniyoyin ciki. Amma a ƙarshe har yanzu yana buƙatar sarrafa ta atomatik. Kuma idan damar shirye-shiryen mafita ba su isa ba, dole ne ku yi wani abu na kanku.

Halin da ma'auni guda biyu na farko yayi kama da: ba za su iya gamsuwa ba tare da karɓar bayanai daga tsarin waje - wanda aka tura aikace-aikacen (a cikin yanayinmu, Kubernetes).

Misalin tafiyar aiki a Git

Bari mu ce kuna aiki da wani abu kamar wannan a Git:

Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Alamar da ke da kai a cikin zanen yana nuna hotunan kwantena waɗanda a halin yanzu ana tura su a Kubernetes don kowane masu amfani (masu amfani da ƙarshen, masu gwadawa, manajoji, da sauransu) ko masu haɓakawa ke amfani da su don yin kuskure da makamantansu.

Me zai faru idan manufofin tsaftacewa kawai suna ba da damar adana hotuna (ba a share su ba) ta sunayen tag da aka ba su?

Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Babu shakka, irin wannan yanayin ba zai sa kowa ya yi farin ciki ba.

Menene zai canza idan manufofin sun ƙyale ba a share hotuna ba? bisa ga tazara da aka bayar / adadin aikatawa na ƙarshe?

Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Sakamakon ya zama mafi kyau, amma har yanzu yana da nisa daga manufa. Bayan haka, har yanzu muna da masu haɓakawa waɗanda ke buƙatar hotuna a cikin wurin yin rajista (ko ma an tura su a cikin K8s) don cire kwaro ...

Don taƙaita halin da ake ciki na kasuwa na yanzu: ayyukan da ake samu a cikin rajistar kwantena ba su ba da isasshen sassauci lokacin tsaftacewa, kuma babban dalilin wannan shine. babu yadda za a yi mu'amala da duniyar waje. Ya bayyana cewa ƙungiyoyin da ke buƙatar irin wannan sassauci ana tilasta su aiwatar da gogewar hoto da kansu “daga waje”, ta amfani da API ɗin Docker Registry (ko API na asali na aiwatar da daidai).

Koyaya, muna neman mafita na duniya wanda zai sarrafa sarrafa hoto don ƙungiyoyi daban-daban ta amfani da rajista daban-daban...

Hanyarmu zuwa tsabtace hoto na duniya

Daga ina wannan bukata ta fito? Gaskiyar ita ce, ba mu ba rukuni ne na masu haɓakawa ba, amma ƙungiyar da ke hidima da yawa daga cikinsu a lokaci ɗaya, suna taimakawa wajen magance matsalolin CI / CD gaba ɗaya. Kuma babban kayan aikin fasaha don wannan shine mai amfani Buɗewa wuf. Mahimmancinsa shine cewa baya yin aiki ɗaya, amma yana tare da ci gaba da tafiyar matakai na bayarwa a kowane matakai: daga taro zuwa turawa.

Buga hotuna zuwa wurin yin rajista* (nan da nan bayan an gina su) babban aiki ne na irin wannan kayan aiki. Kuma tunda an sanya hotunan a can don ajiya, to - idan ajiyar ku ba ta da iyaka - kuna buƙatar ɗaukar alhakin tsaftacewar su na gaba. Yadda muka samu nasara a cikin wannan, gamsar da duk ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ka'idoji, za a tattauna yadda muka samu nasara.

* Kodayake rajistar da kansu na iya bambanta (Docker Registry, GitLab Container Registry, Harbor, da sauransu), masu amfani da su suna fuskantar matsaloli iri ɗaya. Maganin duniya a cikin yanayinmu ba ya dogara da aiwatar da rajistar, saboda suna gudanar da wajen rajista da kansu kuma suna ba da hali iri ɗaya ga kowa da kowa.

Kodayake muna amfani da werf a matsayin misali aiwatarwa, muna fatan hanyoyin da aka yi amfani da su za su kasance masu amfani ga sauran ƙungiyoyin da ke fuskantar matsaloli iri ɗaya.

Don haka muka shagala na waje aiwatar da hanyar tsaftace hotuna - maimakon waɗannan damar da aka riga aka gina a cikin rajista don kwantena. Mataki na farko shine a yi amfani da API ɗin Docker Registry don ƙirƙirar manufofin farko iri ɗaya don adadin tags da lokacin ƙirƙirar su (wanda aka ambata a sama). Ya kara musu lissafin ba da izini bisa hotuna da aka yi amfani da su a cikin kayan aikin da aka tura, i.e. Kubernetes. Don na ƙarshe, ya isa ya yi amfani da Kubernetes API don ƙididdige duk albarkatun da aka tura kuma samun jerin ƙima. image.

Wannan bayani maras muhimmanci ya warware matsala mafi mahimmanci (ma'auni Na 1), amma shine kawai farkon tafiyar mu don inganta tsarin tsaftacewa. Mataki na gaba - kuma mafi ban sha'awa - shine shawarar haɗa hotuna da aka buga tare da tarihin Git.

Shirye-shiryen yiwa alama

Da farko, mun zaɓi hanyar da hoto na ƙarshe ya kamata ya adana bayanan da ake buƙata don tsaftacewa, kuma mun gina tsari akan makircin alamar. Lokacin buga hoto, mai amfani ya zaɓi takamaiman zaɓin alamar alama (git-branch, git-commit ko git-tag) kuma yayi amfani da ƙimar da ta dace. A cikin tsarin CI, an saita waɗannan ƙimar ta atomatik bisa masu canjin yanayi. A gaskiya hoton ƙarshe yana da alaƙa da takamaiman Git na farko, adana bayanan da ake buƙata don tsaftacewa a cikin lakabi.

Wannan tsarin ya haifar da tsarin manufofin da suka ba da damar amfani da Git a matsayin tushen gaskiya guda ɗaya:

  • Lokacin share reshe/tag a Git, an goge hotunan da ke da alaƙa a cikin rajista ta atomatik.
  • Adadin hotunan da ke da alaƙa da alamun Git da aikatawa za a iya sarrafa su ta adadin alamun da aka yi amfani da su a cikin tsarin da aka zaɓa da lokacin da aka ƙirƙiri abin haɗin gwiwa.

Gabaɗaya, aiwatar da sakamakon ya biya bukatunmu, amma ba da daɗewa ba sabon ƙalubale yana jiranmu. Gaskiyar ita ce yayin da muke amfani da makircin tagging dangane da Git primitives, mun gamu da gazawa da yawa. (Tunda bayanin su ya wuce iyakar wannan labarin, kowa zai iya sanin kansa da cikakkun bayanai a nan.) Sabili da haka, bayan yanke shawarar canzawa zuwa ingantacciyar hanya don yin alama (tagging na tushen abun ciki), dole ne mu sake yin la'akari da aiwatar da tsabtace hoto.

Sabon algorithm

Me yasa? Tare da alamar tushen abun ciki, kowane tag zai iya gamsar da ayyuka da yawa a cikin Git. Lokacin tsaftace hotuna, ba za ku iya ɗauka ba kawai daga ƙaddamarwa inda aka ƙara sabon tag zuwa wurin yin rajista.

Don sabon algorithm tsaftacewa, an yanke shawarar matsawa daga makircin alamar alama da ginawa meta-image tsari, kowanne daga cikinsu yana adana tarin:

  • alƙawarin da aka buga a kansa (ba komai an ƙara hoton, canza ko ya kasance iri ɗaya a cikin rajistar akwati);
  • da mai gano mu na ciki daidai da hoton da aka haɗa.

Wato an bayar da ita haɗa alamun da aka buga tare da aikatawa a cikin Git.

Ƙarshe na ƙarshe da algorithm na gaba ɗaya

Lokacin saita tsaftacewa, masu amfani yanzu suna da damar yin amfani da manufofin da ke zaɓar hotuna na yanzu. An ayyana kowace irin wannan manufar:

  • nassoshi da yawa, watau. Git tags ko Git rassan da ake amfani da su yayin dubawa;
  • da iyakar hotuna da aka nema don kowane tunani daga saiti.

Don misalta, wannan shine abin da tsayayyen tsarin manufofin ya fara kama:

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

Wannan tsarin yana ƙunshe da manufofi guda uku waɗanda suka bi ƙa'idodi masu zuwa:

  1. Ajiye hoton don alamun Git guda 10 na ƙarshe (ta ranar ƙirƙirar alamar).
  2. Kada a adana hotuna sama da 2 da aka buga a cikin makon da ya gabata don waɗanda ba su wuce zaren guda 10 tare da ayyuka a cikin makon da ya gabata ba.
  3. Ajiye hotuna 10 don rassan main, staging и production.

Algorithm na ƙarshe ya gangara zuwa matakai masu zuwa:

  • Ana dawo da bayyanawa daga rajistar akwati.
  • Ban da hotunan da aka yi amfani da su a cikin Kubernetes, saboda Mun riga mun zaɓe su ta hanyar jefa kuri'a na K8s API.
  • Ana duba tarihin Git da ban da hotuna dangane da takamaiman manufofin.
  • Cire ragowar hotuna.

Komawa ga misalinmu, ga abin da ke faruwa da werf:

Matsalar "smart" tsaftace hotuna na kwantena da maganinta a cikin werf

Koyaya, ko da ba ku yi amfani da werf ba, ana iya amfani da irin wannan hanyar zuwa tsabtace hoto ta gaba - a cikin aiwatarwa ɗaya ko wani (bisa ga fifikon da aka fi so don sanya alamar hoto) - ana iya amfani da shi zuwa wasu tsarin / kayan aiki. Don yin wannan, ya isa ya tuna matsalolin da suka taso da samun waɗannan damammaki a cikin tarin ku wanda ke ba ku damar haɗa maganin su cikin sauƙi kamar yadda zai yiwu. Muna fatan hanyar da muka bi zata taimaka muku duba batun ku na musamman tare da sabbin bayanai da tunani.

ƙarshe

  • Ba dade ko ba jima, yawancin ƙungiyoyi suna fuskantar matsalar ambaton rajista.
  • Lokacin neman mafita, da farko ya zama dole don ƙayyade ma'auni don dacewa da hoton.
  • Kayan aikin da aka bayar ta shahararrun sabis na rajistar kwantena suna ba ku damar tsara tsaftataccen sauƙi mai sauƙi wanda baya la'akari da "duniya ta waje": hotuna da aka yi amfani da su a cikin Kubernetes da kuma abubuwan da ke tattare da ayyukan ƙungiyar.
  • Algorithm mai sassauci da ingantaccen aiki dole ne ya sami fahimtar hanyoyin CI/CD kuma yayi aiki ba kawai tare da bayanan hoton Docker ba.

PS

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment