werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

May 27 gudaha hoolka weyn ee shirka DevOpsConf 2019, oo lagu qabtay qayb ka mid ah xafladda RIT++ 2019, iyadoo qayb ka ah qaybta "Delivery Delivery", warbixin ayaa la siiyay "werf - qalabkeena CI/CD ee Kubernetes". Waxay ka hadlaysaa kuwa dhibaatooyinka iyo caqabadaha uu qof walba la kulmo marka la geeyo Kubernetes, iyo sidoo kale ku saabsan nuances oo laga yaabo inaan isla markiiba la dareemin. Falanqaynta xalalka suurtagalka ah, waxaan ku tusineynaa sida tan loogu hirgeliyay qalab Isha Furan werf.

Tan iyo markii la soo bandhigay, utility our (oo hore loo yiqiin dapp) waxa uu gaadhay heerar taariikhi ah 1000 xiddigood oo ku yaal GitHub - Waxaan rajaynaynaa in bulshadeeda sii koraysa ee isticmaalayaashu ay nolosha u fududayn doonto injineero badan oo DevOps ah.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Haddaba, aan soo bandhigno muuqaalka warbixinta (~ 47 daqiiqo, aad uga xog badan maqaalka) iyo soosaarkii ugu muhiimsanaa ee ka soo baxay qaabka qoraalka. Tag!

Gaarsiinta koodka Kubernetes

Hadalku hadda kama sii ahaan doono wax ku saabsan werf, laakiin wuxuu ku saabsan yahay CI/CD gudaha Kubernetes, taasoo tusinaysa in software-kayagu ku xiran yahay weelasha Docker (Arrintan ayaan kaga hadlay 2016 warbixin), iyo K8s ayaa loo isticmaali doonaa in lagu socodsiiyo wax soo saarka (wax badan oo arrintan ku saabsan Sannadka 2017).

Sidee bay u ekaanaysaa dhalmada Kubernetes?

  • Waxaa jira kayd Git ah oo leh koodka iyo tilmaamaha lagu dhisayo. Codsiga waxaa loo dhisay sawir Docker waxaana lagu daabacay Diiwaanka Docker.
  • Isla kaydka ayaa sidoo kale ka kooban tilmaamo ku saabsan sida loo geeyo loona socodsiiyo codsiga. Marxaladda dirista, tilmaamahan waxaa loo diraa Kubernetes, kaas oo ka helaya sawirka la rabo ee diiwaanka oo bilaabaya.
  • Waxaa dheer, inta badan waxaa jira baaritaanno. Qaar ka mid ah kuwan ayaa la samayn karaa marka sawir la daabacayo. Waxa kale oo aad (adigoo raacaya isla tilmaamaha) geyn kartaa nuqulka codsiga (meel gaar ah oo K8s ah ama koox gaar ah) oo waxaad ku wadi kartaa imtixaano halkaas.
  • Ugu dambeyntii, waxaad u baahan tahay nidaamka CI oo ka hela dhacdooyinka Git (ama badhanka gujinta) oo wacaya dhammaan marxaladaha loo qoondeeyay: dhis, daabac, geyn, tijaabi.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Waxaa jira dhowr qoraal oo muhiim ah halkan:

  1. Sababtoo ah waxaan leenahay kaabayaal aan isbedeli karin (kaabayaasha aan la bedeli karin), sawirka codsiga ee loo isticmaalo dhammaan heerarka (habaynta, wax soo saarka, iwm.), waa inuu jiraa. Arrintaas si faahfaahsan iyo tusaaleyaal ayaan uga hadlay. halkan.
  2. Sababtoo ah waxaan raacnaa kaabayaasha sida habka code (IaC), code code, tilmaamaha ururinta iyo bilaabista waa inay ahaadaan sida saxda ah ee hal kayd. Wixii macluumaad dheeraad ah oo arrintan ku saabsan, eeg isla warbixinta.
  3. Silsiladda gaarsiinta (gaarsiin) inta badan waxaan u aragnaa sidan: codsigii waa la soo ururiyay, la tijaabiyay, la sii daayay (marxaladda sii deynta) waana taas - gaarsiinta ayaa dhacday. Laakiin dhab ahaantii, isticmaaluhu wuxuu helayaa waxaad soo saartay, ma dabadeed markii aad u geysay wax-soo-saar, iyo markii uu u suuro-galay inuu halkaas tago oo wax-soo-saarkani shaqeeyo. Markaa waxaan aaminsanahay in silsiladda gaarsiinta ay dhammaaneyso kaliya marxaladda hawlgalka (orod), ama in ka badan si sax ah, xitaa wakhtigan markii koodka laga saaray wax soo saarka ( lagu beddelayo mid cusub).

