Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)

Se nibdew il-blog tagħna b'pubblikazzjonijiet ibbażati fuq l-aħħar diskorsi tad-direttur tekniku tagħna iddawwar (Dmitry Stolyarov). Kollha kemm huma saru fl-2016 f'diversi avvenimenti professjonali u kienu ddedikati għas-suġġett ta 'DevOps u Docker. Vidjow wieħed mil-laqgħa ta 'Docker Moska fl-uffiċċju ta' Badoo, diġà għandna ippubblikat Online. Oħrajn ġodda se jkunu akkumpanjati minn artikli li jwasslu l-essenza tar-rapporti. Allura…

31 ta’ Mejju fil-konferenza RootConf 2016, li saret bħala parti mill-festival "Teknoloġiji tal-Internet Russi" (RIT++ 2016), it-taqsima "Skjerament u Skjerament Kontinwi" fetħet bir-rapport "L-Aħjar Prattiċi ta 'Konsenja Kontinwa ma' Docker". Huwa ġabar fil-qosor u sistematizzat l-aħjar prattiki għall-bini ta’ proċess ta’ Kunsinna Kontinwa (CD) bl-użu ta’ Docker u prodotti oħra ta’ Sorsi Miftuħ. Aħna naħdmu ma 'dawn is-soluzzjonijiet fil-produzzjoni, li jippermettilna li niddependu fuq esperjenza prattika.

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)

Jekk għandek l-opportunità li tqatta 'siegħa vidjo tar-rapport, nirrakkomandaw li taraha b'mod sħiħ. Inkella, hawn taħt hemm is-sommarju prinċipali f'forma ta' test.

Kunsinna Kontinwa ma Docker

Taħt Kunsinna Kontinwa nifhmu l-katina ta 'avvenimenti li bħala riżultat tagħha l-kodiċi tal-applikazzjoni mir-repożitorju Git l-ewwel jiġi għall-produzzjoni, u mbagħad jispiċċa fl-arkivju. Hija tidher bħal din: Git → Ibni → Test → Rilaxx → Opera.

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)
Il-biċċa l-kbira tar-rapport huwa ddedikat għall-istadju tal-bini (assemblaġġ tal-applikazzjoni), u s-suġġetti rilaxx u joperaw jintmessu fil-qosor. Se nitkellmu dwar problemi u mudelli li jippermettulek issolvihom, u l-implimentazzjonijiet speċifiċi ta 'dawn il-mudelli jistgħu jkunu differenti.

Għaliex hemm bżonn Docker hawn? Mhux ta’ b’xejn li ddeċidejna li nitkellmu dwar prattiki ta’ Kunsinna Kontinwa fil-kuntest ta’ din l-għodda Open Source. Għalkemm ir-rapport kollu huwa ddedikat għall-użu tiegħu, ħafna raġunijiet huma żvelati meta wieħed iqis il-mudell ewlieni tat-tnedija tal-kodiċi tal-applikazzjoni.

Mudell tat-tnedija prinċipali

Għalhekk, meta noħorġu verżjonijiet ġodda tal-applikazzjoni, ċertament niffaċċjaw problema ta' waqfien, iġġenerat waqt il-qlib tas-server tal-produzzjoni. It-traffiku mill-verżjoni l-antika tal-applikazzjoni għall-ġdida ma jistax jinbidel istantanjament: l-ewwel irridu niżguraw li l-verżjoni l-ġdida mhux biss titniżżel b'suċċess, iżda wkoll "tissaħħan" (jiġifieri, kompletament lesta biex taqdi t-talbiet).

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)
Għalhekk, għal xi żmien iż-żewġ verżjonijiet tal-applikazzjoni (qadima u ġdida) se jaħdmu simultanjament. Li awtomatikament iwassal għal kunflitt tar-riżorsi kondiviżi: netwerk, sistema ta 'fajls, IPC, eċċ. Ma 'Docker, din il-problema tissolva faċilment billi tħaddem verżjonijiet differenti tal-applikazzjoni f'kontenituri separati, li għalihom l-iżolament tar-riżorsi huwa garantit fl-istess host (server/magna virtwali). Naturalment, tista 'tmur b'xi tricks mingħajr insulazzjoni xejn, imma jekk hemm għodda lesta u konvenjenti, allura hemm ir-raġuni opposta - biex ma tittraskurahiex.

