Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)

Tichatanga bhurogi redu nezvinyorwa zvichibva pakutaura kwazvino kwemutungamiriri wedu wehunyanzvi distol (Dmitry Stolyarov). Zvese zvakaitika muna 2016 pazviitiko zvakasiyana siyana zvehunyanzvi uye zvakatsaurirwa kumusoro weDevOps uye Docker. Imwe vhidhiyo kubva kumusangano weDocker Moscow kuhofisi yeBadoo, tatove nayo rakabudiswa Online. Zvitsva zvichaperekedzwa nezvinyorwa zvinopa humbowo hwemishumo. Saka…

May 31 pamusangano RootConf 2016, yakaitwa sechikamu chemutambo "Russian Internet Technologies" (RIT ++ 2016), chikamu "Kuenderera mberi Kuendeswa uye Kuendeswa" kwakavhurwa nemushumo we "Best Practices of Continuous Delivery with Docker". Yakapfupisa uye yakarongedza maitiro akanakisa ekuvaka inoenderera Kuendesa (CD) maitiro uchishandisa Docker uye zvimwe Open Source zvigadzirwa. Isu tinoshanda nemhinduro idzi mukugadzira, izvo zvinotitendera kuvimba neruzivo runoshanda.

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)

Kana iwe uine mukana wekupedza awa vhidhiyo yemushumo, tinokurudzira kuiona zvizere. Zvikasadaro, pazasi ndiyo pfupiso huru muchimiro chemavara.

Kuenderera Kuendesa neDocker

Under Kuramba Kuendesa isu tinonzwisisa ketani yezviitiko semhedzisiro iyo kodhi yekushandisa kubva kuGit repository inotanga kuuya pakugadzirwa, uye yozopedzisira yave mudura. Zvinoita seizvi: Git β†’ Vaka β†’ Muedzo β†’ Sunungura β†’ Shanda.

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)
Mazhinji emushumo anopirwa padanho rekuvaka (gungano rekunyorera), uye misoro inoburitswa uye kushanda inobatwa pairi muchidimbu. Isu tichataura nezve matambudziko uye mapatani anobvumidza iwe kuti uagadzirise, uye chaiwo maitirwo emapateni aya anogona kunge akasiyana.

Nei Docker ichidiwa pano zvachose? Hazvisi zvenhando izvo isu takafunga kutaura nezve Kuenderera Kuendesa maitiro mumamiriro eiyi Open Source chishandiso. Kunyangwe iyo rondedzero yese yakazvipira kushandiswa kwayo, zvikonzero zvakawanda zvinoburitswa kana uchifunga nezveiyo huru nzira yekuburitsa kodhi yekushandisa.

Main rollout pattern

Saka, kana isu tichiburitsa shanduro nyowani dzekushandisa, isu takatarisana nazvo dambudziko rekupedzisira, inogadzirwa panguva yekushandura server yekugadzira. Traffic kubva kushanduro yekare yechishandiso kuenda kune itsva haigone kushandura ipapo: chekutanga isu tinofanirwa kuve nechokwadi chekuti vhezheni iyi haina kungobudirira kudhawunirodha, asiwo "inodziya" (kureva, yakagadzirira zvachose kushumira zvikumbiro).

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)
Saka, kwenguva yakati shanduro mbiri dzechishandiso (dzekare uye itsva) dzichashanda panguva imwe chete. Izvo zvinotungamira kune kugovaniswa kwezviwanikwa: network, faira system, IPC, nezvimwe. NeDocker, dambudziko iri rinogadziriswa zviri nyore nekumhanyisa shanduro dzakasiyana dzechishandiso mumidziyo yakaparadzana, iyo yekuzviparadzanisa yezviwanikwa inovimbiswa mukati meiyo imwe chete host (server/virtual muchina). Ehe, iwe unogona kupfuura nemamwe manomano pasina kusungirira zvachose, asi kana paine chakagadzirirwa-chakagadzirwa uye chiri nyore chishandiso, saka pane chikonzero chakapesana - kusaregeredza.

Containerization inopa mamwe akawanda mabhenefiti kana yaiswa. Chero application inotsamira pa chaiyo shanduro (kana shanduro renji) muturikiri, kuwanikwa kwemamodules/extensions, nezvimwewo, pamwe neshanduro dzavo. Uye izvi zvinoshanda kwete chete kune iyo inokurumidza kuitiswa nharaunda, asiwo kune yese nharaunda, kusanganisira system software uye vhezheni yayo (kusvika kuLinux kugoverwa kunoshandiswa). Nekuda kwekuti midziyo ine kwete chete application kodhi, asiwo pre-yakaiswa system uye application software yeinodiwa shanduro, unogona kukanganwa nezve matambudziko nekutsamira.