Aan ku soo laabano nidaamka gudbinta ee kor ku xusan ee Kubernetes: waxaa la abuuray ma aha oo kaliya annaga, laakiin dhab ahaantii qof kasta oo wax ka qabtay dhibaatadan. Dhab ahaantii, qaabkan hadda waxaa loo yaqaan GitOps (wax badan ayaad ka akhriyi kartaa ereyga iyo fikradaha ka dambeeya halkan). Aynu eegno marxaladaha nidaamka.

Marxalad dhis

Waxay u egtahay inaad ka hadli karto dhismaha sawirada Docker 2019, marka qof kastaa uu yaqaan sida loo qoro Dockerfiles oo loo ordo docker build?.. Waa kuwan nuucyada aan jeclaan lahaa inaan u fiirsado:

  1. Miisaanka sawirka arrimaha, markaa isticmaal marxalado badansi aad uga tagto sawirka kaliya codsiga dhabta ah ee lagama maarmaanka u ah hawlgalka.
  2. Tirada lakabyada waa in la yareeyaa iyadoo la isku darayo silsiladaha RUN- amarrada sida macnaha.
  3. Si kastaba ha ahaatee, tani waxay kordhinaysaa dhibaatooyinka qaladka, sababtoo ah marka shirku dhaco, waa inaad ka heshaa amarka saxda ah ee silsiladda dhibaatada keentay.
  4. Xawaaraha fadhiga muhiim ah sababtoo ah waxaan rabnaa inaan si degdeg ah u soo saarno isbeddelada oo aan aragno natiijooyinka. Tusaale ahaan, ma rabto inaad dib u dhisto ku tiirsanaanta maktabadaha luqadda mar kasta oo aad dhisto codsi.
  5. Inta badan hal kayd Git ah waxaad u baahan tahay sawiro badan, Kaas oo lagu xallin karo qaybo Dockerfiles ah (ama marxalado magac leh oo hal fayl ah) iyo qoraal Bash ah oo wata ururkooda isku xiga.

Tani waxay ahayd cidhifka barafka ee qof walba la kulmaayo. Laakiin waxaa jira dhibaatooyin kale, gaar ahaan:

  1. Inta badan marxaladda kulanka waxaan u baahanahay wax buurta (tusaale ahaan, kaydinta natiijada amarka sida ku habboon hagaha cid saddexaad).
  2. Waxaan rabnaa Caqli ahaan halkii qolof wax ku qori lahayd.
  3. Waxaan rabnaa dhis aan Docker (maxaynu ugu baahanahay mashiin dheeri ah oo aan u baahanahay inaan wax walba u habeyno tan, markaan horey u haysanay kooxda Kubernetes oo aan ku wadi karno weelasha?).
  4. Isbarbar yaaca, kaas oo loo fahmi karo siyaabo kala duwan: amarro kala duwan oo ka yimid Dockerfile (haddii marxalado badan la isticmaalo), dhowr jeer oo isku mid ah kaydinta, dhowr Dockerfile.
  5. Shirarka la qaybiyey: Waxaan rabnaa in aan ku ururinno waxyaallaha "ephemeral" sababtoo ah khasnadoodii way baaba'aysaa, taas oo macnaheedu yahay in loo baahan yahay in meel gaar ah lagu kaydiyo.
  6. Ugu dambayntii, waxaan magacaabay meesha ugu sarreysa ee rabitaannada si toos ah: Way fiicnaan lahayd in la aado bakhaarka, ku qor qaar ka mid ah amar oo aad hesho sawir diyaarsan, oo la isugu keenay fahamka sida iyo waxa loo sameeyo si sax ah. Si kastaba ha ahaatee, anigu shakhsi ahaan ma hubo in dhammaan nuancesyada sidan loo sii saadaalin karo.

