werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Chivabvu 27 muhoro huru yemusangano weDevOpsConf 2019, wakaitwa sechikamu chemutambo. RIT++ 2019, sechikamu chechikamu che "Kuenderera Kuchiendesa", mushumo wakapihwa "werf - chishandiso chedu cheCI/CD muKubernetes". Inotaura pamusoro pazvo matambudziko nematambudziko anotarisana nemunhu wese kana achiendesa kuKubernetes, pamwe chete nezve nuances inogona kunge isingaonekwe nekukurumidza. Tichiongorora mhinduro dzinobvira, tinoratidza kuti izvi zvinoitwa sei muOpen Source tool werf.

Kubva pachiratidziro, chishandiso chedu (chaimbozivikanwa sedapp) chasvika padanho renhoroondo re 1000 nyeredzi paGitHub - Tinovimba kuti nharaunda yayo iri kukura yevashandisi ichaita kuti hupenyu huve nyore kune vazhinji mainjiniya eDevOps.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Saka, ngatisumai vhidhiyo yemushumo (~ 47 maminetsi, zvakanyanya kudzidzisa kupfuura chinyorwa) uye chikuru chinotorwa kubva pachiri muchimiro chemavara. Enda!

Kuendesa kodhi kuKubernetes

Iyo hurukuro haichazove nezve werf, asi nezveCI / CD muKubernetes, zvichireva kuti software yedu yakarongedzwa mumidziyo yeDocker. (Ndakataura nezvazvo mu 2016 report), uye K8s ichashandiswa kuimhanyisa mukugadzirwa (zvimwe pamusoro peizvi mu 2017 gore).

Kuendesa kunoratidzika sei muKubernetes?

  • Kune Git repository ine kodhi uye mirairo yekuivaka. Iyo application yakavakirwa muDocker mufananidzo uye yakaburitswa muDocker Registry.
  • Iyo imwechete repository ine zvakare mirairo yekuti ungaisa sei uye nekumhanyisa application. Padanho rekutumira, iyi mirairo inotumirwa kuKubernetes, iyo inogamuchira iyo inodiwa mufananidzo kubva kune registry uye nekuivhura.
  • Uyezve, kazhinji pane miedzo. Zvimwe zveizvi zvinogona kuitwa pakudhindisa mufananidzo. Iwe unogona zvakare (kutevera iwo mirairo yakafanana) kuendesa kopi yechishandiso (mune yakaparadzana K8s namespace kana sumbu rakaparadzana) uye kumhanya bvunzo ipapo.
  • Chekupedzisira, iwe unoda CI system inogamuchira zviitiko kubva kuGit (kana bhatani kudzvanya) uye inodaidza ese akatemerwa matanho: kuvaka, kushambadza, kuendesa, bvunzo.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Pane zvinyorwa zvishoma zvakakosha pano:

  1. Nekuti isu tine isingachinjiki zvivakwa (zvimiro zvisingachinjiki), mufananidzo wekushandisa unoshandiswa pamatanho ese (staging, kugadzirwa, nezvimwewo), panofanira kuva neimwe. Ndakataura pamusoro peizvi zvakadzama uye nemienzaniso. pano.
  2. Nekuti isu tinotevera zvivakwa sekodhi nzira (IaC), kodhi yekushandisa, mirairo yekuunganidza uye kuivhura inofanira kuva chaizvo mune imwe repository. Kuti uwane rumwe ruzivo nezve izvi, ona mushumo mumwe chete.
  3. Delivery cheni (kutumirwa) isu tinowanzo kuzviona seizvi: application yakaunganidzwa, yakaedzwa, yakaburitswa (release stage) uye ndizvozvo - kuendesa kwaitika. Asi muchokwadi, mushandisi anowana zvawaburitsa, kwete zvino pawaiendesa kukugadzirwa, uye paakakwanisa kuenda ikoko uye chigadzirwa ichi chakashanda. Saka ndinotenda kuti cheni yekutumira inopera chete padanho rekushanda (mhanya), kana zvakanyanya, kunyange panguva iyo code yakabviswa kubva mukugadzirwa (kuitsiva neimwe itsva).

Ngatidzokei kune iri pamusoro apa chirongwa chekuendesa muKubernetes: chakagadzirwa kwete chete nesu, asi nemunhu wese akabata nedambudziko iri. Muchokwadi, iyi pateni yave kunzi GitOps (unogona kuverenga zvakawanda nezvetemu uye mazano ari shure kwayo pano). Ngatitarisei pamatanho echirongwa.

Vaka danho

Zvinoita sekunge iwe unogona kutaura nezve kuvaka Docker mifananidzo muna 2019, apo munhu wese anoziva kunyora Dockerfiles uye kumhanya. docker build?.. Heano manuances andinoda kutarisisa:

  1. Mufananidzo uremu zvinhu, saka shandisa multi-stagekusiya mumufananidzo chete application iyo inonyanya kudikanwa pakushanda.
  2. Nhamba yezvikamu inofanira kudzikiswa nekubatanidza maketani e RUN-kuraira zvinoenderana nechirevo.
  3. Zvisinei, izvi zvinowedzera matambudziko debugging, nokuti apo gungano rinoputsika, unofanira kuwana murairo wakarurama kubva kumaketani akakonzera dambudziko.
  4. Assembly kumhanya zvakakosha nekuti tinoda kukurumidza kuburitsa shanduko uye kuona mhedzisiro. Semuenzaniso, haudi kuvaka patsva zvinotsamira mumaraibhurari emitauro pese paunogadzira application.
  5. Kazhinji kubva kune imwe Git repository yaunoda mifananidzo yakawanda, iyo inogona kugadziriswa neseti yeDockerfiles (kana yakanzi nhanho mune imwe faira) uye Bash script neyakatevedzana kusangana kwavo.

Uyu waingova muromo wechando wakatarisana nemunhu wese. Asi kune mamwe matambudziko, kunyanya:

  1. Kazhinji padanho regungano tinoda chimwe chinhu mount (semuenzaniso, cache mhedzisiro yekuraira senge apt mune yechitatu-bato dhairekitori).
  2. Tinoda Anable pachinzvimbo chekunyora mugoko.
  3. Tinoda kuvaka pasina Docker (nei isu tichida imwe yekuwedzera chaiyo muchina watinoda kugadzirisa zvese zveizvi, isu tatova neKubernetes cluster matinogona kumhanyisa midziyo?).
  4. Parallel assembly, iyo inogona kunzwisiswa nenzira dzakasiyana: mirairo yakasiyana kubva kuDockerfile (kana yakawanda-nhanho ikashandiswa), akati wandei anoita eiyo imwechete repository, akati wandei Dockerfiles.
  5. Distributed assembly: Tinoda kuunganidza zvinhu mumapodhi ari "ephemeral" nekuti cache yavo inonyangarika, zvinoreva kuti inoda kuchengetwa kumwe kwakaparadzana.
  6. Pakupedzisira, ndakapa zita repamusoro pezvishuwo automagic: Zvingave zvakanaka kuenda kune repository, nyora imwe rairo uye uwane yakagadzirira-yakagadzirwa mufananidzo, wakaunganidzwa nekunzwisisa kwekuita uye zvekuita nemazvo. Nekudaro, ini pachangu handina chokwadi chekuti ese nuances anogona kufanoona nenzira iyi.

Uye heano mapurojekiti:

  • moby/buildkit - muvaki kubva kuDocker Inc (atove akabatanidzwa mushanduro dzazvino dzeDocker), iri kuyedza kugadzirisa matambudziko ese aya;
  • kaniko - muvaki kubva kuGoogle anobvumidza iwe kuvaka pasina Docker;
  • Buildpacks.io -Kuedza kweCNCF kugadzira otomatiki mashiripiti uye, kunyanya, mhinduro inonakidza ine rebase yezvikamu;
  • uye boka rezvimwe zvinoshandiswa, zvakadai se kuvaka, genuinetools/img...

... uye tarisa kuti ingani nyeredzi dzavanadzo paGitHub. Ndiko kuti, kune rumwe rutivi, docker build iripo uye inogona kuita chimwe chinhu, asi muchokwadi nyaya yacho haina kunyatsogadziriswa - humbowo hweizvi ndiko kusimudzira kwakafanana kwevamwe vaunganidzi, imwe neimwe inogadzirisa chimwe chikamu chematambudziko.

Assembly mu werf

Saka takasvika werf (kare mukurumbira kufanana dapp) -Iyo yakavhurika sosi yekushandisa kubva kuFlant kambani, yatave tichigadzira kwemakore mazhinji. Izvo zvese zvakatanga makore mashanu apfuura neBash zvinyorwa zvakagonesa gungano reDockerfiles, uye kwemakore matatu ekupedzisira budiriro yakazara yakaitwa mukati mehurongwa hwepurojekiti ine yayo Git repository. (kutanga munaRuby, uyezve yakanyorwazve kuenda, uye panguva imwechete yakatumidzwa zita). Ndedzipi nyaya dzegungano dzinogadziriswa muwerf?

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Matambudziko ane mumvuri webhuruu akatoitwa, iyo yakafanana kuvaka yakaitwa mukati memugamuchiri mumwechete, uye nyaya dzakaratidzwa muyero dzakarongwa kupedzwa mukupera kwezhizha.

Nhanho yekuburitswa mu registry (shambadza)

Takafona docker push... - chii chingave chakaoma nezvekuisa chifananidzo kune registry? Uye ipapo mubvunzo unomuka: "Ndeipi tag yandinofanira kuisa pamufananidzo?" Zvinomuka nokuda kwechikonzero chatiinacho Gitflow (kana imwe Git zano) uye Kubernetes, uye indasitiri iri kuyedza kuona kuti zvinoitika muKubernetes zvinotevera zvinoitika muGit. Mushure mezvose, Git ndiyo yedu chete sosi yechokwadi.

Chii chakaoma apa? Ita shuwa reproducibility: kubva pakuita muGit, iyo isingachinjiki mune zvakasikwa (isingachinji), kumufananidzo weDocker, unofanirwa kuchengetwa wakafanana.

Hunokoshawo kwatiri ziva kwakabva, nekuti isu tinoda kunzwisisa kubva papi chibvumirano chekushanda muKubernetes chakavakwa (saka tinogona kuita zvakasiyana uye zvakafanana zvinhu).

Tagging Strategies

Yokutanga iri nyore git tag. Tine registry ine mufananidzo wakanyorwa kuti 1.0. Kubernetes ine nhanho uye kugadzira, uko mufananidzo uyu unoiswa. MuGit tinoita zvisungo uye pane imwe nguva tinomaka 2.0. Tinozviunganidza maererano nemirayiridzo kubva kune repository uye tinoiisa mu registry ne tag 2.0. Isu tinoiburitsa padanho uye, kana zvese zvakanaka, tozogadzira.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Dambudziko nemaitiro aya nderekuti isu takatanga taisa tag, tozongoedza toiburitsa. Sei? Chekutanga, hazvina musoro: tiri kuburitsa vhezheni yesoftware yatisati tamboedza (hatigone kuita neimwe nzira, nekuti kuti titarise, tinofanirwa kuisa tag). Chechipiri, iyi nzira haienderane neGitflow.

Sarudzo yechipiri ndeye git commit + tag. Bazi ratenzi rine tag 1.0; nokuda kwayo mune registry - chifananidzo chakaiswa kune kugadzirwa. Mukuwedzera, iyo Kubernetes cluster ine preview uye staging contours. Tevere tinotevera Gitflow: mubazi guru rekusimudzira (develop) tinoita zvinhu zvitsva, zvichikonzera kuzvipira nechiziviso #c1. Isu tinozviunganidza tozvishambadza muregistry tichishandisa identifier iyi (#c1) Ne identifier imwechete isu tinoburitsa kuti titarise. Isu tinoita zvimwe chete nekuita #c2 ΠΈ #c3.

Patakaona kuti pane zvinhu zvakakwana, tinotanga kudzikamisa zvinhu zvose. Gadzira bazi muGit release_1.1 (pane base #c3 kubva develop) Iko hakuna chikonzero chekuunganidza kuburitswa uku, nekuti ... izvi zvakaitwa munhanho yapfuura. Naizvozvo, isu tinogona kungoiburitsa kune iyo dhizaini. Tinogadzirisa tsikidzi mukati #c4 uye zvakafanana kuenderera mberi. Panguva imwecheteyo, budiriro iri kuitika develop, uko shanduko dzinotorwa nguva nenguva kubva release_1.1. Pane imwe nguva, tinowana chibvumirano chakaunganidzwa uye chakaiswa kune staging, iyo yatinofara nayo (#c25).

Ipapo isu tinobatanidza (nekukurumidza-mberi) bazi rekuburitsa (release_1.1) muna master. Isu tinoisa tag ine vhezheni itsva pane iyi kuzvipira (1.1) Asi mufananidzo uyu wakatounganidzwa muregistry, saka kuti usauunganidze zvakare, isu tinongowedzera chechipiri tag kumufananidzo uripo (ikozvino une ma tag mu registry. #c25 ΠΈ 1.1) Mushure meizvozvo, tinoiendesa kune kugadzirwa.

Pane dhizaini yekuti mufananidzo mumwe chete unokwidzwa kunhandare (#c25), uye mukugadzirwa kwakasiyana (1.1), asi isu tinoziva kuti "pamuviri" aya ndiwo mufananidzo wakafanana kubva kune registry.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Iyo chaiyo inokanganisa ndeyekuti hapana rutsigiro rwekubatanidza maiti, iwe unofanirwa kuita nekukurumidza-mberi.

Tinogona kuenderera mberi nekuita hunyengeri ... Ngatitarisei muenzaniso weDockerfile iri nyore:

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

Ngativake faira kubva kwairi zvinoenderana neinotevera musimboti:

  • SHA256 kubva kune zvinongedzo zvemifananidzo yakashandiswa (ruby:2.3 ΠΈ nginx:alpine), ari macheki ezviri mukati mavo;
  • zvikwata zvese (RUN, CMD zvichingoenda zvakadaro.);
  • SHA256 kubva kumafaira akawedzerwa.

... uye tora checksum (zvakare SHA256) kubva pafaira rakadaro. Izvi siginicha zvese zvinotsanangura zviri mukati meiyo Docker mufananidzo.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Ngatidzokerei kudhayagiramu uye pachinzvimbo chezvibvumirano tichashandisa masiginecha akadaro, i.e. tag mifananidzo ine siginicha.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Zvino, pazvinenge zvichidikanwa, semuenzaniso, kubatanidza shanduko kubva pakuburitswa kuenda kune master, isu tinogona kuita chaiyo yekubatanidza kuzvipira: ichave iine chiziviso chakasiyana, asi siginicha yakafanana. Nechiziviso chimwechete isu tinoburitsa mufananidzo kune kugadzira.

Izvo zvakashata ndezvekuti ikozvino hazvizogone kuona kuti ndeupi rudzi rwekuzvipira rwakasundirwa kugadzirwa - macheki anoshanda chete munzira imwe. Dambudziko iri rinogadziriswa nekuwedzera dhizaini ine metadata - ini ndichakuudza zvimwe gare gare.

Tagging in werf

Mune werf takaenda zvakanyanya uye tiri kugadzirira kuita yakagoverwa kuvaka ne cache isina kuchengetwa pamushini mumwe ... Saka, tiri kuvaka maviri emhando dzeDocker mifananidzo, tinodzidaidza. siteji ΠΈ mufananidzo.

Iyo werf Git repository inochengetera kuvaka-yakananga mirairo inotsanangura matanho akasiyana ekuvaka (beforeInstall, install, beforeSetup, gadzirira) Isu tinounganidza yekutanga nhanho mufananidzo nechisiginecha chinotsanangurwa secheki yematanho ekutanga. Zvadaro tinowedzera kodhi yekodhi, nokuda kwechifananidzo chechikamu chitsva tinoverenga checksum yayo ... Aya maitiro anodzokororwa kumatanho ose, semugumisiro watinowana seti yemifananidzo yesiteji. Zvadaro tinoita mufananidzo wekupedzisira, uyo unewo metadata nezvekwakabva. Uye isu tinomaka chifananidzo ichi nenzira dzakasiyana (tsanangudzo gare gare).

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Ngatitii mushure meizvi kuzvipira kutsva kunoonekwa umo chete kodhi yekushandisa yakashandurwa. Chii chichaitika? Nekuchinja kwekodhi, chigamba chichagadzirwa uye mufananidzo mutsva uchagadzirirwa. Siginicha yaro ichatemwa secheki yemufananidzo wekare nhanho uye chigamba chitsva. Mufananidzo mutsva wekupedzisira uchagadzirwa kubva pamufananidzo uyu. Kuita kwakafanana kuchaitika nekuchinja mune mamwe matanho.

Saka, mifananidzo yematanho ndeye cache inogona kuchengetwa yakagoverwa, uye mifananidzo yakatogadzirwa kubva mairi inoiswa kuDocker Registry.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Kuchenesa registry

Hatisi kutaura nezve kudzima maseru akasara akarembera mushure mekudzimwa ma tag - ichi chinhu chakajairwa cheDocker Registry pachayo. Tiri kutaura nezve mamiriro ezvinhu apo akawanda eDocker tags anounganidza uye isu tinonzwisisa kuti isu hatichada mamwe acho, asi anotora nzvimbo (uye / kana isu tinobhadhara).

Ndedzipi nzira dzekuchenesa?

  1. Hapana chaunogona kuita usachenese. Dzimwe nguva zviri nyore chaizvo kubhadhara zvishoma kune imwe nzvimbo pane kuburitsa hombe tangle yema tag. Asi izvi zvinoshanda chete kune imwe nzvimbo.
  2. Full reset. Kana iwe ukadzima mifananidzo yese uye ukavaka chete iwo azvino muCI system, dambudziko rinogona kumuka. Kana mudziyo ukatangazve mukugadzirwa, chifananidzo chitsva chinotakurirwa icho - icho chisati chaedzwa chero munhu. Izvi zvinouraya pfungwa yezvisingachinjiki zvivakwa.
  3. Bhuruu-nyoro. Imwe registry yakatanga kufashukira - tinoisa mifananidzo kune imwe. Dambudziko rakafanana nerekare nzira: panguva ipi iwe unogona kubvisa registry iyo yatanga kuputika?
  4. Nenguva. Udzime mifananidzo yese yakura kupfuura mwedzi umwe? Asi zvechokwadi pachave nesevhisi isina kuvandudzwa kwemwedzi ...
  5. Manually sarudza izvo zvinogona kutodzimwa.

Pane zviviri zvinonyatsoita sarudzo: usachenese kana musanganiswa webhuruu-girinhi + nemaoko. Muchiitiko chekupedzisira, tiri kutaura pamusoro pezvinotevera: kana iwe uchinzwisisa kuti inguva yekuchenesa registry, iwe unogadzira imwe itsva uye unowedzera mifananidzo yose mitsva kwairi pamusoro pekufamba, semuenzaniso, mwedzi. Uye mushure memwedzi, ona kuti ndeapi mapodhi muKubernetes achiri kushandisa iyo yekare registry, uye aendese iwo zvakare kune nyowani registry.

Tavinga chii werf? Tinounganidza:

  1. Git musoro: ese tags, matavi ese - tichifunga kuti isu tinoda zvese zvakaiswa muGit mumifananidzo (uye kana zvisiri, saka isu tinoda kuidzima muGit pachayo);
  2. mapodhi ese ari kupombwa parizvino kuKubernetes;
  3. yekare ReplicaSets (izvo zvichangobva kuburitswa), uye isu tinorongawo kuongorora Helm kuburitswa uye sarudza yazvino mifananidzo ipapo.

... uye ita whitelist kubva pane iyi seti - rondedzero yemifananidzo yatisingazodzime. Tinochenesa zvimwe zvese, tozowana mifananidzo yenherera toidzima futi.

Deploy stage

Kuvimbika declarativeness

Pfungwa yekutanga yandinoda kutarisisa mukutumirwa ndeyekuburitswa kweiyo yakagadziridzwa zviwanikwa zvigadziriso, yakaziviswa nekuzivisa. Gwaro rekutanga reYAML rinotsanangura Kubernetes zviwanikwa rinogara rakasiyana zvakanyanya nemhedzisiro inomhanya musumbu. Nekuti Kubernetes inowedzera kune iyo gadziriso:

  1. identifiers;
  2. ruzivo rwebasa;
  3. akawanda default values;
  4. chikamu chine chimiro chazvino;
  5. shanduko dzakaitwa sechikamu chekubvuma webhook;
  6. mhedzisiro yebasa revatongi vakasiyana-siyana (uye scheduler).

Naizvozvo, kana chigadziriso chitsva chikaonekwa (itsva), hatigone kungotora uye kunyora pamusoro ikozvino, "kurarama" kumisikidzwa nayo (kurarama) Kuti tiite izvi tichafanirwa kuenzanisa itsva nekupedzisira kushandiswa kugadzirisa (yekupedzisira-kushandiswa) uye pfuura kurarama yakagamuchira chigamba.

Iyi nzira inonzi 2-nzira kubatanidza. Inoshandiswa, semuenzaniso, muHelm.

Kune zvakare 3-nzira kubatanidza, izvo zvakasiyana pakuti:

  • kuenzanisa yekupedzisira-kushandiswa ΠΈ itsva, tinotarisa zvakadzimwa;
  • kuenzanisa itsva ΠΈ kurarama, tinotarisa zvakawedzerwa kana kuchinjwa;
  • chigamba chakapfupikiswa chinoshandiswa kune kurarama.

Isu tinotumira 1000+ zvikumbiro neHelm, saka isu tinogara ne 2-nzira yekubatanidza. Nekudaro, ine akati wandei matambudziko atakagadzirisa nezvigamba zvedu, izvo zvinobatsira Helm kushanda zvakajairika.

Real rollout status

Mushure mekunge CI system yedu yagadzira gadziriso nyowani yeKubernetes zvichienderana nechiitiko chinotevera, inoiendesa kuti ishandiswe. (shandisa) kune sumbu - kushandisa Helm kana kubectl apply. Tevere, iyo yakatotsanangurwa N-nzira yekubatanidza inoitika, iyo iyo Kubernetes API inopindura ichitendera kune iyo CI system, uye iyo kumushandisi wayo.

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Zvisinei, pane dambudziko guru: shure kwezvose Kubudirira kwekushandisa hakureve kubudirira kuburitsa. Kana Kubernetes achinzwisisa kuti ndedzipi shanduko dzinoda kushandiswa uye kuishandisa, isu hatisati taziva kuti mhedzisiro yacho ichave yei. Semuenzaniso, kugadzirisa uye kutangazve mapodhi kumberi kunogona kubudirira, asi kwete kumashure, uye isu tichawana akasiyana mavhezheni eanomhanya maapplication mifananidzo.

Kuti uite zvese nemazvo, chirongwa ichi chinoda yekuwedzera chinongedzo - yakakosha tracker iyo inogashira ruzivo rwemamiriro kubva kuKubernetes API uye kuiendesa kune imwezve kuongororwa kweiyo chaiyo mamiriro ezvinhu. Isu takagadzira iyo Open Source raibhurari muGo - cubedog (ona chiziviso chayo pano), iyo inogadzirisa dambudziko iri uye inovakwa muwerf.

Maitiro eiyi tracker padanho rewerf inogadziriswa uchishandisa zvirevo zvinoiswa paDeployments kana StatefulSets. Chirevo chikuru - fail-mode - anonzwisisa zvinotevera zvinorehwa:

  • IgnoreAndContinueDeployProcess - isu tinoregeredza matambudziko ekuburitsa chikamu ichi uye kuenderera mberi nekutumirwa;
  • FailWholeDeployProcessImmediately - kukanganisa muchikamu ichi kunomisa nzira yekuendesa;
  • HopeUntilEndOfDeployProcess - tinovimba kuti chikamu ichi chichashanda pakupera kwekutumirwa.

Semuenzaniso, iyi mubatanidzwa wezviwanikwa uye zvirevo zvakakosha fail-mode:

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Patinoendesa kekutanga, dhatabhesi (MongoDB) inogona kunge isati yagadzirira - Deployments ichatadza. Asi iwe unogona kumirira iyo nguva yekuti itange, uye kuendesa kuchiri kuitika.

Pane mamwe maviri zvirevo zve kubedog mu werf:

  • failures-allowed-per-replica - nhamba yezvibvumirano zvinowira kune imwe neimwe replica;
  • show-logs-until - inogadzirisa nguva kusvika iyo werf inoratidza (mu stdout) matanda kubva kune ese akatenderedzwa mapodhi. The default is PodIsReady (kuregeredza mameseji atisingade kana traffic yatanga kuuya kune pod), asi hunhu hunoshandawo: ControllerIsReady ΠΈ EndOfDeploy.

Chii chimwe chatinoda kubva pakutumirwa?

Pamusoro pemapoinzi maviri atotsanangurwa, tinoda:

  • kuti uone logs - uye chete zvinodiwa, uye kwete zvose zvakatevedzana;
  • track kufambira mberi, nokuti kana basa racho rakarembera "chinyararire" kwemaminitsi akawanda, zvakakosha kunzwisisa zviri kuitika ikoko;
  • kuva otomatiki rollback kana chimwe chinhu chisina kumira zvakanaka (uye saka zvakakosha kuti uzive mamiriro chaiwo ekutumirwa). Kuburitswa kunofanirwa kuve kweatomu: kungave kunopfuura kusvika kumagumo, kana kuti zvese zvinodzokera kune zvazvaimbova.

Migumisiro

Kwatiri sekambani, kuita ese akatsanangurwa nuances pamatanho akasiyana ekutumira (kuvaka, kushambadza, kuendesa), CI system uye utility zvakakwana. werf.

Panzvimbo pekupedzisa:

werf - chishandiso chedu cheCI / CD muKubernetes (muongorori uye mushumo wevhidhiyo)

Nerubatsiro rwewerf, takafambira mberi zvakanaka mukugadzirisa huwandu hukuru hwematambudziko kune mainjiniya eDevOps uye tingafara kana nharaunda yakakura ikaedza chishandiso ichi mukuita. Zvichava nyore kuwana chigumisiro chakanaka pamwe chete.

Vhidhiyo uye masiraidhi

Vhidhiyo kubva pakuita (~ maminitsi makumi mashanu):

Mharidzo yemushumo:

PS

Mimwe mishumo nezve Kubernetes pane yedu blog:

Source: www.habr.com

Voeg