Ngatipfupikisai main rollout pattern shanduro itsva tichifunga zvinotevera:

  1. Pakutanga, iyo yekare vhezheni yekushandisa inomhanya mumudziyo wekutanga.
  2. Iyo vhezheni itsva inobva yakungurutswa uye "inodziya" mumudziyo wechipiri. Zvinokosha kuziva kuti iyi vhezheni nyowani pachayo inogona kutakura kwete chete yakagadziridzwa kodhi yekunyorera, asiwo chero yainotsamira, pamwe nezvikamu zvehurongwa (semuenzaniso, vhezheni itsva yeOpenSSL kana kugovera kwese).
  3. Kana iyo vhezheni itsva yagadzirira zvakakwana kushandira zvikumbiro, traffic inochinja kubva kune yekutanga mudziyo kuenda kune yechipiri.
  4. Iyo yekare vhezheni ikozvino inogona kumiswa.

Iyi nzira yekuisa akasiyana mavhezheni ekushandisa mumidziyo yakasiyana inopa imwe nyore - quick rollback kune yekare vhezheni (mushure mezvose, zvakakwana kushandura traffic kune yaunoda mudziyo).

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)
Kurudziro yekutanga inonzwika sechimwe chinhu icho kunyange Mutungamiriri haana kuwana mhosva: "[pakuronga Kuenderera Kuendesa neDocker] Shandisa Docker [uye nzwisisa zvazvinopa]" Rangarira, iyi haisi bara resirivha rinogadzirisa dambudziko rega rega, asi chishandiso chinopa hwaro hunoshamisa.

Reproducibility

Ne "reproducibility" tinoreva seti yakajairwa yezvinetso zvinosangana kana uchishanda maapplication. Tiri kutaura nezvenyaya dzakadai:

  • Zvinyorwa zvakaongororwa nedhipatimendi remhando yezvirongwa zvinofanirwa kudhindwa nenzira kwayo mukugadzirwa.
  • Zvishandiso zvinoburitswa pamaseva anogona kugamuchira mapakeji kubva kune akasiyana repository magirazi (nekufamba kwenguva anogadziridzwa, uye pamwe nawo mavhezheni eakaiswa maapplication).
  • "Zvese zvinondiitira ini munharaunda!" (... uye vanogadzira havabvumidzwe mukugadzira.)
  • Iwe unofanirwa kutarisa chimwe chinhu mune yekare (yakachengetwa) vhezheni.
  • ...

Hunhu hwavo hwese hunodzika kusvika pakuti kutevedzera kuzere kwenzvimbo dzinoshandiswa (pamwe nekusavapo kwechinhu chemunhu) kwakakosha. Tinogona sei kuvimbisa kuberekazve? Gadzira Docker mifananidzo zvichibva pane kodhi kubva kuGit, uye wozozvishandisa kune chero basa: panzvimbo dzekuyedza, mukugadzira, pamichina yemuno yevagadziri ... Panguva imwecheteyo, zvakakosha kudzikisa zviito zvinoitwa. послС kuunganidza mufananidzo: zviri nyore, zvishoma pane zvikanganiso.

Infrastructure ikodhi

Kana izvo zvinodiwa zvezvivakwa (kuwanikwa kweserver software, vhezheni yayo, nezvimwewo) zvisina kugadzirwa uye "kurongwa," saka kuburitswa kwechero application update kunogona kukonzera njodzi. Semuyenzaniso, mukugadzira watochinjira kuPHP 7.0 uye wonyora kodhi zvinoenderana - ipapo kutaridzika kwayo mukugadzirwa neimwe yekare PHP (5.5) ichashamisa mumwe munhu. Iwe haugone kukanganwa nezve shanduko huru mushanduro yemuturikiri, asi "dhiyabhorosi ari mune zvakadzama": kushamisika kunogona kunge kuri mukugadziridzwa kudiki kwechero kutsamira.

Nzira yekugadzirisa dambudziko iri inozivikanwa se IaC (Infrastructure seCode, "infrastructure as code") uye zvinosanganisira kuchengetedza zvivakwa zvinodiwa pamwe nekodhi yekushandisa. Kuishandisa, vanogadzira uye nyanzvi dzeDevOps vanogona kushanda neiyo Git application repository, asi pazvikamu zvakasiyana zvayo. Kubva pane iyi kodhi, mufananidzo weDocker unogadzirwa muGit, umo mashandisirwo anoiswa achifunga nezve zvese zvinongedzo zvezvivakwa. Zvichitaurwa zviri nyore, zvinyorwa (mitemo) yekuunganidza mifananidzo inofanira kunge iri mune imwechete repository ine kodhi kodhi uye yakabatanidzwa pamwechete.

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)

Panyaya yeakawanda-layer application architecture - semuenzaniso, kune nginx, iyo inomira pamberi pechishandiso chiri kushanda mukati meDocker mudziyo - Docker mifananidzo inofanirwa kugadzirwa kubva kukodhi muGit kune yega yega. Ipapo mufananidzo wekutanga uchange uine chikumbiro chine muturikiri uye zvimwe β€œpedyo” zvinotsamira, uye mufananidzo wechipiri uchange uine wekumusoro nginx.

Docker mifananidzo, kutaurirana neGit

Isu tinopatsanura ese maDocker mifananidzo yakaunganidzwa kubva kuGit kuita mapoka maviri: yenguva pfupi uye kuburitswa. Mifananidzo yenguva pfupi yakamisikidzwa nezita rebazi muGit, inogona kudhindwa neanotevera kuzvipira uye inotenderedzwa kunze kwekutarisa chete (kwete yekugadzira). Uyu ndiwo mutsauko wavo wakakosha kubva kune ekuburitsa: hauzive kuti ndeipi chaiyo kuzvipira iri mavari.

Zvine musoro kuunganidza mumifananidzo yenguva pfupi: iyo tenzi bazi (iwe unogona kuitenderedza otomatiki kune yakaparadzana saiti kuti ugare uchiona iyo yazvino vhezheni yetenzi), matavi ane kuburitswa, matavi ehunyanzvi hutsva.

Kuenderera Kuendesa Maitiro neDocker (wongororo uye vhidhiyo)
Mushure mekutariswa kwemifananidzo yenguva pfupi yasvika pakudikanwa kwekushandurwa mukugadzirwa, vagadziri vanoisa imwe tag. Zvakaunganidzwa ne tag kuburitsa mufananidzo (tag yayo inoenderana neiyo tag kubva kuGit) uye inotenderedzwa kunze kune staging. Kana iyo yakabudirira kusimbiswa nedhipatimendi remhando, inoenda kukugadzira.

dapp

Zvose zvinotsanangurwa (kubudiswa, kuungana kwemifananidzo, kugadzirisa kunotevera) kunogona kushandiswa zvakasununguka uchishandisa zvinyorwa zveBash uye mamwe maturusi "akavandudzwa". Asi kana iwe ukaita izvi, zvino pane imwe nguva kushandiswa kunotungamira mukuoma kukuru uye kutadza controllability. Kunzwisisa izvi, tauya kuzogadzira yedu yakasarudzika Workflow utility yekuvaka CI / CD - dapp.

Yayo kodhi kodhi yakanyorwa muRuby, yakavhurika sosi uye yakadhindwa pairi GitHub. Nehurombo, zvinyorwa parizvino ndiyo isina kusimba pacho chishandiso, asi isu tiri kushanda pazviri. Uye isu tichanyora nekutaura nezve dapp kanopfuura kamwe, nekuti... Isu takatendeseka hatigone kumirira kugovera kugona kwayo nenharaunda yese inofarira, asi panguva ino, tumira nyaya dzako uye dhonza zvikumbiro uye/kana tevera kuvandudzwa kweprojekiti paGitHub.

Yakagadziridzwa Nyamavhuvhu 13, 2019: parizvino ipurojekiti dapp zita rekuti werf, kodhi yayo yakanyorwa zvachose muGo, uye zvinyorwa zvayo zvakagadziridzwa zvakanyanya.

Kubernetes

Imwe yakagadzirira-yakagadzirwa Open Source chishandiso iyo yakatowana kuzivikanwa kwakakosha munharaunda yehunyanzvi ndeye Kubernetes, Docker manejimendi cluster. Musoro wekushandiswa kwayo mukushanda kwemapurojekiti akavakirwa paDocker inodarika chiyero chemushumo, saka mharidzo inogumira kutarisisa yezvimwe zvinonakidza maficha.

Pakuburitswa, Kubernetes inopa:

  • kugadzirira kuongorora - kutarisa kugadzirira kweshanduro nyowani yekushandisa (kuchinja traffic kwairi);
  • rolling update - sequential image update muboka remidziyo (kuvhara, kugadzirisa, kugadzirira kutanga, traffic switching);
  • synchronous update - kuvandudza chifananidzo musumbu nenzira yakasiyana: kutanga pahafu yemidziyo, uye pane imwe;
  • canary inoburitsa - kuvhura chifananidzo chitsva pane shoma (diki) nhamba yemidziyo yekutarisa anomalies.

Sezvo Continuous Delivery isiri chete kuburitswa kweshanduro nyowani, Kubernetes ine akati wandei mikana yekuzotevera kugadzirisa kwezvivakwa: yakavakirwa-mukati yekutarisa uye matanda emidziyo yese, otomatiki scaling, nezvimwe. Zvese izvi zviri kutoshanda uye zvakangomirira zvakakodzera. kuita mumaitiro ako.

Mazano ekupedzisira

  1. Shandisa Docker.
  2. Gadzira maDocker mifananidzo yezvishandiso kune zvese zvaunoda.
  3. Tevedzera musimboti "Infrastructure ikodhi."
  4. Batanidza Git kuDocker.
  5. Rongedza marongero ekuburitswa.
  6. Shandisa yakagadzirira-yakagadzirwa chikuva (Kubernetes kana imwe).

Vhidhiyo uye masiraidhi

Vhidhiyo kubva pakuita (inenge awa) yakabudiswa paYouTube (chirevo pachacho chinotanga kubva paminiti yechishanu - tevera chinongedzo chekutamba kubva panguva ino).

Mharidzo yemushumo:

PS

Mimwe mishumo pamusoro wenyaya pane yedu blog:

Source: www.habr.com

Voeg