werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

27 May tao amin'ny efitrano lehibe amin'ny fihaonambe DevOpsConf 2019, natao ho ampahany amin'ny fetibe RIT++ 2019, ao anatin'ny fizarana "Fandefasana mitohy", nisy tatitra nomena "werf - fitaovanay ho an'ny CI/CD amin'ny Kubernetes". Miresaka momba ireo olana sy fanamby atrehin'ny tsirairay rehefa miparitaka any amin'ny Kubernetes, ary koa momba ireo nuance izay mety tsy ho tsikaritra avy hatrany. Ny famakafakana vahaolana azo atao dia asehoy ny fomba fampiharana izany amin'ny fitaovana Open Source werf.

Hatramin'ny famelabelarana dia nahatratra ny zava-bita manan-tantara tamin'ny Kintana 1000 ao amin'ny GitHub - manantena izahay fa ny vondrom-piarahamonina mpampiasa azy mitombo dia hanamora ny fiainana ho an'ny injeniera DevOps maro.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Noho izany, andao hampahafantatra video ny tatitra (~47 minitra, be fanazavana kokoa noho ny lahatsoratra) sy ny tena nalaina tao amin'ny endrika lahatsoratra. Mandehana!

Fanaterana kaody amin'ny Kubernetes

Ny resaka dia tsy momba ny werf intsony, fa momba ny CI/CD ao amin'ny Kubernetes, izay midika fa ny logiciel-nay dia napetraka ao anaty container Docker. (Niresaka momba izany aho tamin'ny 2016 tatitra), ary K8 no hampiasaina hampandehanana azy amin'ny famokarana (bebe kokoa momba izany ao amin'ny Taona 2017).

Manao ahoana ny endriky ny fanaterana ao amin'ny Kubernetes?

  • Misy tahiry Git miaraka amin'ny kaody sy ny torolàlana momba ny fananganana azy. Ny fampiharana dia natsangana ho sary Docker ary navoaka tao amin'ny Docker Registry.
  • Ity tahiry ity ihany koa dia misy torolàlana momba ny fomba fametrahana sy fampandehanana ny fampiharana. Eo amin'ny sehatry ny fametrahana, alefa any amin'ny Kubernetes ireo torolalana ireo, izay mandray ny sary tiana avy amin'ny rejisitra ary manomboka izany.
  • Fanampin'izany, matetika misy fitsapana. Ny sasany amin'ireo dia azo atao rehefa mamoaka sary. Azonao atao ihany koa (manaraka ny toromarika mitovy) mametraka dika mitovy amin'ny rindranasa (amin'ny toerana misy anarana K8s na cluster misaraka) ary manao fitsapana any.
  • Farany, mila rafitra CI ianao izay mandray hetsika avy amin'ny Git (na bokotra bokotra) ary miantso ireo dingana voatondro rehetra: manangana, mamoaka, mametraka, manandrana.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Misy fanamarihana manan-danja vitsivitsy eto:

  1. Satria manana fotodrafitrasa tsy azo ovaina isika (fotodrafitrasa tsy miova), ny sary fampiharana izay ampiasaina amin'ny dingana rehetra (filalaovana, famokarana, sns.), tsy maintsy misy iray. Niresaka momba izany tamin'ny antsipiriany bebe kokoa sy tamin'ny ohatra aho. eto.
  2. Satria manaraka ny fotodrafitrasa ho toy ny code approach izahay (IaC), ny kaody fampiharana, ny torolàlana amin'ny fanangonana sy ny fandefasana azy dia tokony ho tena ao anaty tahiry iray. Raha mila fanazavana fanampiny momba izany dia jereo ny tatitra mitovy.
  3. Rojo fanaterana (fanaterana) Matetika isika no mahita izany: ny fampiharana dia nivory, notsapaina, navoaka (dingana famoahana) ary izany - ny fanaterana dia natao. Fa raha ny tena izy dia mahazo izay navoakanao ilay mpampiasa, tsy dia rehefa naterinao tany amin'ny famokarana, ary rehefa afaka nandeha tany izy dia niasa io famokarana io. Ka mino aho fa tapitra ny rojo fanaterana eo amin’ny dingana fampandehanan-draharaha ihany (mihazakazaka), na ny marimarina kokoa, na dia tamin'ny fotoana nesorina tamin'ny famokarana ny kaody (soloina vaovao).