Il-kontenerizzazzjoni tipprovdi ħafna benefiċċji oħra meta tiġi skjerata. Kwalunkwe applikazzjoni tiddependi fuq verżjoni speċifika (jew firxa tal-verżjoni) interpretu, disponibbiltà ta' moduli/estensjonijiet, eċċ., kif ukoll il-verżjonijiet tagħhom. U dan japplika mhux biss għall-ambjent eżekutibbli immedjat, iżda wkoll għall-ambjent kollu, inkluż softwer tas-sistema u l-verżjoni tagħha (sad-distribuzzjoni Linux użata). Minħabba l-fatt li l-kontenituri fihom mhux biss kodiċi ta 'applikazzjoni, iżda wkoll sistema installata minn qabel u softwer ta' applikazzjoni tal-verżjonijiet meħtieġa, tista 'tinsa dwar problemi bid-dipendenzi.

Ejja niġġeneralizzaw mudell ta 'tnedija prinċipali verżjonijiet ġodda filwaqt li jitqiesu l-fatturi li ġejjin:

  1. Għall-ewwel, il-verżjoni l-antika tal-applikazzjoni taħdem fl-ewwel kontenitur.
  2. Il-verżjoni l-ġdida mbagħad tinħareġ u "tissaħħan" fit-tieni kontenitur. Ta 'min jinnota li din il-verżjoni l-ġdida nnifisha tista' ġġorr mhux biss kodiċi tal-applikazzjoni aġġornat, iżda wkoll kwalunkwe mid-dipendenzi tagħha, kif ukoll komponenti tas-sistema (per eżempju, verżjoni ġdida ta 'OpenSSL jew id-distribuzzjoni kollha).
  3. Meta l-verżjoni l-ġdida tkun lesta għal kollox biex taqdi t-talbiet, it-traffiku jaqleb mill-ewwel kontenitur għat-tieni.
  4. Il-verżjoni l-antika issa tista' titwaqqaf.

Dan l-approċċ tal-iskjerament ta' verżjonijiet differenti tal-applikazzjoni f'kontenituri separati jipprovdi konvenjenza oħra - rollback malajr għall-verżjoni l-antika (wara kollox, huwa biżżejjed li taqleb it-traffiku għall-kontenitur mixtieq).

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)
L-ewwel rakkomandazzjoni finali tinstema’ bħal xi ħaġa li lanqas il-Kaptan ma setax isib ħtija magħha: “[meta torganizza Kunsinna Kontinwa ma' Docker] Uża Docker [u tifhem x'tagħti]" Ftakar, din mhix balla tal-fidda li se ssolvi kull problema, iżda għodda li tipprovdi pedament mill-isbaħ.

Riproduċibbiltà

Permezz ta '"riproduċibbiltà" aħna nfissru sett ġeneralizzat ta' problemi li jiltaqgħu magħhom meta joperaw applikazzjonijiet. Qed nitkellmu dwar każijiet bħal dawn:

  • L-iskripts iċċekkjati mid-dipartiment tal-kwalità għall-istadji għandhom ikunu riprodotti b'mod preċiż fil-produzzjoni.
  • L-applikazzjonijiet huma ppubblikati fuq servers li jistgħu jirċievu pakketti minn mirja repożitorji differenti (maż-żmien jiġu aġġornati, u magħhom il-verżjonijiet tal-applikazzjonijiet installati).
  • "Kollox jaħdem għalija lokalment!" (... u l-iżviluppaturi mhumiex permessi fil-produzzjoni.)
  • Għandek bżonn tiċċekkja xi ħaġa fil-verżjoni l-antika (arkivjata).
  • ...

