Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

Nkan naa jiroro awọn iṣoro ti awọn aworan mimọ ti o ṣajọpọ ninu awọn iforukọsilẹ eiyan (Docker Registry ati awọn analogues rẹ) ni awọn otitọ ti awọn opo gigun ti CI / CD ode oni fun awọn ohun elo abinibi awọsanma ti a firanṣẹ si Kubernetes. Awọn ibeere akọkọ fun ibaramu ti awọn aworan ati awọn iṣoro abajade ni adaṣe adaṣe, fifipamọ aaye ati pade awọn iwulo awọn ẹgbẹ ni a fun. Ni ipari, ni lilo apẹẹrẹ ti iṣẹ akanṣe Orisun Orisun kan pato, a yoo sọ fun ọ bi a ṣe le bori awọn iṣoro wọnyi.

Ifihan

Nọmba awọn aworan ti o wa ninu iforukọsilẹ eiyan le dagba ni iyara, mu aaye ibi-itọju diẹ sii ati nitorinaa n pọ si idiyele rẹ ni pataki. Lati ṣakoso, idinwo tabi ṣetọju idagba itẹwọgba ti aaye ti o wa ninu iforukọsilẹ, o gba:

  1. lo nọmba ti o wa titi ti awọn afi fun awọn aworan;
  2. nu awọn aworan ni diẹ ninu awọn ọna.


Iwọn akọkọ jẹ itẹwọgba nigbakan fun awọn ẹgbẹ kekere. Ti awọn olupilẹṣẹ ba ni awọn aami ti o yẹ (latest, main, test, boris ati bẹbẹ lọ), iforukọsilẹ kii yoo wú ni iwọn ati fun igba pipẹ iwọ kii yoo ni lati ronu nipa sisọnu rẹ rara. Lẹhinna, gbogbo awọn aworan ti ko ṣe pataki ni a parẹ, ati pe ko si iṣẹ kan ti o kù fun mimọ (ohun gbogbo ni o ṣe nipasẹ agbo-idọti deede).

Sibẹsibẹ, ọna yii fi opin si idagbasoke pupọ ati pe o ṣọwọn lilo si awọn iṣẹ akanṣe CI/CD ode oni. Ohun je ara ti awọn idagbasoke wà adaṣe, eyiti o fun ọ laaye lati ṣe idanwo, mu ṣiṣẹ ati jiṣẹ iṣẹ tuntun si awọn olumulo ni iyara pupọ. Fun apẹẹrẹ, ninu gbogbo awọn iṣẹ akanṣe wa, opo gigun ti epo CI ni a ṣẹda laifọwọyi pẹlu ifaramọ kọọkan. Ninu rẹ, aworan naa ti ṣajọpọ, idanwo, yiyi si ọpọlọpọ awọn iyika Kubernetes fun n ṣatunṣe aṣiṣe ati awọn sọwedowo ti o ku, ati pe ti gbogbo rẹ ba dara, awọn ayipada de ọdọ olumulo ipari. Ati pe eyi kii ṣe imọ-jinlẹ rocket mọ, ṣugbọn iṣẹlẹ lojoojumọ fun ọpọlọpọ - o ṣeeṣe julọ fun ọ, nitori o n ka nkan yii.

Niwọn bi titunṣe awọn idun ati idagbasoke iṣẹ ṣiṣe tuntun ni a ṣe ni afiwe, ati pe awọn idasilẹ le ṣee ṣe ni ọpọlọpọ igba ni ọjọ kan, o han gbangba pe ilana idagbasoke wa pẹlu nọmba pataki ti awọn adehun, eyiti o tumọ si. nọmba nla ti awọn aworan ni iforukọsilẹ. Bi abajade, ọrọ ti siseto mimọ ti o munadoko ti iforukọsilẹ dide, i.e. yiyọ awọn aworan ti ko ṣe pataki.

Ṣugbọn bawo ni o ṣe pinnu paapaa boya aworan kan jẹ pataki?

Awọn ibeere fun ibaramu ti aworan naa

Ninu ọpọlọpọ awọn ọran, awọn ibeere akọkọ yoo jẹ:

1. Ni igba akọkọ ti (awọn julọ kedere ati julọ lominu ni ti gbogbo) ni awọn aworan ti o Lọwọlọwọ lo ni Kubernetes. Yiyọ awọn aworan wọnyi kuro le ja si awọn idiyele akoko iṣelọpọ pataki (fun apẹẹrẹ, awọn aworan le nilo fun atunkọ) tabi tako awọn akitiyan ti n ṣatunṣe aṣiṣe ẹgbẹ lori eyikeyi awọn losiwajulosehin. (Fun idi eyi a paapaa ṣe pataki kan Prometheus atajasita, eyiti o tọpa isansa iru awọn aworan ni eyikeyi iṣupọ Kubernetes.)

2. Keji (kere han, sugbon tun gan pataki ati lẹẹkansi tijoba si awon nkan) - awọn aworan ti o ti a beere fun yiyi pada ni ọran wiwa ti awọn iṣoro to ṣe pataki ninu awọn ti isiyi ti ikede. Fun apẹẹrẹ, ninu ọran Helm, iwọnyi jẹ awọn aworan ti a lo ninu awọn ẹya ti o fipamọ ti idasilẹ. (Ni ọna, nipasẹ aiyipada ni Helm opin jẹ awọn atunyẹwo 256, ṣugbọn ko ṣeeṣe pe ẹnikẹni nilo lati fipamọ gaan iru nọmba nla ti awọn ẹya?..) Lẹhinna, a, ni pato, tọju awọn ẹya ki a le lo wọn nigbamii, i.e. “Yi pada” si wọn ti o ba jẹ dandan.

3. Kẹta - Olùgbéejáde aini: Gbogbo awọn aworan ti o ni ibatan si iṣẹ wọn lọwọlọwọ. Fun apẹẹrẹ, ti a ba n ṣakiyesi PR kan, lẹhinna o jẹ oye lati lọ kuro ni aworan ti o baamu si adehun ti o kẹhin ati, sọ, adehun iṣaaju: ni ọna yii olupilẹṣẹ le yarayara pada si iṣẹ eyikeyi ati ṣiṣẹ pẹlu awọn ayipada tuntun.

4. Ẹkẹrin - awọn aworan ti o bamu si awọn ẹya ti ohun elo wa, i.e. ni ik ọja: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, ati be be lo.

NB: Awọn iyasọtọ ti a ṣalaye nibi ni a ṣe agbekalẹ ti o da lori iriri ibaraenisepo pẹlu awọn dosinni ti awọn ẹgbẹ idagbasoke lati awọn ile-iṣẹ oriṣiriṣi. Sibẹsibẹ, dajudaju, da lori awọn pato ninu awọn ilana idagbasoke ati awọn amayederun ti a lo (fun apẹẹrẹ, Kubernetes ko lo), awọn ibeere wọnyi le yatọ.

Yiyẹ ni ati tẹlẹ solusan

Awọn iṣẹ olokiki pẹlu awọn iforukọsilẹ eiyan, gẹgẹbi ofin, funni ni awọn ilana imuduro aworan tiwọn: ninu wọn o le ṣalaye awọn ipo labẹ eyiti a ti yọ ami kan kuro ni iforukọsilẹ. Bibẹẹkọ, awọn ipo wọnyi ni opin nipasẹ awọn ayeraye gẹgẹbi awọn orukọ, akoko ẹda, ati nọmba awọn afi *.

* Da lori awọn imuse iforukọsilẹ eiyan kan pato. A ṣe akiyesi awọn iṣeeṣe ti awọn solusan atẹle: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbor Registry, JFrog Artifctory, Quay.io - bi ti Oṣu Kẹsan'2020.

Eto awọn paramita yii ti to lati ni itẹlọrun ami iyasọtọ kẹrin - iyẹn ni, lati yan awọn aworan ti o baamu awọn ẹya. Bibẹẹkọ, fun gbogbo awọn ibeere miiran, ọkan ni lati yan iru ojutu adehun kan (ti o le ju tabi, ni idakeji, eto imulo alaanu diẹ sii) - da lori awọn ireti ati awọn agbara inawo.

Fun apẹẹrẹ, ami-ẹri kẹta - ti o ni ibatan si awọn iwulo ti awọn olupilẹṣẹ - ni a le yanju nipasẹ siseto awọn ilana laarin awọn ẹgbẹ: orukọ kan pato ti awọn aworan, mimu awọn atokọ iyọọda pataki ati awọn adehun inu. Ṣugbọn nikẹhin o tun nilo lati jẹ adaṣe. Ati pe ti awọn agbara ti awọn solusan ti a ti ṣetan ko to, o ni lati ṣe nkan ti tirẹ.

Ipo pẹlu awọn ibeere meji akọkọ jẹ iru: wọn ko le ni itẹlọrun laisi gbigba data lati eto ita - ọkan nibiti a ti gbe awọn ohun elo (ninu ọran wa, Kubernetes).

Apejuwe ti bisesenlo ni Git

Jẹ ki a sọ pe o n ṣiṣẹ nkan bii eyi ni Git:

Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

Aami ti o ni ori ninu aworan atọka tọkasi awọn aworan eiyan ti o wa lọwọlọwọ ni Kubernetes fun eyikeyi awọn olumulo (awọn olumulo ipari, awọn oludanwo, awọn alakoso, ati bẹbẹ lọ) tabi ti awọn olupilẹṣẹ lo fun n ṣatunṣe aṣiṣe ati awọn idi ti o jọra.

Kini yoo ṣẹlẹ ti awọn ilana isọdọmọ ba gba awọn aworan laaye lati wa ni idaduro (kii ṣe paarẹ) nipasẹ awọn orukọ tag?

Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

E họnwun dọ, nujijọ mọnkọtọn ma na hẹn homẹ mẹdepope tọn hùn.

Kini yoo yipada ti awọn eto imulo ba gba awọn aworan laaye lati paarẹ? gẹgẹ bi a fi fun akoko aarin / nọmba ti o kẹhin ṣẹ?

Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

Awọn esi ti di Elo dara, sugbon jẹ ṣi jina lati bojumu. Lẹhinna, a tun ni awọn olupilẹṣẹ ti o nilo awọn aworan ninu iforukọsilẹ (tabi paapaa ti ran lọ si awọn K8s) lati ṣatunṣe awọn idun…

Lati ṣe akopọ ipo ọja lọwọlọwọ: awọn iṣẹ ti o wa ninu awọn iforukọsilẹ eiyan ko funni ni irọrun to nigba mimọ, ati idi akọkọ fun eyi ni ko si ona lati se nlo pẹlu awọn ita aye. O wa ni pe awọn ẹgbẹ ti o nilo iru irọrun ni a fi agbara mu lati ṣe adaṣe piparẹ aworan ni ominira “lati ita”, ni lilo API iforukọsilẹ Docker (tabi API abinibi ti imuse ti o baamu).

Sibẹsibẹ, a n wa ojutu gbogbo agbaye ti yoo ṣe adaṣe afọmọ aworan fun awọn ẹgbẹ oriṣiriṣi nipa lilo awọn iforukọsilẹ oriṣiriṣi…

Ọna wa si mimọ aworan agbaye

Nibo ni iwulo yii ti wa? Otitọ ni pe a kii ṣe ẹgbẹ ọtọtọ ti awọn olupilẹṣẹ, ṣugbọn ẹgbẹ kan ti o nṣe iranṣẹ ọpọlọpọ ninu wọn ni ẹẹkan, ṣe iranlọwọ lati yanju awọn ọran CI / CD ni kikun. Ati ohun elo imọ-ẹrọ akọkọ fun eyi ni IwUlO Orisun Ṣii werf. Iyatọ rẹ ni pe ko ṣe iṣẹ kan, ṣugbọn tẹle awọn ilana ifijiṣẹ ilọsiwaju ni gbogbo awọn ipele: lati apejọ si imuṣiṣẹ.

Titẹjade awọn aworan si iforukọsilẹ * (lẹsẹkẹsẹ lẹhin ti wọn ti kọ wọn) jẹ iṣẹ ti o han gbangba ti iru ohun elo kan. Ati pe niwọn igba ti a gbe awọn aworan sibẹ fun ibi ipamọ, lẹhinna - ti ibi ipamọ rẹ ko ba ni ailopin - o nilo lati jẹ iduro fun mimọ wọn atẹle. Bii a ṣe ṣaṣeyọri aṣeyọri ninu eyi, ni itẹlọrun gbogbo awọn ibeere ti a sọ, yoo jiroro siwaju.