Waana kuwan mashaariicda:

  • moby/buildkit - dhise ka socda Docker Inc (oo horeyba loogu dhex daray noocyada hadda ee Docker), kaas oo isku dayaya inuu xalliyo dhammaan dhibaatooyinkan;
  • kaniko - dhise ka socda Google oo kuu oggolaanaya inaad dhisto Docker la'aan;
  • Buildpacks.io - Isku dayga CNCF ee ah in la sameeyo sixir toos ah iyo, gaar ahaan, xal xiiso leh oo leh dib-u-dhigis lakabyo;
  • iyo farabadan oo ah adeegyada kale, sida dhismaha, realtools/img...

...oo fiiri inta xiddig ee ay ku leeyihiin GitHub. Taasi waa, dhinac. docker build jira oo wax samayn kara, laakiin dhab ahaantii arrinta si buuxda looma xallin -Caddaynta tani waa horumarinta isbarbar-dhigga ee ururiyeyaasha beddelka ah, kuwaas oo mid kastaa xalliyo qayb ka mid ah dhibaatooyinka.

Golaha in werf

Markaa waanu helnay werf (hore caan ah sida dapp) -Utility il furan oo ka socda shirkadda Flant, kaas oo aanu samaynaynay sanado badan. Dhammaantood waxay ku bilowdeen 5 sano ka hor qoraallada Bash oo wanaajiyey shirka Dockerfiles, iyo 3dii sano ee la soo dhaafay horumar buuxa ayaa lagu sameeyay qaab dhismeedka hal mashruuc oo leh kayd Git u gaar ah. (marka hore Ruby, ka dibna dib loo qoray Si aad u tagto, oo isla markaaba magaciisii). Waa maxay arrimaha golaha lagu xalliyo werf?

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Dhibaatooyinka hooska buluugga ah ayaa horay loo hirgeliyay, dhismaha barbar-dhigga ayaa lagu sameeyay isla martigeliyaha, iyo arrimaha lagu muujiyay jaalaha ayaa la qorsheeyay in la dhammeeyo dhammaadka xagaaga.

Heerka daabacaada ee diiwaanka (daabac)

Waanu garaacnay docker push... - maxaa ku adkaan kara raritaanka sawirka diiwaanka? Ka dibna su'aasha ayaa soo baxaysa: "Maxay tagtaa oo aan ku dhejiyaa sawirka?" Waxay u kacdaa sababta aan u leenahay Gitflow (ama istiraatiijiyad kale oo Git ah) iyo Kubernetes, iyo warshaduhu waxay isku dayayaan inay hubiyaan in waxa Kubernetes ka dhacaya ay raacaan waxa ka dhacaya Git. Ka dib oo dhan, Git waa isha kaliya ee runta.

Maxaa arrintan ku adag? Hubi soo saarista: laga bilaabo ballan-qaadka Git, kaas oo aan beddeli karin dabeecadda (aan la bedeli karin), oo ku socda sawirka Docker, kaas oo ay tahay in la sii hayo.

Sidoo kale waa inoo muhiim go'aami asalka, sababtoo ah waxaan rabnaa inaan ka fahanno go'aanka codsiga ka socda Kubernetes la dhisay (ka dibna waxaan sameyn karnaa kala duwanaansho iyo waxyaabo la mid ah).

Xeeladaha calaamadaynta

Midka hore waa mid fudud git tag. Waxaan haynaa diiwaan leh sawir lagu calaamadiyay sida 1.0. Kubernetes waxay leedahay marxalad iyo wax soo saar, halkaasoo sawirkan la soo galiyay. Git gudaheeda waxaan ku sameynaa ballanqaad, mar marka qaar ayaan calaamadeynaa 2.0. Waxaan u soo ururin si waafaqsan tilmaamaha ka bakhaarka oo ku rid diiwaanka oo leh sumadda 2.0. Waxaan u soo saareynaa marxaladda iyo, haddii ay dhammaan si fiican u wanaagsan yihiin, ka dibna wax soo saarka.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Dhibaatada habkan ayaa ah in aan marka hore dhejinno calaamadda, ka dibna kaliya ayaa tijaabiyey oo ka soo saarnay. Waa maxay sababtu? Marka hore, waa wax aan macquul ahayn: waxaan soo saareynaa nooc ka mid ah software-ka oo aynaan weli tijaabin (ma sameyn karno si kale, sababtoo ah si loo hubiyo, waxaan u baahanahay inaan dhejino). Marka labaad, jidkani kuma habboona Gitflow.