L-essenza ġenerali tagħhom tirriżulta mill-fatt li l-konformità sħiħa tal-ambjenti użati (kif ukoll l-assenza tal-fattur uman) hija meħtieġa. Kif nistgħu niggarantixxu r-riproduċibilità? Agħmel stampi Docker ibbażat fuq kodiċi minn Git, u mbagħad użahom għal kwalunkwe kompitu: fuq siti tat-test, fil-produzzjoni, fuq magni lokali ta 'programmaturi... Fl-istess ħin, huwa importanti li jiġu minimizzati l-azzjonijiet li jitwettqu wara assemblaġġ ta 'l-immaġni: aktar ma tkun sempliċi, inqas probabbli jkun hemm żbalji.

L-infrastruttura hija kodiċi

Jekk ir-rekwiżiti tal-infrastruttura (disponibbiltà tas-softwer tas-server, il-verżjoni tiegħu, eċċ.) mhumiex formalizzati u "ipprogrammati", allura t-tnedija ta 'kwalunkwe aġġornament tal-applikazzjoni jista' jirriżulta f'konsegwenzi diżastrużi. Pereżempju, fit-twaqqif diġà qlibt għal PHP 7.0 u miktub mill-ġdid il-kodiċi kif xieraq - allura d-dehra tiegħu fil-produzzjoni b'xi PHP antik (5.5) ċertament se sorpriża lil xi ħadd. Inti tista 'ma tinsa dwar bidla kbira fil-verżjoni tal-interpretu, iżda "x-xitan huwa fid-dettalji": is-sorpriża tista' tkun f'aġġornament minuri ta 'kwalunkwe dipendenza.

Approċċ biex issolvi din il-problema huwa magħruf bħala IaC (Infrastruttura bħala Kodiċi, "infrastruttura bħala kodiċi") u jinvolvi l-ħażna ta' rekwiżiti tal-infrastruttura flimkien mal-kodiċi tal-applikazzjoni. Meta jużawha, l-iżviluppaturi u l-ispeċjalisti DevOps jistgħu jaħdmu bl-istess repożitorju tal-applikazzjoni Git, iżda fuq partijiet differenti minnu. Minn dan il-kodiċi, tinħoloq immaġni Docker f'Git, li fiha l-applikazzjoni tiġi skjerata b'kont meħud tal-ispeċifiċitajiet kollha tal-infrastruttura. Fi kliem sempliċi, l-iskripts (regoli) għall-assemblaġġ ta 'immaġini għandhom ikunu fl-istess repożitorju mal-kodiċi tas-sors u magħquda flimkien.

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)

Fil-każ ta 'arkitettura ta' applikazzjoni b'ħafna saffi - pereżempju, hemm nginx, li tinsab quddiem applikazzjoni li diġà qed taħdem ġewwa kontenitur Docker - immaġini Docker għandhom jinħolqu minn kodiċi f'Git għal kull saff. Imbagħad l-ewwel immaġni se jkun fiha applikazzjoni b'interpretu u dipendenzi oħra "qrib", u t-tieni immaġni se jkun fiha n-nginx upstream.

Immaġini Docker, komunikazzjoni ma 'Git

Aħna naqsmu l-immaġini Docker kollha miġbura minn Git f'żewġ kategoriji: temporanju u rilaxx. Stampi temporanji immarkat bl-isem tal-fergħa f'Git, jista 'jinkiteb fuq il-post mill-impenn li jmiss u jiġu roll out biss għall-preview (mhux għall-produzzjoni). Din hija d-differenza ewlenija tagħhom minn dawk ta 'rilaxx: qatt ma tkun taf liema impenn speċifiku hemm fihom.

Jagħmel sens li tiġbor f'immaġini temporanji: il-fergħa kaptan (tista 'awtomatikament irromblaha f'sit separat biex tara kontinwament il-verżjoni attwali tal-kaptan), fergħat b'rilaxxi, fergħat ta' innovazzjonijiet speċifiċi.

Prattiċi ta' Kunsinna Kontinwi ma' Docker (reviżjoni u vidjo)
Wara li l-previżjoni ta 'immaġini temporanji tasal għall-ħtieġa għat-traduzzjoni fil-produzzjoni, l-iżviluppaturi jpoġġu ċertu tikketta. Miġbur awtomatikament permezz ta 'tikketta immaġni rilaxx (it-tikketta tagħha tikkorrispondi mat-tikketta minn Git) u tittella 'fuq il-waqfien. Jekk jiġi vverifikat b'suċċess mid-dipartiment tal-kwalità, imur għall-produzzjoni.

dapp

Dak kollu deskritt (rollout, assemblaġġ ta 'immaġni, manutenzjoni sussegwenti) jista' jiġi implimentat b'mod indipendenti bl-użu ta 'skripts Bash u għodod "improvizzati" oħra. Imma jekk tagħmel dan, allura f'xi punt l-implimentazzjoni se twassal għal kumplessità kbira u kontrollabbiltà fqira. Nifhmu dan, wasalna biex noħolqu l-utilità speċjalizzata tagħna tal-Fluss tax-Xogħol għall-bini ta 'CI/CD - dapp.

Il-kodiċi tas-sors tiegħu huwa miktub f'Ruby, sors miftuħ u ppubblikat fuq GitHub. Sfortunatament, id-dokumentazzjoni bħalissa hija l-iktar punt dgħajjef tal-għodda, iżda qed naħdmu fuqha. U se niktbu u nitkellmu dwar id-dapp aktar minn darba, għax... Sinċerament ma nistgħux nistennew li naqsmu l-kapaċitajiet tagħha mal-komunità interessata kollha, iżda sadanittant, ibgħat il-kwistjonijiet tiegħek u iġbed it-talbiet u/jew segwi l-iżvilupp tal-proġett fuq GitHub.

Aġġornata t-13 ta' Awwissu 2019: bħalissa proġett dapp isem ġdid għal werf, il-kodiċi tiegħu ġie kompletament miktub mill-ġdid f'Go, u d-dokumentazzjoni tiegħu tjiebet b'mod sinifikanti.

Kubernetes

Għodda oħra Open Source lesta li diġà rċeviet rikonoxximent sinifikanti fl-ambjent professjonali hija Kubernetes,raggruppament ta' ġestjoni Docker. Is-suġġett tal-użu tiegħu fl-operat ta 'proġetti mibnija fuq Docker huwa lil hinn mill-ambitu tar-rapport, għalhekk il-preżentazzjoni hija limitata għal ħarsa ġenerali ta' xi karatteristiċi interessanti.

Għat-tnedija, Kubernetes joffri:

  • sonda ta' prontezza — verifika tal-prontezza ta' verżjoni ġdida tal-applikazzjoni (biex jaqilbu t-traffiku għaliha);
  • aġġornament rolling - aġġornament sekwenzjali tal-immaġni f'grupp ta 'kontenituri (għeluq, aġġornament, tħejjija għat-tnedija, tibdil tat-traffiku);
  • aġġornament sinkroniku - aġġornament ta 'immaġni fi cluster b'approċċ differenti: l-ewwel fuq nofs il-kontenituri, imbagħad fuq il-bqija;
  • rilaxxi tal-kanarji - tnedija ta 'immaġni ġdida fuq numru limitat (żgħir) ta' kontenituri biex jimmonitorjaw l-anomaliji.

Peress li l-Konsenja Kontinwa mhix biss ir-rilaxx ta 'verżjoni ġdida, Kubernetes għandu numru ta' kapaċitajiet għall-manutenzjoni sussegwenti tal-infrastruttura: monitoraġġ u illoggjar integrati għall-kontenituri kollha, skalar awtomatiku, eċċ. Dan kollu diġà qed jaħdem u qed jistenna biss kif suppost. implimentazzjoni fil-proċessi tiegħek.

Rakkomandazzjonijiet finali

  1. Uża Docker.
  2. Oħloq immaġini Docker ta 'applikazzjonijiet għall-bżonnijiet kollha tiegħek.
  3. Segwi l-prinċipju "L-infrastruttura hija kodiċi."
  4. Link Git ma' Docker.
  5. Irregola l-ordni tat-tnedija.
  6. Uża pjattaforma lesta (Kubernetes jew oħra).

Vidjows u slides

Vidjow mill-prestazzjoni (madwar siegħa) ippubblikata fuq YouTube (ir-rapport innifsu jibda mill-5 minuta - segwi l-link biex tilgħab minn dan il-mument).

Preżentazzjoni tar-rapport:

PS

Rapporti oħra dwar is-suġġett fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment