Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)

Byddwn yn dechrau ein blog gyda chyhoeddiadau yn seiliedig ar areithiau diweddaraf ein cyfarwyddwr technegol distol (Dmitry Stolyarov). Digwyddodd pob un ohonynt yn 2016 mewn amrywiol ddigwyddiadau proffesiynol ac roeddent yn ymroddedig i bwnc DevOps a Docker. Un fideo o gyfarfod Docker Moscow yn swyddfa Badoo, rydym eisoes wedi cyhoeddedig Ar-lein. I gyd-fynd â rhai newydd bydd erthyglau yn cyfleu hanfod yr adroddiadau. Felly…

Mai 31 yn y gynhadledd RootConf 2016, a gynhaliwyd fel rhan o’r ŵyl “Russian Internet Technologies” (RIT++ 2016), agorodd yr adran “Defnyddio a Defnyddio Parhaus” gyda’r adroddiad “Arferion Gorau o Ddarparu Parhaus gyda Docker”. Roedd yn crynhoi ac yn systemateiddio'r arferion gorau ar gyfer adeiladu proses Cyflenwi Parhaus (CD) gan ddefnyddio Docker a chynhyrchion Ffynhonnell Agored eraill. Rydym yn gweithio gyda'r atebion hyn wrth gynhyrchu, sy'n ein galluogi i ddibynnu ar brofiad ymarferol.

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)

Os cewch gyfle i dreulio awr fideo o'r adroddiad, rydym yn argymell ei wylio'n llawn. Fel arall, isod mae'r prif grynodeb ar ffurf testun.

Dosbarthu Parhaus gyda Docker

Dan Cyflawniad Parhaus rydym yn deall y gadwyn o ddigwyddiadau y mae'r cod cais o ystorfa Git yn dod i'w gynhyrchu gyntaf o ganlyniad, ac yna'n dod i ben yn yr archif. Mae'n edrych fel hyn: Git → Adeiladu → Prawf → Rhyddhau → Gweithredu.

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)
Mae'r rhan fwyaf o'r adroddiad wedi'i neilltuo i'r cam adeiladu (cynulliad ceisiadau), a chyffyrddir yn fyr â'r pynciau sy'n cael eu rhyddhau a'u gweithredu. Byddwn yn siarad am broblemau a phatrymau sy'n eich galluogi i'w datrys, a gall gweithrediadau penodol y patrymau hyn fod yn wahanol.

Pam fod angen Docker yma o gwbl? Nid am ddim y gwnaethom benderfynu siarad am arferion Cyflenwi Parhaus yng nghyd-destun yr offeryn Ffynhonnell Agored hwn. Er bod yr adroddiad cyfan wedi'i neilltuo i'w ddefnyddio, datgelir llawer o resymau wrth ystyried y prif batrwm o gyflwyno cod cais.

Prif batrwm cyflwyno

Felly, pan fyddwn yn cyflwyno fersiynau newydd o'r cais, rydym yn sicr yn wynebu problem amser segur, a gynhyrchir wrth newid y gweinydd cynhyrchu. Ni all traffig o'r hen fersiwn o'r cais i'r un newydd newid ar unwaith: yn gyntaf mae'n rhaid i ni sicrhau bod y fersiwn newydd nid yn unig yn cael ei lawrlwytho'n llwyddiannus, ond hefyd yn cael ei “gynhesu” (h.y., yn hollol barod i gyflwyno ceisiadau).

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)
Felly, am beth amser bydd y ddau fersiwn o'r cais (hen a newydd) yn gweithio ar yr un pryd. Sy'n arwain yn awtomatig at gwrthdaro adnoddau a rennir: rhwydwaith, system ffeiliau, IPC, ac ati. Gyda Docker, mae'n hawdd datrys y broblem hon trwy redeg gwahanol fersiynau o'r cais mewn cynwysyddion ar wahân, y mae ynysu adnoddau wedi'i warantu o fewn yr un gwesteiwr (gweinydd / peiriant rhithwir). Wrth gwrs, gallwch chi fynd heibio gyda rhai triciau heb inswleiddio o gwbl, ond os oes teclyn parod a chyfleus, yna mae rheswm arall - peidio â'i esgeuluso.