Xulashada labaad waa git ballan + tag. Laanta sayidku waxay leedahay sumad 1.0; iyada oo ku jirta diiwaanka - sawir la geeyay wax soo saarka. Intaa waxaa dheer, kooxda Kubernetes waxay leedahay muuqaal horudhac ah iyo jaangooyo. Marka xigta waxaan raacnaa Gitflow: laanta ugu weyn ee horumarinta (develop) waxaanu samaynaa sifooyin cusub, taaso keentey in aan ka go'no aqoonsiga #c1. Waanu soo ururinay oo ku daabacnaa diiwaanka anagoo adeegsanayna tilmaantan (#c1). Aqoonsi isku mid ah ayaanu ku soo baxnay si aan u eegno. Waxaan sidaas oo kale ku samaynaa ballan-qaadyada #c2 ΠΈ #c3.

Markii aan ogaanay in ay jiraan astaamo ku filan, waxaan bilaabeynaa inaan xasilino wax walba. Laan ka samee Git release_1.1 (saldhigga #c3 ka develop). Looma baahna in la ururiyo sii deyntan, sababtoo ah... tan waxaa lagu sameeyay tallaabadii hore. Sidaa darteed, waxaan si fudud ugu soo rogi karnaa diyaarinta. Waxaan hagaajinnaa dhiqlaha gudaha #c4 oo si la mid ah u soo rog si ay u diyaariyaan. Isla markaana, horumarku ku socdo develop, halkaasoo isbeddelada laga soo qaado xilliyada qaarkood release_1.1. Mar marka qaar, waxaan helnaa ballan la isku duba ridey oo la galiyey diyaarinta, taas oo aan ku faraxsanahay (#c25).

Kadibna waxaanu samaynaa isku-dhafka (oo leh hore-u-socod) ee laanta sii-deynta (release_1.1) macalinka. Waxaan ku calaamadeynay nooca cusub ballantan (1.1). Laakin sawirkan mar hore ayaa lagu soo ururiyay diiwaanka, si aan dib loo soo ururin, waxaan si fudud ugu darnaa calaamad labaad sawirka hadda jira (hadda waxay leedahay calaamado ku jira diiwaanka #c25 ΠΈ 1.1). Taas ka dib, waxaan u soo saareynaa wax soo saarka.

Waxaa jirta cillad ah in hal sawir oo keliya la soo galiyay habaynta (#c25), iyo xagga wax soo saarka waa nooc ka duwan (1.1), laakiin waxaan ognahay in "jir ahaan" kuwani ay yihiin sawir la mid ah diiwaanka.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Khasaaraha dhabta ah waa in aysan jirin wax taageero ah oo loogu talagalay isku-dhafka, waa inaad si degdeg ah u sameyso.

Waan sii socon karnaa oo waxaan sameyn karnaa khiyaamo... Aynu eegno tusaale Dockerfile fudud:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

Aan ka dhisno fayl sida mabda'a soo socda:

  • SHA256 oo ka yimid tilmaamayaasha sawirada la isticmaalay (ruby:2.3 ΠΈ nginx:alpine), kuwaas oo ah hubinta waxa ku jira;
  • dhamaan kooxaha (RUN, CMD iyo wixii la mid ah.);
  • SHA256 ee faylasha lagu daray.

... oo ka qaad jeegaga (mar kale SHA256) faylkan oo kale. Tani saxiix wax kasta oo qeexaya waxa ku jira sawirka Docker.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Aan ku soo noqono jaantuska iyo Halkii aan ballan-qaadi lahayn waxaan adeegsan doonnaa saxiixyadaas, i.e. ku dheji sawirada saxiixyo.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Hadda, marka ay lagama maarmaan noqoto, tusaale ahaan, in la isku daro isbeddelada sii-deynta ilaa sayid, waxaan samayn karnaa ballan-qaad dhab ah: waxay yeelan doontaa aqoonsi ka duwan, laakiin saxeex isku mid ah. Aqoonsi isku mid ah ayaanu ku soo rogi doonaa sawirka si loo soo saaro.

Khasaaraha ayaa ah in hadda aysan suurtagal ahayn in la go'aamiyo nooca ballan-qaadka lagu riixay wax-soo-saarka - jeeggu wuxuu shaqeeyaa hal jiho oo keliya. Dhibaatadan waxaa lagu xalliyaa lakab dheeraad ah oo leh xog badan - waxaan kuu sheegi doonaa wax badan ka dib.

Ku dhejinta werf

Werf-ka waxaanu sii soconnay oo aanu diyaarinaynay inaanu samayno dhisme qaybsan oo leh kayd aan lagu kaydin hal mishiin... Markaa, waxaanu dhisaynaa laba nooc oo ah sawirada Docker, waxaanu ugu yeedhnaa. stage ΠΈ image.

Kaydka werf Git waxa uu kaydiyaa tilmaamo gaar ah oo dhismaya oo qeexaya heerarka kala duwan ee dhismaha (ka hor inta aan la rakibin, rakibi, Kahor Dejinta, Mudanayaasha). Waxaan ku soo ururinay sawirka marxaladda koowaad saxeex lagu qeexay sida tirada tillaabooyinka hore. Kadibna waxaan ku darnaa koodhka isha, sawirka marxaladda cusub waxaan xisaabineynaa jeeggiisa ... Hawlgalladan ayaa lagu soo celiyaa dhammaan marxaladaha, taas oo ka dhalatay taas oo aan heleyno jaantusyo muuqaal ah. Kadibna waxaanu samaynaa sawirka kama dambaysta ah, kaas oo sidoo kale ka kooban metadata ku saabsan asalkiisa. Oo sawirkan siyaabo kala duwan ayaan ugu calaamadeynaa (faahfaahinta dambe).

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Ka soo qaad in tan ka dib ballan cusub uu soo baxay kaas oo kaliya code code-ka la bedelay. Maxaa dhici doona? Si loo beddelo koodka, balastar ayaa la abuuri doonaa waxaana la diyaarin doonaa sawir marxalad cusub. Saxiixeeda waxaa loo go'aamin doonaa sida hubinta sawirkii hore iyo balastar cusub. Sawir kama dambays ah oo cusub ayaa laga samayn doonaa sawirkan. Dabeecad la mid ah ayaa ku dhici doonta isbeddellada marxaladaha kale.

Haddaba, sawirada masraxa ayaa ah kayd loo kaydin karo si loo qaybiyo, sawiradii horena looga sameeyay waxaa lagu shubaa Diiwaanka Docker.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Nadiifinta diiwaanka

Kama hadlayno tirtirista lakabyada sii lulmay ka dib markii la tirtiray summada - tani waa astaanta caadiga ah ee Diiwaanka Docker laftiisa. Waxaan ka hadleynaa xaalad marka badan oo Docker tags urursan oo aan fahamsanahay in aan hadda ka dib u baahan yihiin qaar ka mid ah, laakiin ay qaataan meel bannaan (iyo/ama waxaan bixinaa).

Waa maxay xeeladaha nadaafadda?

  1. Waxba ma samayn kartid ha nadiifin. Mararka qaarkood way fududahay in aad wax yar ku bixiso boos dheeri ah intii aad kala furfuri lahayd tangle aad u weyn. Laakiin tani waxay shaqaysaa oo keliya ilaa heer go'an.
  2. Dib u dejin buuxda. Haddii aad tirtirto dhammaan sawirada oo aad dib u dhisto kaliya kuwa hadda ku jira nidaamka CI, dhibaato ayaa iman karta. Haddii weelka dib loo bilaabo soo saarista, sawir cusub ayaa loo rari doonaa - mid aan wali qofna tijaabin. Tani waxay dishaa fikradda kaabayaasha aan la beddeli karin.
  3. Buluug-cagaaran. Mid ka mid ah diiwangelinta ayaa bilaabay in ay buux dhaafaan - waxaan u rarnaa sawirro mid kale. Dhibaato la mid ah tii habkii hore: goorma ayaad nadiifin kartaa diiwaanka bilaabay inuu buux dhaafiyo?
  4. Waqtiga. Ma tirtirtaa dhammaan sawirada ka weyn 1 bil? Laakin hubaal waxaa jiri doona adeeg aan la cusboonaysiin muddo bil ah...
  5. Manually go'aami waxa mar hore la tirtiri karo.

Waxaa jira laba ikhtiyaar oo dhab ah: ha nadiifin ama isku darka buluug-cagaaran + gacanta. Xaaladda dambe, waxaan ka hadleynaa kuwan soo socda: markaad fahamto inay tahay waqtigii la nadiifin lahaa diiwaanka, waxaad abuurtaa mid cusub oo ku dar dhammaan sawirada cusub muddada, tusaale ahaan, bil. Iyo bil ka dib, arag galbadaha Kubernetes ee wali isticmaalaya diiwaankii hore, oo sidoo kale u wareeji diiwaanka cusub.

Maxaan u nimid werf? Waxaan aruurineynaa:

  1. Git madaxa: dhammaan tags, dhammaan laamaha - iyada oo loo maleynayo inaan u baahanahay wax kasta oo ku calaamadsan Git sawirada (iyo haddii kale, markaa waxaan u baahanahay inaan tirtirno Git lafteeda);
  2. dhammaan bambooyinka hadda lagu shubay Kubernetes;
  3. ReplicaSets duug ah (waxa dhawaan la sii daayay), waxaana sidoo kale qorshaynaynaa inaan iskaan ku samayno siidaynta Helm oo aan doorano sawiradii ugu dambeeyay ee halkaas.

... oo ka samee liis cad oo shaxdan - liiska sawirada oo aynaan tirtiri doonin. Waxaan nadiifinnaa wax kasta oo kale, ka dib waxaan helnaa sawirada masraxa agoonta oo aan sidoo kale tirtirno.

Geli marxaladda

Ku dhawaaqid la isku halayn karo

Qodobka ugu horreeya ee aan jeclaan lahaa in aan ku soo jeediyo fiiro gaar ah marka la dirayo waa soo-dejinta habaynta kheyraadka ee la cusboonaysiiyay, oo lagu dhawaaqay si cad. Dukumeentiga asalka ah ee YAML ee qeexaya ilaha Kubernetes had iyo jeer aad ayuu uga duwan yahay natiijada dhabta ah ee ku socota kooxda. Sababtoo ah Kubernetes wuxuu ku darayaa qaabeynta:

  1. aqoonsiga;
  2. macluumaadka adeegga;
  3. qiyam badan oo aan caadi ahayn;
  4. qaybta hadda jirta;
  5. isbeddelada lagu sameeyay qayb ka mid ah shabkada gelitaanka;
  6. natiijada shaqada ee kontaroolayaasha kala duwan (iyo jadwalka).

Sidaa darteed, marka qaabeynta kheyraadka cusub soo muuqato (cusubKaliya ma qaadan karno oo ku beddeli karno hadda, qaabeynta "nool" iyada (ku nool). Si tan loo sameeyo waa inaan is barbar dhignaa cusub oo leh qaabaynta ugu dambeysay ee la dabaqay (Codsaday ugu dambeeyay) oo dul gal ku nool balastar helay.

Habkan waxaa loo yaqaan 2-dariiq isku-dhafka. Waxa loo isticmaalaa, tusaale ahaan, Helm.

Waxaa kaloo jira 3-dariiq isku-dhafka, kaas oo ku kala duwan:

  • isbarbardhigga Codsaday ugu dambeeyay ΠΈ cusub, waxaan eegnaa waxa la tirtiray;
  • isbarbardhigga cusub ΠΈ ku nool, waxa la soo kordhiyey ama la bedelay baynu eegnaa;
  • balastarkii la soo koobay ayaa lagu dabaqayaa ku nool.

Waxaan ku direynaa 1000+ codsiyo Helm, marka waxaan dhab ahaantii ku nool nahay isku-dhafka 2-way. Si kastaba ha ahaatee, waxa ay leedahay tiro dhibaatooyin ah oo aanu ku xalinay balastarradayada, kuwaas oo ka caawiya Helm in uu si caadi ah u shaqeeyo.

Heerka duubista dhabta ah

Ka dib markii nidaamkayaga CI uu soo saaro qaabayn cusub Kubernetes oo ku salaysan dhacdada soo socota, waxay u gudbisaa isticmaalka (codso) kutlada - isticmaalaya Helm ama kubectl apply. Marka xigta, isku-darka N-way ee horay loo sharraxay ayaa dhacaya, kaas oo Kubernetes API uu uga jawaabo si waafaqsan nidaamka CI, iyo taas isticmaalkeeda.

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Si kastaba ha ahaatee, waxaa jira dhibaato weyn: ka dib oo dhan Codsiga guuleysta macnaheedu maaha soo bixitaan guul leh. Haddii Kubernetes uu fahmo isbeddellada loo baahan yahay in lagu dabaqo oo lagu dabaqo, weli ma garanayno waxa natiijadu noqon doonto. Tusaale ahaan, cusboonaysiinta iyo dib-u-kicinta boodhka hore ee hore ayaa laga yaabaa inay guulaystaan, laakiin maaha xagga dambe ee dambe, waxaanan heli doonaa noocyo kala duwan oo sawirada codsiga socda.

Si loo sameeyo wax walba si sax ah, nidaamkani wuxuu u baahan yahay isku xirka dheeriga ah - raadiye gaar ah oo ka heli doona macluumaadka xaaladda API Kubernetes una gudbiya falanqayn dheeraad ah oo ku saabsan xaaladda dhabta ah ee shay. Waxaan ka abuurnay maktabad Isha Furan gudaha Go - cubedog (fiiri ku dhawaaqistiisa halkan), kaas oo xaliya dhibaatadan oo loo dhisay werf.

Hab-dhaqanka raad-raacahan heerka werf waxa lagu habeeyey iyadoo la isticmaalayo tafaasiil lagu dhejiyay Deployments ama StatefulSets. Sharaxaada ugu weyn - fail-mode - fahma macnaha soo socda:

  • IgnoreAndContinueDeployProcess - waanu iska indhatiray dhibaatooyinka soo saarista qaybtan oo aan sii wadno hawlgelinta;
  • FailWholeDeployProcessImmediately - khalad ka jira qaybtan ayaa joojisa habka dirida;
  • HopeUntilEndOfDeployProcess - Waxaan rajaynaynaa in qaybtani shaqayn doonto dhamaadka hawlgelinta.

Tusaale ahaan, isku darka kheyraadka iyo qiyamka tafatirka fail-mode:

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Marka aan geyno markii ugu horeysay, keydka xogta (MongoDB) waxaa laga yaabaa inaysan diyaar u ahayn weli - Hawlgelintu way fashilmi doontaa. Laakin waxaad sugi kartaa wakhtiga uu bilaabmayo, hawlgelintana wali way soconaysaa.

Waxaa jira laba sharraxaad oo kale oo loogu talagalay kubedog werf:

  • failures-allowed-per-replica - tirada la ogol yahay hoos u dhac kasta nuqul;
  • show-logs-until - nidaaminaya waqtiga ilaa uu werf muujinaya (in stdout) logu ka soo giringiriyey oo dhan. Dabeecaddu waa PodIsReady (inay iska indhotiraan fariimaha laga yaabo inaynaan doonayn marka taraafiggu bilaabo inuu soo galo boodhka), laakiin qiyamku sidoo kale waa ansax: ControllerIsReady ΠΈ EndOfDeploy.

Maxaa kale oo aan ka rabnaa keenista?

Marka laga soo tago labada qodob ee hore loo sheegay, waxaan jeclaan lahayn:

  • si aad u aragto qoryo - oo kaliya kuwa loo baahan yahay, oo ma aha wax kasta oo isku xigta;
  • raadraac horumar, sababtoo ah haddii shaqadu ay "aamusantahay" dhowr daqiiqo, waxaa muhiim ah in la fahmo waxa halkaas ka dhacaya;
  • imegn si toos ah dib ugu laabashada haddii ay wax qaldamaan (sidaas darteedna waa muhiim in la ogaado xaaladda dhabta ah ee hawlgelinta). Soo-dejintu waa inay noqotaa atomic: ama waxay maraysaa ilaa dhammaadka, ama wax walba waxay ku soo noqonayaan sidii hore.

Natiijooyinka

Annaga shirkad ahaan, si aan u hirgelino dhammaan nuucyada lagu sharraxay heerarka kala duwan ee gaarsiinta (dhisidda, daabacaadda, geynta), nidaamka CI iyo utility ayaa ku filan werf.

Halkii gabagabo:

werf - qalabkeena CI/CD ee Kubernetes (dib u eegis iyo warbixinta muuqaalka)

Annaga oo kaashanayna werf, waxaan horumar wanaagsan ka sameynay xallinta tiro badan oo mashaakil ah injineerada DevOps waxaana ku farxi lahaa haddii bulshada ballaaran ay ugu yaraan isku dayaan utilityn ficil ahaan. Way sahlanaan doontaa in natiijo wanaagsan la isla gaaro.

Muuqaalo iyo sawiro

Fiidiyowga waxqabadka (~ 47 daqiiqo):

Soo bandhigida warbixinta:

PS

Warbixinno kale oo ku saabsan Kubernetes oo ku jira blog-keena:

Source: www.habr.com

Add a comment