Andeha isika hiverina amin'ny tetika fanaterana etsy ambony ao amin'ny Kubernetes: noforonina tsy izahay ihany, fa ara-bakiteny izay rehetra niatrika ity olana ity. Raha ny marina, ity lamina ity dia antsoina hoe GitOps (afaka mamaky bebe kokoa momba ny teny sy ny hevitra ao ambadik'izany ianao eto). Andeha hojerentsika ny dingana amin'ny drafitra.

Manangana sehatra

Toa afaka miresaka momba ny fananganana sary Docker amin'ny 2019 ianao, rehefa fantatry ny rehetra ny fomba fanoratana sy ny fandehanana Dockerfiles. docker build?.. Ireto ny nuance tiako hojerena:

  1. Lanja sary zava-dehibe, ka ampiasao multi-tsehatramba hiala amin`ny sary ihany ny fampiharana izay tena ilaina amin`ny fandidiana.
  2. Isan'ny sosona tsy maintsy ahena amin'ny alalan'ny fampifangaroana rojo ny RUN-baiko araka ny dikany.
  3. Manampy olana anefa izany debugging, satria rehefa mianjera ny fivoriambe dia tsy maintsy mitady ny baiko tsara avy amin'ny rojo izay nahatonga ny olana ianao.
  4. Hafainganam-pandaminana zava-dehibe satria tianay ny hamoaka fanovana haingana sy hahita ny vokatra. Ohatra, tsy te hanarina ny fiankinan-doha amin'ny tranomboky fiteny ianao isaky ny manangana fampiharana.
  5. Matetika avy amin'ny tahiry Git iray ilainao sary maro, izay azo voavaha amin'ny alàlan'ny andiana Dockerfiles (na dingana voatonona ao anaty rakitra iray) sy script Bash miaraka amin'ny fivorian'izy ireo.

Io no tendron'ny iceberg natrehin'ny rehetra. Saingy misy olana hafa, indrindra indrindra:

  1. Matetika eo amin'ny sehatry ny fivoriambe dia mila zavatra isika tendrombohitra (ohatra, cache ny vokatry ny baiko toy ny apt ao amin'ny lahatahiry antoko fahatelo).
  2. Tianay Ansible fa tsy manoratra amin'ny akorandriaka.
  3. Tianay manangana tsy misy Docker (Nahoana isika no mila milina virtoaly fanampiny izay ilaintsika ny manamboatra ny zava-drehetra amin'izany, nefa efa manana cluster Kubernetes izay ahafahantsika mitantana container?).
  4. Fivoriambe parallèle, izay azo takarina amin'ny fomba samihafa: baiko samihafa avy amin'ny Dockerfile (raha misy dingana maromaro ampiasaina), commits maromaro amin'ny tahiry mitovy, Dockerfiles maromaro.
  5. Fivoriambe nozaraina: Te-hanangona zavatra anaty pods izay "ephemeral" izahay satria manjavona ny cache-ny, izay midika fa mila tehirizina any amin'ny toerana mitokana.
  6. Farany, nomeko anarana ny faratampon'ny faniriana automatique: Tena tsara ny mandeha any amin'ny tahiry, manendry baiko ary maka sary efa vita, mivory miaraka amin'ny fahatakarana ny fomba sy ny tokony hatao. Na izany aza, izaho manokana dia tsy azoko antoka fa azo jerena amin'izany fomba izany ny nuance rehetra.

Ary ireto ny tetikasa:

  • moby/buildkit - mpanorina avy amin'ny Docker Inc (efa tafiditra amin'ny dikan-teny Docker ankehitriny), izay miezaka mamaha ireo olana rehetra ireo;
  • kaniko - mpanorina avy amin'ny Google mamela anao hanorina tsy misy Docker;
  • Buildpacks.io - Fiezahan'ny CNCF hanao ody mandeha ho azy ary, indrindra, vahaolana mahaliana miaraka amin'ny rebase ho an'ny sosona;
  • ary andiana fitaovana hafa, toy ny buildah, genuinetools/img...

...ary jereo hoe firy ny kintana ananany ao amin'ny GitHub. Izany hoe, amin’ny lafiny iray, docker build misy ary afaka manao zavatra, fa raha ny tena izy tsy voavaha tanteraka ny olana - porofon'izany ny fampivoarana mifanitsy amin'ireo mpanangom-bokatra, izay samy mamaha ny ampahany amin'ny olana.

Assembly in werf

Ka voatery izahay werf (teo aloha olo-malaza toy ny dapp) - Fampiasana loharano misokatra avy amin'ny orinasa Flant, izay efa nataonay nandritra ny taona maro. Nanomboka 5 taona lasa izay izany rehetra izany miaraka amin'ny script Bash izay nanatsara ny fivorian'ny Dockerfiles, ary nandritra ny 3 taona farany, ny fampandrosoana feno dia natao tao anatin'ny rafitry ny tetikasa iray miaraka amin'ny tahiry Git azy manokana. (voalohany amin'ny Ruby, ary avy eo nosoratana indray Mandehana, ary novana anarana). Inona avy ireo olan'ny fivoriambe voavaha amin'ny werf?

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Ny olana alokaloka manga dia efa nampiharina, ny fananganana parallèle dia natao tao anatin'ny mpampiantrano iray ihany, ary ny olana nasongadina tamin'ny loko mavo dia nokasaina ho vita amin'ny faran'ny fahavaratra.

Dingan'ny famoahana amin'ny rejisitra (famoahana)

Nitelefaonina izahay docker push... - inona no mety ho sarotra amin'ny fampidirana sary ao amin'ny rejisitra? Ary avy eo dia mipoitra ny fanontaniana: "Inona no marika tokony hapetraka eo amin'ny sary?" Mipoitra izany noho ny antony ananantsika Gitflow (na tetika hafa Git) sy Kubernetes, ary ny indostria dia miezaka miantoka fa izay mitranga ao amin'ny Kubernetes dia manaraka izay mitranga ao amin'ny Git. Raha ny marina, ny Git no hany loharanon'ny fahamarinana.

Inona no sarotra amin'izany? Ataovy azo antoka ny reproducibility: avy amin'ny commit ao amin'ny Git, izay tsy miova amin'ny natiora (tsy miova), mankany amin'ny sary Docker, izay tokony hotehirizina.

Zava-dehibe amintsika koa izany mamaritra ny niaviany, satria tiantsika ny hahatakatra hoe avy amin'ny inona no nanorenana ny fampiharana mandeha ao amin'ny Kubernetes (dia afaka manao diffs sy zavatra mitovy amin'izany).

Tetikady fametahana

Ny voalohany dia tsotra andro git. Manana rejisitra misy sary voamarika ho 1.0. Manana sehatra sy famokarana ny Kubernetes, izay nampidirana ity sary ity. Ao amin'ny Git dia manao commit izahay ary amin'ny fotoana iray dia misy marika 2.0. Angoninay araka ny toromarika avy amin'ny tahiry ary apetraka ao amin'ny rejisitra miaraka amin'ny marika 2.0. Atsofohy amin'ny sehatra izany ary, raha tsara ny zava-drehetra, dia mankany amin'ny famokarana.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Ny olana amin'ity fomba fiasa ity dia ny fametrahana voalohany ny marika, ary avy eo notsapaina sy nanakodia azy. Nahoana? Voalohany, tsy mitombina tsotra izao: mamoaka rindrambaiko izay mbola tsy nosedrainay akory izahay (tsy afaka manao an'izany izahay, satria mba hanamarinana dia mila mametraka marika). Faharoa, ity lalana ity dia tsy mifanaraka amin'ny Gitflow.

Ny safidy faharoa - git commit + tag. Ny sampana master dia manana marika 1.0; ho azy ao amin'ny rejisitra - sary napetraka amin'ny famokarana. Ho fanampin'izany, ny kluster Kubernetes dia manana fijery mialoha sy manara-penitra. Manaraka izany dia manaraka ny Gitflow: ao amin'ny sampana lehibe ho an'ny fampandrosoana (develop) manao endri-javatra vaovao izahay, ka miteraka commit amin'ny famantarana #c1. Angoninay izany ary avoakanay ao amin'ny rejisitra amin'ny fampiasana ity identifier ity (#c1). Miaraka amin'io identifier io ihany no hivoaka hojerentsika. Manao toy izany koa izahay amin'ny fanoloran-tena #c2 и #c3.

Rehefa tsapanay fa ampy ny endri-javatra, dia manomboka mampitombina ny zava-drehetra izahay. Mamorona sampana ao amin'ny Git release_1.1 (amin'ny base #c3 avy amin'ny develop). Tsy ilaina ny manangona ity famoahana ity, satria ... izany dia natao tamin'ny dingana teo aloha. Noho izany, dia azonay atao ny manodina azy fotsiny amin'ny fampisehoana. Manamboatra bibikely izahay #c4 ary toy izany koa ny mandeha amin'ny fandaharana. Etsy andanin’izay dia mandeha ny fampandrosoana develop, izay nalaina tsindraindray ny fiovana release_1.1. Amin'ny fotoana iray dia mahazo fanoloran-tena isika ary ampidirina amin'ny fampisehoana, izay faly (#c25).

Avy eo dia manambatra (miaraka amin'ny handroso haingana) ny sampana famoahana (release_1.1) amin'ny master. Nasianay tenifototra misy ny dikan-teny vaovao amin'ity commit ity (1.1). Fa ity sary ity dia efa voaangona ao amin'ny rejisitra, ka mba tsy hanangonana azy indray dia asiana marika faharoa amin'ny sary efa misy (izao dia misy marika ao amin'ny rejisitra. #c25 и 1.1). Aorian'izay dia avoakanay amin'ny famokarana izany.

Misy lesoka fa sary iray ihany no ampidirina amin'ny fampisehoana (#c25), ary amin'ny famokarana dia karazana hafa (1.1), saingy fantatsika fa "ara-batana" ireo dia sary mitovy avy amin'ny rejisitra.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Ny tena fatiantoka dia ny tsy fisian'ny fanohanana ny merge commits, mila manao haingana haingana ianao.

Afaka mandroso kokoa isika ary manao fika... Andeha hojerentsika ohatra iray amin'ny Dockerfile tsotra:

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

Andao hanangana rakitra iray avy amin'izany araka ity fitsipika manaraka ity:

  • SHA256 avy amin'ny famantarana ny sary ampiasaina (ruby:2.3 и nginx:alpine), izay fanamarinana ny ao anatiny;
  • ny ekipa rehetra (RUN, CMD sy ny sisa.);
  • SHA256 avy amin'ny rakitra nampiana.

... ary alaivo ny checksum (indray SHA256) amin'ny rakitra toy izany. izany sonia izay rehetra mamaritra ny votoatin'ny sary Docker.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Andao hiverina amin'ny kisary ary fa tsy manao sonia no hampiasainay, i.e. tag sary misy sonia.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Ankehitriny, rehefa ilaina, ohatra, ny manambatra ny fiovana avy amin'ny famotsorana mankany amin'ny tompony, dia afaka manao merge commit marina isika: hanana identifier hafa izy io, fa sonia iray ihany. Miaraka amin'io famantarana io ihany no havoakantsika ny sary ho amin'ny famokarana.

Ny fatiantoka dia izao dia tsy azo atao ny mamaritra hoe inona ny karazana fanoloran-tena natosiky ny famokarana - ny checksum dia miasa amin'ny lalana iray ihany. Ity olana ity dia voavaha amin'ny alàlan'ny sosona fanampiny misy metadata - holazaiko aminao bebe kokoa any aoriana.

Hiverina any amin'ny werf

Ao amin'ny werf dia lasa lavitra kokoa izahay ary miomana hanao fananganana mizara miaraka amin'ny cache izay tsy voatahiry amin'ny milina iray ... Noho izany, manangana sary Docker roa izahay, antsoinay izy ireo. sehatra и sary.

Ny werf Git repository dia mitahiry torolàlana manokana momba ny fananganana izay mamaritra ny dingana samihafa amin'ny fananganana (beforeInstall, hametraka, beforeSetup, hametraka). Manangona ny sary dingana voalohany miaraka amin'ny sonia voafaritra ho toy ny checksum ny dingana voalohany. Avy eo dia ampiana ny kaody loharano, ho an'ny sary amin'ny sehatra vaovao dia kajy ny checksum azy ... Miverina amin'ny dingana rehetra ireo hetsika ireo, vokatr'izany dia mahazo sary an-tsehatra. Avy eo dia manao ny sary farany isika, izay misy metadata momba ny niaviany ihany koa. Ary asiana marika amin'ny fomba samihafa ity sary ity (aty aoriana ny antsipiriany).

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Eritrereto hoe aorian'io dia misy commit vaovao miseho izay ny code application ihany no niova. Inona no hitranga? Ho an'ny fanovana kaody dia hisy patch iray hamboarina ary homanina sary dingana vaovao. Ny soniany dia hofaritana ho toy ny checksum ny sary an-tsehatra taloha sy ny patch vaovao. Hisy sary farany vaovao hiforona amin'ity sary ity. Ny fihetsika mitovy amin'izany dia hitranga amin'ny fiovana amin'ny dingana hafa.

Noho izany, ny sary an-tsehatra dia cache azo tehirizina mizara, ary ny sary efa noforonina avy aminy dia ampidirina ao amin'ny Docker Registry.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Fanadiovana ny rejisitra

Tsy miresaka momba ny famafana ireo sosona mijanona mihantona aorian'ny marika voafafa isika - endri-javatra mahazatra amin'ny Docker Registry mihitsy ity. Miresaka toe-javatra iray izay miangona ny marika Docker marobe ary takatsika fa tsy mila ny sasany amin'izy ireo intsony izahay, fa maka toerana (ary/na mandoa izany izahay).

Inona avy ireo paikady fanadiovana?

  1. Tsy afaka manao na inona na inona fotsiny ianao aza manadio. Indraindray dia mora kokoa ny mandoa vola kely ho an'ny habaka fanampiny noho ny mamaha ireo marika marobe. Saingy amin'ny lafiny iray ihany no miasa izany.
  2. Famerenana tanteraka. Raha mamafa ny sary rehetra ianao ary manangana ny ankehitriny ao amin'ny rafitra CI, dia mety hisy olana. Raha averina amin'ny famokarana ilay kaontenera, dia hisy sary vaovao hapetraka ho azy - izay tsy mbola nosedrain'olona. Mamono ny hevitra momba ny fotodrafitrasa tsy azo ovaina izany.
  3. Blue-maitso. Nanomboka nitombo ny rejisitra iray - mampiakatra sary amin'ny iray hafa izahay. Ny olana mitovy amin'ny tamin'ny fomba teo aloha: amin'ny fotoana inona no ahafahanao manadio ny rejisitra izay efa nanomboka nihotsaka?
  4. Amin'ny fotoana. Fafao ny sary rehetra efa mihoatra ny 1 volana? Fa hisy tokoa ny tolotra tsy nohavaozina nandritra ny iray volana...
  5. tanana mamaritra izay efa azo fafana.

Misy safidy roa tena azo ampiasaina: tsy manadio na mitambatra manga-maitso + tanana. Amin'ity tranga farany ity dia miresaka momba izao manaraka izao isika: rehefa takatrao fa tonga ny fotoana hanadiovana ny rejisitra, dia mamorona vaovao ianao ary ampio ny sary vaovao rehetra mandritra ny iray volana, ohatra. Ary rehefa afaka iray volana, jereo hoe iza amin'ireo pod ao amin'ny Kubernetes no mbola mampiasa ny rejisitra taloha, ary afindrao any amin'ny rejisitra vaovao ihany koa.

Inona no nahatongavantsika werf? Manangona izahay:

  1. Loha Git: ny marika rehetra, ny sampana rehetra - amin'ny fiheverana fa mila izay rehetra voamarika ao amin'ny Git amin'ny sary isika (ary raha tsy izany dia mila mamafa azy ao amin'ny Git mihitsy isika);
  2. ny pods rehetra izay arotsaka ao amin'ny Kubernetes amin'izao fotoana izao;
  3. ReplicaSets taloha (izay navoaka vao haingana), ary mikasa ny hijery ny famoahana Helm ihany koa izahay ary hisafidy ireo sary farany ao.

... ary manaova lisitra fotsy avy amin'ity andiany ity - lisitry ny sary tsy hofafanay. Manadio ny zavatra hafa rehetra izahay, avy eo dia mahita sary an-tsehatra kamboty izahay ary mamafa azy ireo koa.

Deploy stage

Fanambarana azo itokisana

Ny teboka voalohany tiako hisarihana ny saina amin'ny fametrahana dia ny famoahana ny fanavaozana loharanon-karena, nambara tamin'ny fanambarana. Ny antontan-taratasy YAML tany am-boalohany mamaritra ny loharanon-karena Kubernetes dia tsy mitovy amin'ny vokatra tena mandeha ao amin'ny cluster. Satria manampy amin'ny fanamboarana ny Kubernetes:

  1. identifiers;
  2. fampahalalana momba ny serivisy;
  3. sanda default maro;
  4. fizarana misy sata ankehitriny;
  5. fanovana natao ho ampahany amin'ny webhook fidirana;
  6. vokatry ny asan'ny mpanara-maso isan-karazany (sy ny scheduler).

Noho izany, rehefa miseho ny fanamafisana loharano vaovao (vaovao), tsy azontsika atao ny maka sy mametaka ny fanovana ankehitriny, "miaina" miaraka aminy (velona). Mba hanaovana izany dia tsy maintsy mampitaha isika vaovao miaraka amin'ny fanamafisana farany nampiharina (nampiharina farany) ary mihodidina velona nahazo patch.

Io fomba fiasa io no antsoina hoe 2-lalana mitambatra. Ampiasaina, ohatra, ao amin'ny Helm.

Misy koa 3-lalana mitambatra, izay tsy mitovy amin'izany:

  • fampitahana nampiharina farany и vaovao, mijery izay voafafa isika;
  • fampitahana vaovao и velona, mijery izay nampiana na novana isika;
  • ny patch namintina dia ampiharina amin'ny velona.

Mametraka fampiharana 1000+ miaraka amin'i Helm izahay, ka tena miaina miaraka amin'ny fampitambatra 2-lalana izahay. Na izany aza, misy olana maromaro novahanay tamin'ny patchy, izay manampy an'i Helm hiasa ara-dalàna.

Sata famoahana tena izy

Aorian'ny famoronana rafitra vaovao ho an'ny Kubernetes mifototra amin'ny hetsika manaraka ny rafitra CI, dia alefany hampiasaina izany (ampiharo) amin'ny cluster - mampiasa Helm na kubectl apply. Manaraka izany dia mitranga ny fampifangaroana N-way efa voalaza, izay mamaly amin'ny fomba tsara ny rafitra CI ny Kubernetes API, ary amin'ny mpampiasa azy.

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Na izany aza, misy olana goavana: na izany aza Ny fampiharana mahomby dia tsy midika hoe fivoahana mahomby. Raha takatry ny Kubernetes ny fanovana tokony hampiharina sy hampihatra izany, dia mbola tsy fantatsika izay ho vokany. Ohatra, mety hahomby ny fanavaozana sy famerenana ny pods ao amin'ny frontend, fa tsy amin'ny backend, ary hahazo dikan-teny samihafa amin'ny sary fampiharana mandeha.

Mba hanaovana ny zava-drehetra araka ny tokony ho izy, ity tetika ity dia mitaky rohy fanampiny - mpanara-maso manokana izay hahazo fampahalalana momba ny sata avy amin'ny API Kubernetes ary hampita izany amin'ny famakafakana bebe kokoa momba ny tena zava-misy. Namorona tranomboky Open Source ao amin'ny Go - cubedog (jereo ny fanambarana eto), izay mamaha ity olana ity ary natsangana ho werf.

Ny fitondran-tenan'ity mpanara-dia amin'ny ambaratonga werf ity dia amboarina amin'ny fampiasana annotation izay apetraka amin'ny Deployments na StatefulSets. Fanazavana lehibe - fail-mode - mahazo ireto hevitra manaraka ireto:

  • IgnoreAndContinueDeployProcess - tsy miraharaha ny olana amin'ny famoahana ity singa ity izahay ary manohy ny fametrahana;
  • FailWholeDeployProcessImmediately - ny hadisoana amin'ity singa ity dia manakana ny fizotry ny fametrahana;
  • HopeUntilEndOfDeployProcess - manantena izahay fa hiasa io singa io amin'ny faran'ny fametrahana.

Ohatra, ity fitambarana loharanon-karena sy soatoavina fanamarihana ity fail-mode:

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Rehefa sambany isika no mametraka dia mety mbola tsy vonona ny angon-drakitra (MongoDB) - Tsy hahomby ny fandefasana. Saingy afaka miandry ny fotoana hanombohan'izany ianao, ary mbola hisy ny fametrahana.

Misy fanamarihana roa hafa momba ny kubedog ao amin'ny werf:

  • failures-allowed-per-replica - ny isan'ny fianjerana navela ho an'ny kopia tsirairay;
  • show-logs-until - mandrindra ny fotoana mandra-panehoan'ny werf (amin'ny stdout) diary avy amin'ny pods rehetra navoaka. Ny default dia PodIsReady (mba tsy hiraharaha ireo hafatra izay mety tsy tiantsika rehefa manomboka tonga any amin'ny pod ny fifamoivoizana), fa manan-kery ihany koa ny soatoavina: ControllerIsReady и EndOfDeploy.

Inona koa no tadiavintsika amin'ny fametrahana?

Ho fanampin'ireo teboka roa voalaza etsy ambony, dia maniry izahay:

  • to see hazo - ary ny ilaina ihany, fa tsy ny zava-drehetra misesy;
  • manara-maso fandrosoana, satria raha mihantona "mangina" mandritra ny minitra maromaro ny asa, dia zava-dehibe ny mahatakatra ny zava-mitranga any;
  • manana famerenana mandeha ho azy raha misy zavatra tsy nety (ary noho izany dia zava-dehibe ny mahafantatra ny tena toetry ny fametrahana). Ny famoahana dia tsy maintsy atao atomika: na mandeha hatramin'ny farany, na miverina amin'ny toerany teo aloha ny zava-drehetra.

vokatra

Ho anay amin'ny maha-orinasa azy, mba hampiharana ireo nuance voalaza rehetra amin'ny dingana samihafa amin'ny fanaterana (manorina, mamoaka, manaparitaka), ny rafitra sy ny fitaovana CI dia ampy. werf.

Raha tokony hamaranana ny famaranana:

werf - fitaovanay ho an'ny CI / CD ao amin'ny Kubernetes (fomba fijery sy tatitra an-tsary)

Miaraka amin'ny fanampian'ny werf, dia nanao fandrosoana tsara izahay tamin'ny famahana olana maro ho an'ny injeniera DevOps ary ho faly raha ny vondrom-piarahamonina midadasika dia nanandrana ity fitaovana ity amin'ny asa. Ho mora kokoa ny hahazoana vokatra tsara miaraka.

Horonantsary sy sary mihetsika

Lahatsary avy amin'ny fampisehoana (~47 minitra):

Fampisehoana ny tatitra:

Sal

Tatitra hafa momba ny Kubernetes ao amin'ny bilaogy:

Source: www.habr.com

Add a comment