Mae cynhwysiant yn darparu llawer o fanteision eraill pan gaiff ei ddefnyddio. Mae unrhyw gais yn dibynnu ar fersiwn penodol (neu ystod fersiwn) cyfieithydd, argaeledd modiwlau/estyniadau, ac ati, yn ogystal â'u fersiynau. Ac mae hyn yn berthnasol nid yn unig i'r amgylchedd gweithredadwy uniongyrchol, ond hefyd i'r amgylchedd cyfan, gan gynnwys meddalwedd system a'i fersiwn (hyd at y dosbarthiad Linux a ddefnyddir). Oherwydd y ffaith bod cynwysyddion yn cynnwys nid yn unig cod cais, ond hefyd meddalwedd system a chymhwysiad wedi'i osod ymlaen llaw o'r fersiynau gofynnol, gallwch anghofio am broblemau gyda dibyniaethau.

Gadewch i ni grynhoi prif batrwm cyflwyno fersiynau newydd gan ystyried y ffactorau canlynol:

  1. Ar y dechrau, mae'r hen fersiwn o'r cais yn rhedeg yn y cynhwysydd cyntaf.
  2. Yna caiff y fersiwn newydd ei chyflwyno a'i “chynhesu” mewn ail gynhwysydd. Mae'n werth nodi y gall y fersiwn newydd hon ei hun gario nid yn unig cod cais wedi'i ddiweddaru, ond hefyd unrhyw un o'i ddibyniaethau, yn ogystal â chydrannau system (er enghraifft, fersiwn newydd o OpenSSL neu'r dosbarthiad cyfan).
  3. Pan fydd y fersiwn newydd yn gwbl barod i gyflwyno ceisiadau, mae traffig yn newid o'r cynhwysydd cyntaf i'r ail.
  4. Gellir atal yr hen fersiwn nawr.

Mae'r dull hwn o ddefnyddio gwahanol fersiynau o'r cais mewn cynwysyddion ar wahân yn darparu cyfleustra arall - Dychweliad cyflym i'r hen fersiwn (wedi'r cyfan, mae'n ddigon i newid traffig i'r cynhwysydd a ddymunir).

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)
Mae’r argymhelliad cyntaf olaf yn swnio fel rhywbeth na allai hyd yn oed y Capten ganfod bai arno: “[wrth drefnu Dosbarthiad Parhaus gyda Docker] Defnyddiwch Docker [a deall beth mae'n ei roi]" Cofiwch, nid bwled arian yw hwn a fydd yn datrys pob problem, ond offeryn sy'n darparu sylfaen wych.

Atgynhyrchadwyedd

Wrth “atgynhyrchu” rydym yn golygu set gyffredinol o broblemau a wynebir wrth weithredu cymwysiadau. Rydym yn siarad am achosion o'r fath:

  • Rhaid i sgriptiau a wiriwyd gan yr adran ansawdd ar gyfer llwyfannu gael eu hatgynhyrchu'n gywir wrth gynhyrchu.
  • Cyhoeddir cymwysiadau ar weinyddion sy'n gallu derbyn pecynnau o wahanol ddrychau cadw (dros amser cânt eu diweddaru, a chyda nhw fersiynau o gymwysiadau sydd wedi'u gosod).
  • “Mae popeth yn gweithio i mi yn lleol!” (...ac ni chaniateir i ddatblygwyr gynhyrchu.)
  • Mae angen i chi wirio rhywbeth yn yr hen fersiwn (wedi'i archifo).
  • ...

Mae eu hanfod cyffredinol yn deillio o'r ffaith bod angen cydymffurfio'n llawn â'r amgylcheddau a ddefnyddir (yn ogystal ag absenoldeb y ffactor dynol). Sut allwn ni warantu atgynhyrchu? Gwneud delweddau Docker yn seiliedig ar god gan Git, ac yna eu defnyddio ar gyfer unrhyw dasg: ar safleoedd prawf, wrth gynhyrchu, ar beiriannau lleol o raglenwyr ... Ar yr un pryd, mae'n bwysig lleihau'r camau gweithredu a gyflawnir ar ôl cydosod y ddelwedd: po symlaf ydyw, y lleiaf tebygol yw bod gwallau.

Mae seilwaith yn god

Os nad yw'r gofynion seilwaith (argaeledd meddalwedd gweinydd, ei fersiwn, ac ati) yn cael eu ffurfioli a'u “rhaglennu,” yna gall cyflwyno unrhyw ddiweddariad cais arwain at ganlyniadau trychinebus. Er enghraifft, wrth lwyfannu rydych chi eisoes wedi newid i PHP 7.0 ac wedi ailysgrifennu'r cod yn unol â hynny - yna bydd ei ymddangosiad wrth gynhyrchu gyda rhai hen PHP (5.5) yn sicr yn synnu rhywun. Efallai na fyddwch yn anghofio am newid mawr yn y fersiwn cyfieithydd, ond “mae'r diafol yn y manylion”: efallai y bydd y syndod mewn mân ddiweddariad o unrhyw ddibyniaeth.

Gelwir dull o ddatrys y broblem hon IaC (Isadeiledd fel Cod, “isadeiledd fel cod”) ac mae'n cynnwys storio gofynion seilwaith ynghyd â chod y cais. Gan ei ddefnyddio, gall datblygwyr ac arbenigwyr DevOps weithio gyda'r un ystorfa cymhwysiad Git, ond ar wahanol rannau ohoni. O'r cod hwn, crëir delwedd Docker yn Git, lle mae'r cymhwysiad yn cael ei ddefnyddio gan ystyried holl fanylion y seilwaith. Yn syml, dylai'r sgriptiau (rheolau) ar gyfer cydosod delweddau fod yn yr un gadwrfa â'r cod ffynhonnell ac wedi'u huno gyda'i gilydd.

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)