* Botilẹjẹpe awọn iforukọsilẹ funrararẹ le yatọ (Iforukọsilẹ Docker, Iforukọsilẹ Apoti GitLab, Harbor, ati bẹbẹ lọ), awọn olumulo wọn dojukọ awọn iṣoro kanna. Ojutu gbogbo agbaye ni ọran wa ko dale lori imuse ti iforukọsilẹ, nitori nṣiṣẹ ni ita ti awọn iforukọsilẹ ara wọn ati pe o funni ni ihuwasi kanna fun gbogbo eniyan.

Botilẹjẹpe a nlo werf gẹgẹbi imuse apẹẹrẹ, a nireti pe awọn isunmọ ti a lo yoo wulo fun awọn ẹgbẹ miiran ti o dojuko iru awọn iṣoro kanna.

Nitorina a ni lọwọ ita imuse ti ẹrọ kan fun awọn aworan mimọ - dipo awọn agbara wọnyẹn ti a ti kọ tẹlẹ sinu awọn iforukọsilẹ fun awọn apoti. Igbesẹ akọkọ ni lati lo Docker Registry API lati ṣẹda awọn eto imulo atijo kanna fun nọmba awọn afi ati akoko ti ẹda wọn (ti a mẹnuba loke). Fi kun wọn gba atokọ ti o da lori awọn aworan ti a lo ninu awọn amayederun ti a fi ranṣẹ, i.e. Kubernetes. Fun igbehin, o to lati lo Kubernetes API lati ṣe atunwo nipasẹ gbogbo awọn orisun ti a fi ranṣẹ ati gba atokọ ti awọn iye image.

Ojutu bintin yii yanju iṣoro to ṣe pataki julọ (iwọn No. 1), ṣugbọn o jẹ ibẹrẹ ti irin-ajo wa nikan lati ni ilọsiwaju ẹrọ mimọ. Nigbamii ti - ati pupọ diẹ sii ti o nifẹ si - ni ipinnu naa ṣepọ awọn aworan ti a tẹjade pẹlu itan-akọọlẹ Git.

Awọn eto fifi aami si

Lati bẹrẹ pẹlu, a yan ọna kan ninu eyiti aworan ikẹhin yẹ ki o tọju alaye pataki fun mimọ, ati kọ ilana naa lori awọn ero fifi aami si. Nigbati o ba ṣe atẹjade aworan kan, olumulo yan aṣayan fifi aami si kan pato (git-branch, git-commit tabi git-tag) o si lo iye ti o baamu. Ninu awọn eto CI, awọn iye wọnyi ti ṣeto laifọwọyi da lori awọn oniyipada ayika. Ni pato aworan ikẹhin ni nkan ṣe pẹlu Git atijo kan pato, titoju awọn pataki data fun ninu ni akole.

Ọna yii yorisi akojọpọ awọn eto imulo ti o gba Git laaye lati lo bi orisun kan ṣoṣo ti otitọ:

  • Nigbati o ba nparẹ ẹka/aami ni Git, awọn aworan ti o somọ ninu iforukọsilẹ ti paarẹ laifọwọyi.
  • Nọmba awọn aworan ti o ni nkan ṣe pẹlu awọn afi Git ati awọn iṣẹ ṣiṣe le jẹ iṣakoso nipasẹ nọmba awọn afi ti a lo ninu ero ti o yan ati akoko ti o ti ṣẹda adehun ti o somọ.

Lapapọ, imuse ti o yọrisi ni itẹlọrun awọn iwulo wa, ṣugbọn ipenija tuntun kan n duro de wa laipẹ. Otitọ ni pe lakoko lilo awọn ero fifi aami si ti o da lori awọn ipilẹṣẹ Git, a pade nọmba awọn aito. (Niwọn bi apejuwe wọn ti kọja ipari ti nkan yii, gbogbo eniyan le mọ ara wọn pẹlu awọn alaye naa nibi.) Nitorinaa, ti pinnu lati yipada si ọna ti o munadoko diẹ sii si fifi aami si (fiṣamisi ti o da lori akoonu), a ni lati tun ronu imuse ti mimọ aworan.

Algoridimu tuntun

Kí nìdí? Pẹlu fifi aami si akoonu, aami kọọkan le ni itẹlọrun awọn iṣẹ ṣiṣe lọpọlọpọ ni Git. Nigbati awọn aworan nu, o le ko to gun ro Nikan lati awọn ṣẹ ibi ti awọn titun tag ti a fi kun si awọn iforukọsilẹ.

Fun algorithm mimọ tuntun, o ti pinnu lati lọ kuro ni awọn ero fifi aami si ati kọ awon orisirisi-image ilana, ọkọọkan eyiti o tọju opo ti:

  • ifarabalẹ lori eyiti a ti ṣe ikede naa (ko ṣe pataki boya a ṣafikun aworan naa, yipada tabi wa kanna ni iforukọsilẹ eiyan);
  • ati idanimọ inu wa ti o baamu si aworan ti o pejọ.

Ni gbolohun miran, o ti pese sisopọ awọn afi ti a tẹjade pẹlu awọn adehun ni Git.

Ik iṣeto ni ati gbogbo alugoridimu

Nigbati atunto mimọ, awọn olumulo ni iwọle si awọn eto imulo ti o yan awọn aworan lọwọlọwọ. Kọọkan iru eto imulo jẹ asọye:

  • ọpọlọpọ awọn itọkasi, i.e. Awọn afi Git tabi awọn ẹka Git ti o lo lakoko ọlọjẹ;
  • ati opin awọn aworan ti o wa fun itọkasi kọọkan lati ṣeto.

Lati ṣapejuwe, eyi ni ohun ti iṣeto eto imulo aiyipada bẹrẹ lati dabi:

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

Iṣeto ni awọn eto imulo mẹta ti o ni ibamu pẹlu awọn ofin wọnyi:

  1. Fi aworan pamọ fun awọn aami Git 10 to kẹhin (nipasẹ ọjọ ẹda tag).
  2. Fipamọ diẹ sii ju awọn aworan 2 ti a tẹjade ni ọsẹ to kọja fun ko ju awọn okun 10 lọ pẹlu iṣẹ ṣiṣe ni ọsẹ to kọja.
  3. Fi awọn aworan 10 pamọ fun awọn ẹka main, staging и production.

Algorithm ti o kẹhin ṣan silẹ si awọn igbesẹ wọnyi:

  • Ngba pada farahan lati iforukọsilẹ eiyan.
  • Laisi awọn aworan ti a lo ninu Kubernetes, nitori A ti yan wọn tẹlẹ nipa didibo K8s API.
  • Ṣiṣayẹwo itan-akọọlẹ Git ati laisi awọn aworan ti o da lori awọn ilana imulo kan pato.
  • Yiyokuro awọn aworan ti o ku.

Pada si àkàwé wa, eyi ni ohun ti o ṣẹlẹ pẹlu werf:

Iṣoro ti “ọlọgbọn” mimọ ti awọn aworan eiyan ati ojutu rẹ ni werf

Sibẹsibẹ, paapaa ti o ko ba lo werf, ọna ti o jọra si mimọ aworan to ti ni ilọsiwaju - ni imuse kan tabi omiiran (gẹgẹbi ọna ti o fẹ si fifi aami si aworan) - le lo si awọn ọna ṣiṣe / awọn ohun elo miiran. Lati ṣe eyi, o to lati ranti awọn iṣoro ti o dide ki o wa awọn aye wọnyẹn ninu akopọ rẹ ti o gba ọ laaye lati ṣepọ ojutu wọn ni irọrun bi o ti ṣee. A nireti pe ọna ti a ti rin yoo ran ọ lọwọ lati wo ọran rẹ pato pẹlu awọn alaye titun ati awọn ero.

ipari

  • Laipẹ tabi ya, ọpọlọpọ awọn ẹgbẹ pade iṣoro ti ṣiṣan iforukọsilẹ.
  • Nigbati o ba n wa awọn solusan, o jẹ pataki akọkọ lati pinnu awọn ibeere fun ibaramu ti aworan naa.
  • Awọn irinṣẹ ti a funni nipasẹ awọn iṣẹ iforukọsilẹ eiyan olokiki gba ọ laaye lati ṣeto isọdi ti o rọrun pupọ ti ko ṣe akiyesi “aye ita”: awọn aworan ti a lo ninu Kubernetes ati awọn iyasọtọ ti ṣiṣan iṣẹ ti ẹgbẹ.
  • Alugoridimu rọ ati lilo daradara gbọdọ ni oye ti awọn ilana CI / CD ati ṣiṣẹ kii ṣe pẹlu data aworan Docker nikan.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun