werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

27 ta' Mejju fis-sala prinċipali tal-konferenza DevOpsConf 2019, li saret bħala parti mill-festival RIT++ 2019, bħala parti mit-taqsima "Konsenja Kontinwa", ingħata rapport "werf - għodda tagħna għal CI/CD fil-Kubernetes". Jitkellem dwar dawk problemi u sfidi li kulħadd jiffaċċja meta jiġi skjerat fuq Kubernetes, kif ukoll dwar sfumaturi li jistgħu ma jkunux notevoli immedjatament. Meta janalizzaw is-soluzzjonijiet possibbli, nuru kif dan huwa implimentat f'għodda Open Source werf.

Mill-preżentazzjoni, l-utilità tagħna (li qabel kienet magħrufa bħala dapp) laħqet tragward storiku ta 1000 stilla fuq GitHub — nittamaw li l-komunità dejjem tikber ta’ utenti tagħmilha aktar faċli għal ħafna inġiniera DevOps.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Allura, ejja nintroduċu vidjo tar-rapport (~ 47 minuta, ħafna aktar informattiv mill-artiklu) u l-estratt prinċipali minnu f'forma ta 'test. Mur!

Twassil tal-kodiċi lil Kubernetes

It-taħdita mhux se tibqa' dwar werf, iżda dwar CI/CD f'Kubernetes, li timplika li s-softwer tagħna huwa ppakkjat f'kontenituri Docker (Tkellimt dwar dan fi Rapport 2016), u K8s se jintużaw biex imexxuh fil-produzzjoni (aktar dwar dan fi Sena 2017).

Kif tidher il-kunsinna f'Kubernetes?

  • Hemm repożitorju Git bil-kodiċi u l-istruzzjonijiet għall-bini tiegħu. L-applikazzjoni hija mibnija f'immaġni Docker u ppubblikata fir-Reġistru Docker.
  • L-istess repożitorju fih ukoll struzzjonijiet dwar kif tiskjera u tħaddem l-applikazzjoni. Fl-istadju tal-iskjerament, dawn l-istruzzjonijiet jintbagħtu lil Kubernetes, li jirċievi l-immaġni mixtieqa mir-reġistru u jniediha.
  • Barra minn hekk, normalment ikun hemm testijiet. Xi wħud minn dawn jistgħu jsiru meta tiġi ppubblikata immaġini. Tista 'wkoll (ssegwi l-istess istruzzjonijiet) tiskjera kopja tal-applikazzjoni (fi spazju tal-isem K8s separat jew cluster separat) u tmexxi testijiet hemmhekk.
  • Fl-aħħarnett, għandek bżonn sistema CI li tirċievi avvenimenti minn Git (jew klikks fuq buttuna) u ssejjaħ l-istadji kollha magħżula: tibni, tippubblika, skjerament, ittestja.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Hemm ftit noti importanti hawn:

  1. Għax għandna infrastruttura immutabbli (infrastruttura immutabbli), l-immaġni tal-applikazzjoni li tintuża fl-istadji kollha (stadju, produzzjoni, eċċ.), għandu jkun hemm wieħed. Tkellimt dwar dan f'aktar dettall u b'eżempji. hawn.
  2. Minħabba li nsegwu l-approċċ tal-infrastruttura bħala kodiċi (IaC), il-kodiċi tal-applikazzjoni, l-istruzzjonijiet għall-assemblaġġ u t-tnedija għandu jkun eżattament f'repożitorju wieħed. Għal aktar informazzjoni dwar dan, ara l-istess rapport.
  3. Katina tal-kunsinna (kunsinna) normalment narawha hekk: l-applikazzjoni ġiet immuntata, ittestjata, rilaxxata (stadju tar-rilaxx) u dak hu - il-kunsinna saret. Imma fir-realtà, l-utent jieħu dak li ħarġet, ebda imbagħad meta kkunsinnatu lill-produzzjoni, u meta kien kapaċi jmur hemm u din il-produzzjoni ħadmet. Allura nemmen li l-katina tal-kunsinna tispiċċa fl-istadju operattiv biss (ġiri), jew b'mod aktar preċiż, anke fil-mument meta l-kodiċi tneħħa mill-produzzjoni (bdilha b'waħda ġdida).

Ejja nerġgħu lura għall-iskema ta 'kunsinna ta' hawn fuq f'Kubernetes: ġiet ivvintata mhux biss minna, iżda litteralment minn kull min ittratta din il-problema. Fil-fatt, dan il-mudell issa jissejjaħ GitOps (tista 'taqra aktar dwar it-terminu u l-ideat warajh hawn). Ejja nħarsu lejn l-istadji tal-iskema.

Ibni stadju

Jidher li tista 'titkellem dwar il-bini ta' immaġini Docker fl-2019, meta kulħadd ikun jaf kif jikteb Dockerfiles u jmexxi docker build?.. Hawn huma l-sfumaturi li nixtieq noqgħod attent għalihom:

  1. Piż tal-immaġni kwistjonijiet, hekk uża multi-stadjibiex tħalli fl-immaġni biss l-applikazzjoni li hija verament meħtieġa għall-operazzjoni.
  2. Numru ta' saffi għandhom jiġu minimizzati billi jingħaqdu ktajjen ta RUN-kmandi skond it-tifsira.
  3. Madankollu, dan iżid il-problemi debugging, għax meta l-assemblaġġ jiġġarraf, għandek issib il-kmand it-tajjeb mill-katina li kkawża l-problema.
  4. Veloċità tal-assemblaġġ importanti għax irridu nwasslu malajr il-bidliet u naraw ir-riżultati. Pereżempju, ma tridx tibni mill-ġdid id-dipendenzi fil-libreriji tal-lingwi kull darba li tibni applikazzjoni.
  5. Ħafna drabi minn repożitorju Git wieħed li għandek bżonn ħafna stampi, li jistgħu jiġu solvuti minn sett ta 'Dockerfiles (jew stadji msemmija f'fajl wieħed) u b'kitba Bash bl-assemblaġġ sekwenzjali tagħhom.

Din kienet biss il-ponta tal-iceberg li kulħadd jiffaċċja. Iżda hemm problemi oħra, b'mod partikolari:

  1. Ħafna drabi fl-istadju tal-assemblaġġ għandna bżonn xi ħaġa impunjazzjoni (pereżempju, daħħal fil-cache r-riżultat ta 'kmand bħal apt f'direttorju ta' parti terza).
  2. Irridu Ansible flok tikteb fil-qoxra.
  3. Irridu tibni mingħajr Docker (għaliex għandna bżonn magna virtwali addizzjonali li fiha għandna bżonn nikkonfiguraw kollox għal dan, meta diġà għandna cluster Kubernetes li fih nistgħu nħaddmu kontenituri?).
  4. Assemblaġġ parallel, li jistgħu jinftiehmu b'modi differenti: kmandi differenti mid-Dockerfile (jekk jintuża f'diversi stadji), diversi kommessi tal-istess repożitorju, diversi Dockerfiles.
  5. Assemblaġġ imqassam: Irridu niġbru affarijiet f'imżiewed li huma "effimeri" għaliex il-cache tagħhom tisparixxi, li jfisser li jeħtieġ li jinħażen x'imkien separatament.
  6. Fl-aħħarnett, semmejt il-qofol tax-xewqat awtomaġika: Ikun ideali li tmur fir-repożitorju, ittajpja xi kmand u tikseb immaġni lesta, immuntata b'fehim ta 'kif u x'għandek tagħmel b'mod korrett. Madankollu, jien personalment m'inix ċert li l-sfumaturi kollha jistgħu jiġu previsti b'dan il-mod.