Yn achos pensaernïaeth cais aml-haen - er enghraifft, mae nginx, sy'n sefyll o flaen cais sydd eisoes yn rhedeg y tu mewn i gynhwysydd Docker - Rhaid creu delweddau Docker o god yn Git ar gyfer pob haen. Yna bydd y ddelwedd gyntaf yn cynnwys cymhwysiad gyda dehonglydd a dibyniaethau “agos” eraill, a bydd yr ail ddelwedd yn cynnwys y nginx i fyny'r afon.

Delweddau docwyr, cyfathrebu â Git

Rydym yn rhannu holl ddelweddau Docker a gasglwyd o Git yn ddau gategori: dros dro a rhyddhau. Delweddau dros dro wedi'u tagio gan enw'r gangen yn Git, gellir eu trosysgrifo gan yr ymrwymiad nesaf a chânt eu cyflwyno ar gyfer rhagolwg yn unig (nid ar gyfer cynhyrchu). Dyma eu gwahaniaeth allweddol oddi wrth rai rhyddhau: ni wyddoch byth pa ymrwymiad penodol sydd ynddynt.

Mae'n gwneud synnwyr casglu i ddelweddau dros dro: y brif gangen (gallwch ei chyflwyno'n awtomatig i safle ar wahân i weld y fersiwn gyfredol o feistr yn gyson), canghennau â datganiadau, canghennau o ddatblygiadau arloesol penodol.

Arferion Cyflenwi Parhaus gyda Docker (adolygiad a fideo)
Ar ôl i'r rhagolwg o ddelweddau dros dro ddod i'r angen am gyfieithu i'r cynhyrchiad, mae'r datblygwyr yn rhoi tag penodol. Wedi'i gasglu'n awtomatig trwy dag rhyddhau delwedd (mae ei dag yn cyfateb i'r tag o Git) ac yn cael ei gyflwyno i lwyfannu. Os caiff ei wirio'n llwyddiannus gan yr adran ansawdd, mae'n mynd i gynhyrchu.

dapp

Gellir gweithredu popeth a ddisgrifir (cyflwyno, cydosod delweddau, cynnal a chadw dilynol) yn annibynnol gan ddefnyddio sgriptiau Bash ac offer “byrfyfyr” eraill. Ond os gwnewch hyn, yna ar ryw adeg bydd y gweithredu yn arwain at gymhlethdod mawr a rheolaeth wael. Gan ddeall hyn, daethom i greu ein cyfleustodau Llif Gwaith arbenigol ein hunain ar gyfer adeiladu CI / CD - dapp.

Mae ei god ffynhonnell wedi'i ysgrifennu yn Ruby, ffynhonnell agored a'i gyhoeddi ar GitHub. Yn anffodus, dogfennaeth yw pwynt gwannaf yr offeryn ar hyn o bryd, ond rydym yn gweithio arno. A byddwn yn ysgrifennu ac yn siarad am y dapp fwy nag unwaith, oherwydd ... Yn ddiffuant ni allwn aros i rannu ei alluoedd gyda'r gymuned gyfan sydd â diddordeb, ond yn y cyfamser, anfonwch eich materion a thynnu ceisiadau a / neu dilynwch ddatblygiad y prosiect ar GitHub.

Wedi'i ddiweddaru Awst 13, 2019: prosiect ar hyn o bryd dapp ailenwyd i werff, mae ei god wedi'i ailysgrifennu'n llwyr yn Go, ac mae ei ddogfennaeth wedi'i gwella'n sylweddol.

Kubernetes

Offeryn Ffynhonnell Agored parod arall sydd eisoes wedi derbyn cydnabyddiaeth sylweddol yn yr amgylchedd proffesiynol yw Kubernetes, clwstwr rheoli Docwyr. Mae pwnc ei ddefnydd wrth weithredu prosiectau a adeiladwyd ar Docker y tu hwnt i gwmpas yr adroddiad, felly mae'r cyflwyniad wedi'i gyfyngu i drosolwg o rai nodweddion diddorol.

Ar gyfer ei gyflwyno, mae Kubernetes yn cynnig:

  • chwiliwr parodrwydd - gwirio parodrwydd fersiwn newydd o'r cais (i newid traffig iddo);
  • diweddariad treigl - diweddariad delwedd ddilyniannol mewn clwstwr o gynwysyddion (cau i lawr, diweddaru, paratoi ar gyfer lansio, newid traffig);
  • diweddariad cydamserol - diweddaru delwedd mewn clwstwr gyda dull gwahanol: yn gyntaf ar hanner y cynwysyddion, yna ar y gweddill;
  • datganiadau caneri - lansio delwedd newydd ar nifer cyfyngedig (bach) o gynwysyddion i fonitro anghysondebau.

Gan fod Cyflenwi Parhaus nid yn unig yn rhyddhau fersiwn newydd, mae gan Kubernetes nifer o alluoedd ar gyfer cynnal a chadw seilwaith dilynol: monitro a logio adeiledig ar gyfer yr holl gynwysyddion, graddio awtomatig, ac ati Mae hyn i gyd eisoes yn gweithio ac yn aros am iawn gweithredu yn eich prosesau.

Argymhellion terfynol

  1. Defnyddiwch Docker.
  2. Creu delweddau Docker o gymwysiadau ar gyfer eich holl anghenion.
  3. Dilynwch yr egwyddor “Cod yw seilwaith.”
  4. Cyswllt Git i Docker.
  5. Rheoleiddio trefn cyflwyno.
  6. Defnyddiwch blatfform parod (Kubernetes neu un arall).

Fideos a sleidiau

Fideo o'r perfformiad (tua awr) cyhoeddi ar YouTube (mae'r adroddiad ei hun yn dechrau o'r 5ed munud - dilynwch y ddolen i chwarae o'r eiliad yma).

Cyflwyniad yr adroddiad:

PS

Adroddiadau eraill ar y pwnc ar ein blog:

Ffynhonnell: hab.com

Ychwanegu sylw