U hawn huma l-proġetti:

  • moby/buildkit — bennej minn Docker Inc (diġà integrat fil-verżjonijiet attwali ta’ Docker), li qed jipprova jsolvi dawn il-problemi kollha;
  • kaniko — bennej minn Google li jippermettilek tibni mingħajr Docker;
  • Buildpacks.io — It-tentattiv tas-CNCF li jagħmel maġija awtomatika u, b’mod partikolari, soluzzjoni interessanti b’rebase għas-saffi;
  • u mazz ta 'utilitajiet oħra, bħal buildah, genuinetools/img...

...u ara kemm għandhom stilel fuq GitHub. Jiġifieri, minn naħa waħda, docker build teżisti u tista’ tagħmel xi ħaġa, imma fir-realtà il-kwistjoni mhix solvuta kompletament - prova ta 'dan hija l-iżvilupp parallel ta' kolletturi alternattivi, li kull wieħed minnhom isolvi xi parti mill-problemi.

Assemblea fil-werf

Allura sirna werf (qabel famuż bħal dapp) — Utilità open source mill-kumpanija Flant, li ilna nagħmlu għal ħafna snin. Kollox beda 5 snin ilu bi skripts Bash li ottimizzaw l-assemblaġġ ta 'Dockerfiles, u għal dawn l-aħħar 3 snin żvilupp sħiħ twettaq fil-qafas ta' proġett wieħed bir-repożitorju Git tiegħu stess. (l-ewwel f'Ruby, u mbagħad miktuba mill-ġdid to Go, u fl-istess ħin isem ġdid). Liema kwistjonijiet ta 'assemblaġġ huma solvuti fil-werf?

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Il-problemi sfumati bil-blu diġà ġew implimentati, il-bini parallel sar fl-istess ospitanti, u l-kwistjonijiet enfasizzati bl-isfar huma ppjanati li jitlestew sal-aħħar tas-sajf.

Stadju tal-pubblikazzjoni fir-reġistru (pubblikazzjoni)

Ċempelna docker push... - x'jista' jkun diffiċli dwar it-tlugħ ta' immaġni fir-reġistru? U mbagħad tqum il-mistoqsija: "X'tikketta għandi npoġġi fuq l-immaġni?" Tqum għar-raġuni li għandna Gitflow (jew strateġija Git oħra) u Kubernetes, u l-industrija qed tipprova tiżgura li dak li jiġri f'Kubernetes isegwi dak li jiġri f'Git. Wara kollox, Git huwa l-uniku sors tagħna ta 'verità.

X'hemm daqshekk diffiċli dwar dan? Tiżgura r-riproduċibbiltà: minn impenn f'Git, li huwa immutabbli fin-natura (immutabbli), għal immaġni Docker, li għandha tinżamm l-istess.

Huwa importanti wkoll għalina jiddeterminaw l-oriġini, għax irridu nifhmu minn liema impenn inbniet l-applikazzjoni li taħdem f'Kubernetes (imbagħad nistgħu nagħmlu diffs u affarijiet simili).

Strateġiji ta 'Tagging

L-ewwel waħda hija sempliċi git tag. Għandna reġistru b'immaġni mmarkata bħala 1.0. Kubernetes għandu l-istadju u l-produzzjoni, fejn tittella’ din l-immaġni. F'Git nagħmlu l-commits u f'xi punt nagħmlu tag 2.0. Aħna niġbruha skont l-istruzzjonijiet mir-repożitorju u poġġiha fir-reġistru bit-tikketta 2.0. Niftakruh fuq il-palk u, jekk kollox ikun tajjeb, imbagħad għall-produzzjoni.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Il-problema b'dan l-approċċ hija li l-ewwel poġġejna t-tikketta, u mbagħad biss ittestjawha u rromblawha. Għaliex? L-ewwelnett, huwa sempliċiment illoġiku: qed noħorġu verżjoni ta 'softwer li għadna lanqas ittestjaw (ma nistgħux nagħmlu mod ieħor, għax biex niċċekkjaw, irridu npoġġu tikketta). It-tieni nett, din it-triq mhix kompatibbli ma 'Gitflow.

It-tieni għażla - git commit + tag. Il-fergħa kaptan għandha tikketta 1.0; għaliha fir-reġistru - immaġni skjerata għall-produzzjoni. Barra minn hekk, il-cluster Kubernetes għandu kontorni ta 'preview u staging. Imbagħad nsegwu Gitflow: fil-fergħa ewlenija għall-iżvilupp (develop) nagħmlu karatteristiċi ġodda, li jirriżultaw f'impenn bl-identifikatur #c1. Aħna niġbruha u nippubblikawha fir-reġistru billi tuża dan l-identifikatur (#c1). Bl-istess identifikatur aħna roll out għall-preview. L-istess nagħmlu bil-commits #c2 и #c3.

Meta indunajna li hemm biżżejjed karatteristiċi, nibdew nistabbilizzaw kollox. Oħloq fergħa f'Git release_1.1 (fuq il-bażi #c3 ta ' develop). M'hemmx għalfejn tiġbor dan ir-rilaxx, għax... dan sar fil-pass preċedenti. Għalhekk, nistgħu sempliċiment inxerrduh għall-istadji. Aħna nirranġaw bugs fi #c4 u bl-istess mod roll out għall-istadji. Fl-istess ħin, l-iżvilupp għaddej fi develop, fejn it-tibdiliet jittieħdu perjodikament minn release_1.1. F'xi punt, inġibu impenn miġbur u mtella' fuq l-istadju, li aħna kuntenti bih (#c25).

Imbagħad ningħaqdu (b'fast-forward) il-fergħa tar-rilaxx (release_1.1) fil-kaptan. Poġġejna tikketta bil-verżjoni l-ġdida fuq dan il-kommit (1.1). Iżda din l-immaġni hija diġà miġbura fir-reġistru, għalhekk biex ma terġax tiġborha, aħna sempliċement inżidu t-tieni tikketta mal-immaġni eżistenti (issa għandha tikketti fir-reġistru #c25 и 1.1). Wara dan, aħna roll out għall-produzzjoni.

Hemm żvantaġġ li immaġni waħda biss tittella' fuq il-post (#c25), u fil-produzzjoni huwa tip differenti (1.1), iżda nafu li "fiżikament" dawn huma l-istess immaġni mir-reġistru.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

L-iżvantaġġ reali huwa li m'hemm l-ebda appoġġ għall-merge commits, trid tagħmel fast-forward.

Nistgħu mmorru aktar u nagħmlu trick... Ejja nħarsu lejn eżempju ta 'Dockerfile sempliċi:

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

Ejja nibnu fajl minnha skond il-prinċipju li ġej:

  • SHA256 mill-identifikaturi tal-immaġini użati (ruby:2.3 и nginx:alpine), li huma checksums tal-kontenut tagħhom;
  • it-timijiet kollha (RUN, CMD u l-bqija.);
  • SHA256 minn fajls li ġew miżjuda.

... u ħu ċ-checksum (għal darb'oħra SHA256) minn tali fajl. Dan firma dak kollu li jiddefinixxi l-kontenut tal-immaġni Docker.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Ejja mmorru lura għad-dijagramma u minflok commits se nużaw firem bħal dawn, i.e. stampi tag b'firem.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Issa, meta jkun meħtieġ, pereżempju, li jingħaqdu bidliet minn rilaxx għal kaptan, nistgħu nagħmlu impenn reali ta 'merge: se jkollu identifikatur differenti, iżda l-istess firma. Bl-istess identifikatur se nirrollaw l-immaġni għall-produzzjoni.

L-iżvantaġġ huwa li issa mhux se jkun possibbli li jiġi ddeterminat x'tip ta 'impenn ġie mbuttat għall-produzzjoni - iċ-checksums jaħdmu biss f'direzzjoni waħda. Din il-problema tissolva b'saff addizzjonali b'metadata - jien ngħidlek aktar aktar tard.

Tagging fil-werf

F’werf morna aktar ‘il quddiem u qed nippreparaw biex nagħmlu distributed build b’cache li mhux maħżun fuq magna waħda... Allura, qed nibnu żewġ tipi ta’ immaġini Docker, insejħulhom istadju и immaġni.

Ir-repożitorju werf Git jaħżen struzzjonijiet speċifiċi għall-bini li jiddeskrivu l-istadji differenti tal-bini (qabelInstalla, jinstallaw, beforeSetup, setup). Aħna niġbru l-immaġni tal-ewwel stadju b'firma definita bħala ċ-checksum tal-ewwel passi. Imbagħad inżidu l-kodiċi tas-sors, għall-immaġni tal-istadju l-ġdida nikkalkulaw is-summa ta 'kontroll tagħha... Dawn l-operazzjonijiet huma ripetuti għall-istadji kollha, li b'riżultat tagħhom niksbu sett ta' stampi tal-istadju. Imbagħad nagħmlu l-immaġni finali, li fiha wkoll metadata dwar l-oriġini tagħha. U aħna tikketta din l-immaġni b'modi differenti (dettalji aktar tard).

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Ejja ngħidu li wara dan jidher impenn ġdid li fih inbidel biss il-kodiċi tal-applikazzjoni. X'se jiġri? Għal bidliet fil-kodiċi, tinħoloq garża u se titħejja immaġni tal-istadju ġdida. Il-firma tiegħu se tiġi determinata bħala l-checksum tal-immaġni tal-istadju l-antika u l-garża l-ġdida. Se tiġi ffurmata immaġni finali ġdida minn din l-immaġni. Imġieba simili se sseħħ b'bidliet fi stadji oħra.

Għalhekk, l-immaġini tal-istadju huma cache li jistgħu jinħażnu b'mod distribwit, u l-immaġini diġà maħluqa minnha jittellgħu fir-Reġistru Docker.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Tindif tar-reġistru

Mhux qed nitkellmu dwar it-tħassir ta 'saffi li baqgħu mdendlin wara tikketti mħassra - din hija karatteristika standard tar-Reġistru Docker innifsu. Qed nitkellmu dwar sitwazzjoni meta jakkumulaw ħafna tags Docker u nifhmu li m'għadniex bżonn xi wħud minnhom, iżda jieħdu spazju (u/jew inħallsu għaliha).

X'inhuma l-istrateġiji tat-tindif?

  1. Tista 'sempliċement tagħmel xejn tnaddafx. Xi drabi huwa verament aktar faċli li tħallas ftit għal spazju żejjed milli tħoll taħbil kbir ta 'tikketti. Iżda dan jaħdem biss sa ċertu punt.
  2. Reset sħiħ. Jekk tħassar l-immaġini kollha u tibni mill-ġdid dawk attwali biss fis-sistema CI, tista 'tqum problema. Jekk il-kontenitur jerġa 'jibda fil-produzzjoni, immaġni ġdida titgħabba għalih - waħda li għadha ma ġiet ittestjata minn ħadd. Dan joqtol l-idea ta 'infrastruttura immutabbli.
  3. Blu-aħdar. Reġistru wieħed beda jfur - aħna ntellgħu immaġini għal ieħor. L-istess problema bħal fil-metodu preċedenti: f'liema punt tista 'tikklerja r-reġistru li beda jfur?
  4. Biż-żmien. Tħassar l-immaġini kollha ta' aktar minn xahar? Iżda żgur li se jkun hemm servizz li ilu xahar ma ġiex aġġornat...
  5. Manwalment tiddetermina dak li diġà jista' jitħassar.

Hemm żewġ għażliet tassew vijabbli: ma tnaddafx jew taħlita ta 'blu-aħdar + manwalment. Fl-aħħar każ, qed nitkellmu dwar dan li ġej: meta tifhem li wasal iż-żmien li tnaddaf ir-reġistru, inti toħloq waħda ġdida u żżid l-immaġini ġodda kollha magħha matul, pereżempju, xahar. U wara xahar, ara liema miżwed fil-Kubernetes għadhom qed jużaw ir-reġistru l-antik, u ttrasferihom ukoll għar-reġistru l-ġdid.

Għal xiex wasalna werf? Aħna niġbru:

  1. Kap Git: it-tikketti kollha, il-fergħat kollha - jekk wieħed jassumi li għandna bżonn dak kollu li huwa mmarkat f'Git fl-immaġini (u jekk le, allura għandna bżonn inħassruh f'Git innifsu);
  2. il-miżwed kollha li bħalissa huma ppumpjati lejn Kubernetes;
  3. ReplicaSets qodma (dak li ġie rilaxxat reċentement), u qed nippjanaw ukoll li niskennjaw ir-rilaxxi ta' Helm u nagħżlu l-aħħar immaġini hemmhekk.

... u agħmel whitelist minn dan is-sett - lista ta’ immaġini li mhux se nħassru. Aħna naddaf kull ħaġa oħra, u wara nsibu stampi tal-palk orfni u nħassruhom ukoll.

Skjerament stadju

Dikjarazzjoni affidabbli

L-ewwel punt li nixtieq niġbed l-attenzjoni għalih fl-iskjerament huwa t-tnedija tal-konfigurazzjoni aġġornata tar-riżorsi, iddikjarata b'mod dikjarattiv. Id-dokument oriġinali YAML li jiddeskrivi r-riżorsi Kubernetes huwa dejjem differenti ħafna mir-riżultat li attwalment qed jaħdem fil-cluster. Minħabba li Kubernetes iżid mal-konfigurazzjoni:

  1. identifikaturi;
  2. informazzjoni dwar is-servizz;
  3. ħafna valuri awtomatiċi;
  4. sezzjoni bi status attwali;
  5. bidliet li saru bħala parti mill-webhook tad-dħul;
  6. ir-riżultat tax-xogħol ta 'kontrolluri varji (u l-iskedar).

Għalhekk, meta tidher konfigurazzjoni ġdida tar-riżorsi (ġdid), ma nistgħux sempliċement nieħdu u nikteb fuqu l-konfigurazzjoni attwali, "live" magħha (jgħixu). Biex nagħmlu dan ikollna nqabblu ġdid bl-aħħar konfigurazzjoni applikata (l-aħħar applikati) u irrombla fuq jgħixu garża riċevuta.

Dan l-approċċ jissejjaħ 2-way jingħaqdu. Jintuża, pereżempju, f'Telmu.

Hemm ukoll 3-way jingħaqdu, li hija differenti f'dak:

  • tqabbil l-aħħar applikati и ġdid, inħarsu lejn dak li tħassar;
  • tqabbil ġdid и jgħixu, inħarsu lejn dak li ġie miżjud jew mibdul;
  • il-garża miġbura hija applikata għaliha jgħixu.

Aħna niskjeraw 1000+ applikazzjoni ma Helm, għalhekk aħna fil-fatt ngħixu b'għaqda 2-way. Madankollu, għandha għadd ta' problemi li solvejna bl-irqajja' tagħna, li jgħinu lil Helm jaħdem b'mod normali.

Status tat-tnedija reali

Wara li s-sistema CI tagħna tiġġenera konfigurazzjoni ġdida għal Kubernetes ibbażata fuq l-avveniment li jmiss, tittrażmettiha għall-użu (applika) għal cluster - bl-użu ta' Helm jew kubectl apply. Sussegwentement, isseħħ l-għaqda N-way diġà deskritta, li għaliha l-API Kubernetes tirrispondi b'mod approvat għas-sistema CI, u dik għall-utent tagħha.

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Madankollu, hemm problema kbira: wara kollox applikazzjoni b'suċċess ma tfissirx tnedija b'suċċess. Jekk Kubernetes jifhem liema bidliet jeħtieġ li jiġu applikati u japplikah, għadna ma nafux x'se jkun ir-riżultat. Pereżempju, l-aġġornament u l-istartjar mill-ġdid tal-miżwed fil-frontend jista 'jkun ta' suċċess, iżda mhux fil-backend, u se nġibu verżjonijiet differenti tal-immaġini tal-applikazzjoni li qed taħdem.

Biex tagħmel kollox b'mod korrett, din l-iskema teħtieġ link addizzjonali - tracker speċjali li jirċievi informazzjoni dwar l-istatus mill-API Kubernetes u jittrasmettiha għal aktar analiżi tal-istat reali tal-affarijiet. Ħloqna librerija Open Source f'Go - kubedog (ara t-tħabbira tiegħu hawn), li ssolvi din il-problema u hija mibnija fis-werf.

L-imġieba ta 'dan it-tracker fil-livell werf hija kkonfigurata bl-użu ta' annotazzjonijiet li jitqiegħdu fuq Deployments jew StatefulSets. Annotazzjoni ewlenija - fail-mode - jifhem it-tifsiriet li ġejjin:

  • IgnoreAndContinueDeployProcess — ninjoraw il-problemi tat-tnedija ta' dan il-komponent u nkomplu l-iskjerament;
  • FailWholeDeployProcessImmediately — żball f'dan il-komponent iwaqqaf il-proċess ta' skjerament;
  • HopeUntilEndOfDeployProcess — nittamaw li dan il-komponent jaħdem sa tmiem l-iskjerament.

Per eżempju, din il-kombinazzjoni ta 'riżorsi u valuri ta' annotazzjoni fail-mode:

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Meta niskjeraw għall-ewwel darba, id-database (MongoDB) tista' ma tkunx għadha lesta - L-iskjeramenti se jfallu. Imma tista 'tistenna l-mument biex tibda, u l-iskjerament xorta se jseħħ.

Hemm żewġ annotazzjonijiet oħra għal kubedog f'werf:

  • failures-allowed-per-replica — in-numru ta' waqgħat permessi għal kull replika;
  • show-logs-until — jirregola l-mument sa liema werf juri (fl-stdout) zkuk mill-imżiewed kollha rolled out. In-nuqqas huwa PodIsReady (biex ninjoraw messaġġi li x'aktarx ma rridux meta t-traffiku jibda jasal lejn il-pod), iżda l-valuri huma validi wkoll: ControllerIsReady и EndOfDeploy.

X'iktar irridu mill-iskjerament?

Minbarra ż-żewġ punti diġà deskritti, nixtiequ:

  • biex tara zkuk - u dawk meħtieġa biss, u mhux kollox infila;
  • track il-progress, għaliex jekk ix-xogħol jiddendel "skiet" għal diversi minuti, huwa importanti li tifhem x'qed jiġri hemmhekk;
  • li jkollha rollback awtomatiku f'każ li xi ħaġa marret ħażin (u għalhekk huwa kritiku li tkun taf l-istatus reali tal-iskjerament). It-tnedija trid tkun atomika: jew tgħaddi sal-aħħar, jew kollox jerġa 'lura għall-istat preċedenti tiegħu.

Riżultati ta '

Għalina bħala kumpanija, biex nimplimentaw l-isfumaturi kollha deskritti fi stadji differenti tal-kunsinna (bini, tippubblika, skjerament), sistema CI u utilità huma biżżejjed werf.

Minflok konklużjoni:

werf - l-għodda tagħna għal CI / CD f'Kubernetes (ħarsa ġenerali u rapport tal-vidjo)

Bl-għajnuna ta 'werf, għamilna progress tajjeb biex insolvu numru kbir ta' problemi għall-inġiniera DevOps u nkunu ferħanin jekk il-komunità usa 'tal-inqas ippruvat din l-utilità fl-azzjoni. Ikun aktar faċli li niksbu riżultat tajjeb flimkien.

Vidjows u slides

Vidjow mill-prestazzjoni (~47 minuta):

Preżentazzjoni tar-rapport:

PS

Rapporti oħra dwar Kubernetes fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment