werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

27 Cèitean ann am prìomh thalla co-labhairt DevOpsConf 2019, a chaidh a chumail mar phàirt den fhèis RIT++ 2019, mar phàirt den roinn “Lìbhrigeadh Leantainneach”, chaidh aithisg a thoirt seachad “werf - an inneal againn airson CI / CD ann an Kubernetes”. Tha e a’ bruidhinn mun fheadhainn sin duilgheadasan agus dùbhlain a tha mu choinneamh a h-uile duine nuair a thèid iad gu Kubernetes, a bharrachd air mu nuances a dh'fhaodadh nach eil follaiseach sa bhad. A’ dèanamh anailis air fuasglaidhean a dh’ fhaodadh a bhith ann, bidh sinn a’ sealltainn mar a tha seo air a bhuileachadh ann an inneal Open Source gaoir.

Bhon taisbeanadh, tha ar goireas (air an robh dapp roimhe) air clach-mhìle eachdraidheil a ruighinn de 1000 rionnag air GitHub - tha sinn an dòchas gun dèan a choimhearsnachd luchd-cleachdaidh a tha a’ sìor fhàs beatha nas fhasa dha mòran innleadairean DevOps.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Mar sin, leig dhuinn a thoirt a-steach bhidio den aithisg (~47 mionaidean, fada nas fiosrachail na an t-artaigil) agus am prìomh earrann bhuaithe ann an cruth teacsa. Rach!

A’ lìbhrigeadh còd gu Kubernetes

Cha bhith an òraid tuilleadh mu dheidhinn werf, ach mu dheidhinn CI/CD ann an Kubernetes, a’ ciallachadh gu bheil am bathar-bog againn air a phacaigeadh ann an soithichean Docker (Bhruidhinn mi mu dheidhinn seo ann an Aithisg 2016), agus thèid K8s a chleachdadh airson a ruith ann an riochdachadh (tuilleadh mu dheidhinn seo ann an Bliadhna 2017).

Cò ris a tha lìbhrigeadh coltach ann an Kubernetes?

  • Tha stòr Git ann leis a’ chòd agus stiùireadh airson a thogail. Tha an tagradh air a thogail a-steach do ìomhaigh Docker agus air fhoillseachadh ann an Clàr an Docker.
  • Tha stiùireadh anns an aon stòr cuideachd air mar as urrainn dhut an tagradh a chleachdadh agus a ruith. Aig an ìre cleachdadh, thèid an stiùireadh seo a chuir gu Kubernetes, a gheibh an ìomhaigh a tha thu ag iarraidh bhon chlàr agus a chuireas air bhog e.
  • A bharrachd air an sin, mar as trice bidh deuchainnean ann. Faodar cuid dhiubh sin a dhèanamh nuair a thathar a’ foillseachadh ìomhaigh. Faodaidh tu cuideachd (a’ leantainn an aon stiùireadh) leth-bhreac den tagradh a chuir a-steach (ann an àite-ainm K8s air leth no buidheann air leth) agus deuchainnean a ruith an sin.
  • Mu dheireadh, feumaidh tu siostam CI a gheibh tachartasan bho Git (no cliogan putan) agus a ghairmeas a h-uile ìre ainmichte: togail, foillseachadh, cleachdadh, deuchainn.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Tha beagan notaichean cudromach an seo:

  1. Leis gu bheil bun-structair againn nach gabh atharrachadh (bun-structair nach gabh atharrachadh), an ìomhaigh tagraidh a thathas a’ cleachdadh aig a h-uile ìre (stèidse, cinneasachadh, msaa), feumaidh aon a bhith ann. Bhruidhinn mi mu dheidhinn seo nas mionaidiche agus le eisimpleirean. an seo.
  2. Leis gu bheil sinn a’ leantainn a’ bhun-structair mar dhòigh-còd (IaC), bu chòir an còd tagraidh, stiùireadh airson a cho-chruinneachadh agus a chuir air bhog dìreach ann an aon stòr. Airson tuilleadh fiosrachaidh mu dheidhinn seo, faic an aon aithris.
  3. Sreath lìbhrigidh (lìbhrigeadh) mar as trice bidh sinn ga fhaicinn mar seo: chaidh an tagradh a chruinneachadh, a dhearbhadh, a leigeil ma sgaoil (ìre fuasglaidh) agus sin e - tha lìbhrigeadh air tachairt. Ach ann an da-rìribh, gheibh an neach-cleachdaidh na chuir thu a-mach, chan eil an uairsin nuair a lìbhrig thu e gu cinneasachadh, agus nuair a b’ urrainn dha a dhol ann agus dh ’obraich an riochdachadh seo. Mar sin tha mi a’ creidsinn gu bheil an t-sèine lìbhrigidh a’ tighinn gu crìch a-mhàin aig an ìre obrachaidh (ruith), no nas mionaidiche, eadhon aig an àm nuair a chaidh an còd a thoirt air falbh bho chinneasachadh (cuir fear ùr na àite).

Tillidh sinn chun sgeama lìbhrigidh gu h-àrd ann an Kubernetes: chaidh a chruthachadh chan ann a-mhàin leinn, ach gu litireil a h-uile duine a dhèilig ris an duilgheadas seo. Gu dearbh, canar GitOps ris a’ phàtran seo a-nis (Faodaidh tu barrachd a leughadh mun teirm agus na beachdan air a chùlaibh an seo). Bheir sinn sùil air ìrean an sgeama.

Àrd-ùrlar togail

Bhiodh e coltach gun urrainn dhut bruidhinn mu bhith a’ togail ìomhaighean Docker ann an 2019, nuair a tha fios aig a h-uile duine mar a sgrìobhas iad Dockerfiles agus a ruith docker build?.. Seo na nuances a bu mhath leam aire a thoirt dhaibh:

  1. Cuideam ìomhaigh cùisean, mar sin cleachd ioma-ìregus fhàgail san ìomhaigh dìreach an tagradh a tha dha-rìribh riatanach airson an obrachaidh.
  2. An àireamh de shreathan feumar a lùghdachadh le bhith a’ cothlamadh slabhraidhean de RUN- òrdughan a rèir brìgh.
  3. Ach, tha seo a 'cur ri duilgheadasan debugging, oir nuair a thuiteas an co-chruinneachadh, feumaidh tu an àithne cheart a lorg bhon t-sreath a dh'adhbhraich an duilgheadas.
  4. Astar cruinneachaidh cudromach oir tha sinn airson atharrachaidhean a sgaoileadh gu sgiobalta agus na toraidhean fhaicinn. Mar eisimpleir, chan eil thu airson eisimeileachd ann an leabharlannan cànain ath-thogail a h-uile uair a thogas tu tagradh.
  5. Gu tric bho aon stòr Git a dh ’fheumas tu iomadh dealbh, a dh’ fhaodar fhuasgladh le seata de Dockerfiles (no ìrean ainmichte ann an aon fhaidhle) agus sgriobt Bash leis a’ cho-chruinneachadh sreath aca.

B’ e seo dìreach bàrr na beinne-deighe a tha fa chomhair a h-uile duine. Ach tha duilgheadasan eile ann, gu sònraichte:

  1. Gu math tric aig ìre cruinneachaidh feumaidh sinn rudeigin sreap (mar eisimpleir, taisg toradh àithne mar a tha iomchaidh ann an eòlaire treas-phàrtaidh).
  2. Tha sinn ag iarraidh Freagair an àite sgrìobhadh ann an slige.
  3. Tha sinn ag iarraidh togail às aonais Docker (carson a tha feum againn air inneal brìgheil a bharrachd anns am feum sinn a h-uile càil a rèiteachadh airson seo, nuair a tha cruinneachadh Kubernetes againn mu thràth anns an urrainn dhuinn soithichean a ruith?).
  4. Co-chruinneachadh co-shìnte, a dh'fhaodar a thuigsinn ann an diofar dhòighean: òrdughan eadar-dhealaichte bhon Dockerfile (ma tha ioma-ìre air a chleachdadh), grunn a 'gealltainn an aon stòr, grunn Dockerfiles.
  5. Co-chruinneachadh air a sgaoileadh: Tha sinn airson rudan a chruinneachadh ann am pods a tha “ephemeral” air sgàth bidh an tasgadan aca a’ dol à sealladh, agus tha sin a’ ciallachadh gum feumar a stòradh an àiteigin air leth.
  6. Mu dheireadh, dh'ainmich mi binnean nan miannan fèin-ghluasadach: Bhiodh e air leth freagarrach a dhol don stòr, dèan beagan àithne agus faigh ìomhaigh deiseil, air a chruinneachadh le tuigse air ciamar agus dè a nì thu ceart. Ach, gu pearsanta chan eil mi cinnteach an urrainnear a h-uile nuances fhaicinn san dòigh seo.

Agus seo na pròiseactan:

  • moby/buildkit - neach-togail bho Docker Inc (mar-thà amalaichte ann an dreachan gnàthach de Docker), a tha a’ feuchainn ris na duilgheadasan sin uile fhuasgladh;
  • cainneach - neach-togail bho Google a leigeas leat togail às aonais Docker;
  • Buildpacks.io - oidhirp CNCF gus draoidheachd fèin-ghluasadach a dhèanamh agus, gu sònraichte, fuasgladh inntinneach le ath-shuidheachadh airson sreathan;
  • agus dòrlach de ghoireasan eile, leithid togail, innealan fìor / img...

agus seall cia mheud rionnag a th’ aca air GitHub. Is e sin, air aon làimh, docker build ann agus faodaidh e rudeigin a dhèanamh, ach ann an da-rìribh chan eil a’ chùis air a fuasgladh gu tur - is e dearbhadh air seo leasachadh co-shìnte de luchd-cruinneachaidh eile, agus bidh gach fear dhiubh a’ fuasgladh cuid de na duilgheadasan.

Co-chruinneachadh ann an werf

Mar sin fhuair sinn gu gaoir (roimhe seo ainmeil coltach ri dapp) - Goireas stòr fosgailte bhon chompanaidh Flant, a tha sinn air a bhith a’ dèanamh airson grunn bhliadhnaichean. Thòisich e uile 5 bliadhna air ais le sgriobtaichean Bash a rinn an fheum as fheàrr de cho-chruinneachadh Dockerfiles, agus airson na 3 bliadhna a dh’ fhalbh chaidh leasachadh làn-chuimseach a dhèanamh taobh a-staigh frèam aon phròiseact leis an stòr Git aige fhèin. (an toiseach ann an Ruby, agus an uairsin ath-sgrìobhadh a dhol, agus aig an aon àm air ath-ainmeachadh). Dè na cùisean co-chruinneachaidh a tha air am fuasgladh ann an werf?

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Chaidh na duilgheadasan le dubhar gorm a chuir an gnìomh mar-thà, chaidh an togail co-shìnte a dhèanamh taobh a-staigh an aon aoigh, agus thathar an dùil na cùisean a tha air an comharrachadh ann am buidhe a chrìochnachadh ro dheireadh an t-samhraidh.

Ìre foillseachaidh sa chlàr (foillseachadh)

Rinn sinn dial docker push... - dè a dh’ fhaodadh a bhith duilich mu bhith a’ luchdachadh suas ìomhaigh don chlàr? Agus an uairsin tha a’ cheist ag èirigh: “Dè an taga a bu chòir dhomh a chuir air an ìomhaigh?” Tha e ag èirigh airson an adhbhar a tha againn Gitflow (no ro-innleachd Git eile) agus Kubernetes, agus tha an gnìomhachas a’ feuchainn ri dèanamh cinnteach gu bheil na thachras ann an Kubernetes a’ leantainn na thachras ann an Git. Às deidh na h-uile, is e Git an aon stòr fìrinn againn.

Dè tha cho duilich mu dheidhinn seo? Dèan cinnteach à ath-riochdachadh: o ghealladh ann an Git, a tha neo-chaochlaideach 'na nàdur (neo-chaochlaideach), gu ìomhaigh Docker, a bu chòir a chumail mar an ceudna.

Tha e cudromach dhuinne cuideachd co-dhùnadh air tùs, oir tha sinn airson tuigsinn cò às a chaidh an tagradh a tha a’ ruith ann an Kubernetes a thogail (an uairsin is urrainn dhuinn diofar rudan agus rudan coltach ris a dhèanamh).

Ro-innleachdan Tagraidh

Tha a 'chiad fhear sìmplidh tag git. Tha clàr againn le ìomhaigh air a tagadh mar 1.0. Tha àrd-ùrlar agus riochdachadh aig Kubernetes, far a bheil an ìomhaigh seo air a luchdachadh suas. Ann an Git bidh sinn a’ dèanamh geallaidhean agus aig àm air choreigin bidh sinn a’ tagadh 2.0. Bidh sinn ga chruinneachadh a rèir an stiùiridh bhon stòr agus ga chuir sa chlàr leis an taga 2.0. Bidh sinn ga sgaoileadh chun àrd-ùrlar agus, ma tha a h-uile càil gu math, an uairsin gu cinneasachadh.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Is e an duilgheadas leis an dòigh-obrach seo gun do chuir sinn an taga an toiseach, agus dìreach an uairsin rinn sinn deuchainn agus sgaoileadh a-mach e. Carson? An toiseach, tha e dìreach aineolach: tha sinn a’ cur a-mach dreach de bhathar-bog nach do rinn sinn eadhon deuchainn fhathast (chan urrainn dhuinn a chaochladh a dhèanamh, oir gus sgrùdadh a dhèanamh, feumaidh sinn taga a chuir). San dàrna h-àite, chan eil an t-slighe seo co-chòrdail ri Gitflow.

An dàrna roghainn - git tiomnaidh + tag. Tha tag aig a’ phrìomh mheur 1.0; air a shon ann an clàradh - ìomhaigh air a chuir gu riochdachadh. A bharrachd air an sin, tha ro-shealladh agus cumaidhean stèidse aig cruinneachadh Kubernetes. An ath rud bidh sinn a’ leantainn Gitflow: anns a’ phrìomh mheur airson leasachadh (develop) bidh sinn a’ dèanamh feartan ùra, a’ leantainn gu gealltanas leis an aithnichear #c1. Bidh sinn ga chruinneachadh agus ga fhoillseachadh sa chlàr leis an aithnichear seo (#c1). Leis an aon aithnichear bidh sinn a’ sgaoileadh a-mach airson ro-shealladh. Bidh sinn a’ dèanamh an aon rud le geallaidhean #c2 и #c3.

Nuair a thuig sinn gu bheil feartan gu leòr ann, tòisichidh sinn air a h-uile càil a dhèanamh seasmhach. Cruthaich meur ann an Git release_1.1 (air a' bhonn #c3 bho develop). Chan eil feum air an naidheachd seo a chruinneachadh, oir ... rinneadh so anns a' cheum roimhe so. Mar sin, is urrainn dhuinn dìreach a chuir air adhart gu àrd-ùrlar. Bidh sinn a’ càradh bhiteagan a-staigh #c4 agus mar an ceudna sgaoileadh a-mach gu àrd-ùrlar. Aig an aon àm, tha leasachadh a 'dol air adhart develop, far a bheilear a’ toirt atharrachaidhean bho àm gu àm release_1.1. Aig àm air choreigin, gheibh sinn gealltanas air a chur ri chèile agus air a luchdachadh suas gu àrd-ùrlar, a tha sinn toilichte leis (#c25).

An uairsin bidh sinn a 'tighinn còmhla (le luath air adhart) a' mheur fuasglaidh (release_1.1) ann am maighstir. Chuir sinn taga leis an dreach ùr air a’ ghealladh seo (1.1). Ach tha an ìomhaigh seo air a chruinneachadh sa chlàr mu thràth, agus mar sin gus nach tèid a chruinneachadh a-rithist, bidh sinn dìreach a ’cur dàrna tag ris an ìomhaigh a th’ ann (a-nis tha tagaichean aige sa chlàr #c25 и 1.1). Às deidh sin, bidh sinn ga sgaoileadh a-mach gu cinneasachadh.

Tha eas-bhuannachd ann nach eil ach aon dealbh air a luchdachadh suas gu àrd-ùrlar (#c25), agus ann an cinneasachadh tha e car eadar-dhealaichte (1.1), ach tha fios againn gur e seo “gu corporra” an aon ìomhaigh bhon chlàr.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Is e an fhìor ana-cothrom nach eil taic ann airson geallaidhean aonaidh, feumaidh tu gluasad air adhart gu sgiobalta.

Is urrainn dhuinn a dhol nas fhaide agus cleas a dhèanamh ... Bheir sinn sùil air eisimpleir de Dockerfile sìmplidh:

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

Nach tog sinn faidhle bhuaithe a rèir a’ phrionnsapail a leanas:

  • SHA256 bho aithnichearan nan dealbhan a chaidh a chleachdadh (ruby:2.3 и nginx:alpine), a tha nan sgrùdaidhean den t-susbaint aca;
  • a h-uile sgioba (RUN, CMD Agus mar sin air adhart.);
  • SHA256 bho fhaidhlichean a chaidh a chur ris.

agus thoir an checksum (a-rithist SHA256) bho leithid de fhaidhle. Seo ainm-sgrìobhte a h-uile dad a tha a’ mìneachadh susbaint ìomhaigh Docker.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Rachamaid air ais chun an diagram agus an àite geallaidhean cleachdaidh sinn ainmean-sgrìobhte mar sin, i.e. ìomhaighean tag le ainmean-sgrìobhte.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

A-nis, nuair a tha feum air, mar eisimpleir, gus atharrachaidhean a thoirt còmhla bho fhoillseachadh gu maighstir, is urrainn dhuinn fìor ghealladh aonaidh a dhèanamh: bidh aithnichear eadar-dhealaichte aige, ach an aon ainm-sgrìobhte. Leis an aon aithnichear cuiridh sinn an ìomhaigh a-mach gu cinneasachadh.

Is e an ana-cothrom a th’ ann a-nis nach bi e comasach faighinn a-mach dè an seòrsa dealas a chaidh a phutadh gu cinneasachadh - chan obraich checksums ach ann an aon taobh. Tha an duilgheadas seo air fhuasgladh le sreath a bharrachd le meata-dàta - innsidh mi barrachd dhut nas fhaide air adhart.

A 'tagadh ann an werf

Ann an werf chaidh sinn eadhon nas fhaide agus tha sinn ag ullachadh airson togail sgaoilte a dhèanamh le tasgadan nach eil air a stòradh air aon inneal... Mar sin, tha sinn a’ togail dà sheòrsa de dh ’ìomhaighean Docker, canaidh sinn iad ìre и dealbh.

Bidh stòr werf Git a’ stòradh stiùiridhean togail-sònraichte a bheir cunntas air na diofar ìrean den togail (roimh an stàladh, stàlaich, ro-shuidhichte, Suidhich). Bidh sinn a’ cruinneachadh ìomhaigh a’ chiad ìre le ainm-sgrìobhte air a mhìneachadh mar sheic de na ciad cheumannan. An uairsin bidh sinn a 'cur a' chòd stòr ris, airson an ìomhaigh àrd-ùrlair bidh sinn a 'tomhas a h-àireamh-sgrùdaidh. An uairsin bidh sinn a 'dèanamh an ìomhaigh mu dheireadh, anns a bheil meata-dàta mu thùs. Agus bidh sinn a’ tagadh an ìomhaigh seo ann an diofar dhòighean (mion-fhiosrachadh nas fhaide air adhart).

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Osbarr às deidh seo nochdaidh gealltanas ùr anns nach deach ach còd an tagraidh atharrachadh. Dè thachras? Airson atharrachaidhean còd, thèid paiste a chruthachadh agus thèid ìomhaigh àrd-ùrlar ùr ullachadh. Bidh an ainm-sgrìobhte aige air a dhearbhadh mar sheic den t-seann ìomhaigh àrd-ùrlar agus am bad ùr. Thèid ìomhaigh dheireannach ùr a chruthachadh bhon ìomhaigh seo. Bidh giùlan coltach ris a’ tachairt le atharrachaidhean ann an ìrean eile.

Mar sin, is e tasgadan a th’ ann an ìomhaighean àrd-ùrlar a ghabhas stòradh gu sgaoilte, agus tha na h-ìomhaighean a chaidh a chruthachadh bhuaithe mu thràth air an luchdachadh suas gu Clàr an Docker.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

A 'glanadh a' chlàr

Chan eil sinn a ’bruidhinn mu bhith a’ cuir às do shreathan a dh ’fhan crochte às deidh tagaichean a chaidh a dhubhadh às - tha seo na fheart àbhaisteach de Chlàr Docker fhèin. Tha sinn a’ bruidhinn air suidheachadh nuair a chruinnicheas tòrr tagaichean Docker agus tha sinn a’ tuigsinn nach eil feum againn air cuid dhiubh tuilleadh, ach bidh iad a’ gabhail àite (agus/no bidh sinn a’ pàigheadh ​​air a shon).

Dè na ro-innleachdan glanaidh a th’ ann?

  1. Chan urrainn dhut dìreach dad a dhèanamh na glan. Aig amannan tha e gu math nas fhasa beagan a phàigheadh ​​​​airson àite a bharrachd na bhith a’ faighinn a-mach cnap mòr de thiocaidean. Ach chan obraich seo ach gu ìre shònraichte.
  2. Ath-shuidheachadh slàn. Ma sguabas tu às na h-ìomhaighean gu lèir agus nach ath-thog thu ach an fheadhainn a th’ ann an-dràsta san t-siostam CI, faodaidh duilgheadas èirigh. Ma thèid an soitheach ath-thòiseachadh ann an cinneasachadh, thèid ìomhaigh ùr a luchdachadh air a shon - fear nach deach a dhearbhadh le duine fhathast. Bidh seo a’ marbhadh a’ bheachd air bun-structar nach gabh atharrachadh.
  3. Gorm-uaine. Thòisich aon chlàradh a 'dol thairis air - bidh sinn a' luchdachadh suas ìomhaighean gu fear eile. An aon dhuilgheadas ris a 'mhodh roimhe: dè an ìre as urrainn dhut an clàr a tha air tòiseachadh a' cur thairis a ghlanadh?
  4. Le ùine. Sguab às a h-uile dealbh nas sine na 1 mhìos? Ach gu cinnteach bidh seirbheis ann nach deach ùrachadh airson mìos...
  5. Le làimh co-dhùnadh dè as urrainn a dhubhadh às mu thràth.

Tha dà roghainn fìor obrachail ann: na bi glan no measgachadh de ghorm-uaine + le làimh. Anns a 'chùis mu dheireadh, tha sinn a' bruidhinn mu na leanas: nuair a thuigeas tu gu bheil an t-àm ann an clàr a ghlanadh, cruthaichidh tu fear ùr agus cuiridh tu a h-uile dealbh ùr ris thairis air, mar eisimpleir, mìos. Agus às deidh mìos, faic dè na pods ann an Kubernetes a tha fhathast a’ cleachdadh an t-seann chlàr, agus gluais iad chun chlàr ùr cuideachd.

Dè tha sinn air tighinn gaoir? Bidh sinn a’ cruinneachadh:

  1. Ceann Git: a h-uile tagaichean, a h-uile meur - a 'gabhail ris gu bheil feum againn air a h-uile càil a tha air a chomharrachadh ann an Git anns na h-ìomhaighean (agus mura h-eil, feumaidh sinn a sguabadh às ann an Git fhèin);
  2. a h-uile pod a tha air a phumpadh a-mach gu Kubernetes an-dràsta;
  3. seann ReplicaSets (a chaidh fhoillseachadh o chionn ghoirid), agus tha sinn cuideachd an dùil fiosan Helm a sganadh agus na h-ìomhaighean as ùire a thaghadh an sin.

... agus dèan liosta geal bhon t-seata seo - liosta de dhealbhan nach sguab sinn às. Bidh sinn a’ glanadh a h-uile càil eile, às deidh sin lorg sinn ìomhaighean àrd-ùrlar dìlleachdan agus cuir às dhaibh cuideachd.

Cur an sàs ìre

Dearbhadh earbsach

Is e a’ chiad phuing air am bu mhath leam aire a tharraing nuair a bhios mi ga chleachdadh a bhith a’ sgaoileadh an rèiteachaidh ghoireasan ùraichte, air ainmeachadh gu dearbhach. Tha an sgrìobhainn tùsail YAML a tha a’ toirt cunntas air goireasan Kubernetes an-còmhnaidh gu math eadar-dhealaichte bhon toradh a tha a’ ruith sa bhuidheann. Leis gu bheil Kubernetes a’ cur ris an rèiteachadh:

  1. aithnichearan;
  2. fiosrachadh seirbheis;
  3. mòran luachan bunaiteach;
  4. earrann le inbhe làithreach;
  5. atharrachaidhean a chaidh a dhèanamh mar phàirt den leabhar-lìn inntrigidh;
  6. toradh obair diofar luchd-riaghlaidh (agus an clàr-ama).

Mar sin, nuair a nochdas rèiteachadh goireas ùr (ùr), chan urrainn dhuinn dìreach an rèiteachadh gnàthach, “beò” a ghabhail agus a sgrìobhadh thairis leis (fuireach). Gus seo a dhèanamh feumaidh sinn coimeas a dhèanamh ùr leis an rèiteachadh mu dheireadh a chaidh a chur an sàs (mu dheireadh air a chur an sàs) agus cuir air adhart fuireach fhuair paiste.

Canar an dòigh-obrach seo ris Co-aonadh 2-slighe. Tha e air a chleachdadh, mar eisimpleir, ann an Helm.

Tha cuideachd Co-aonadh 3-slighe, a tha eadar-dhealaichte ann an sin:

  • coimeas mu dheireadh air a chur an sàs и ùr, bheir sinn sùil air na chaidh a sguabadh às;
  • coimeas ùr и fuireach, bheir sinn sùil air na chaidh a chur ris no atharrachadh ;
  • Thathas a’ cur a-steach am paiste geàrr-chunntas fuireach.

Bidh sinn a’ cleachdadh 1000+ tagradh le Helm, agus mar sin bidh sinn beò le aonadh dà-shligheach. Ach, tha grunn dhuilgheadasan ann a tha sinn air fhuasgladh leis na pìosan againn, a chuidicheas Helm gu bhith ag obair gu h-àbhaisteach.

Inbhe ro-ràdh fìor

Às deidh don t-siostam CI againn rèiteachadh ùr a chruthachadh airson Kubernetes stèidhichte air an ath thachartas, bidh e ga chuir thairis airson a chleachdadh (cuir a-steach) gu brais - a' cleachdadh Helm no kubectl apply. An ath rud, tha an aonadh N-way a chaidh a mhìneachadh mar-thà a’ tachairt, ris am bi an Kubernetes API a’ freagairt gu dòigheil don t-siostam CI, agus sin don neach-cleachdaidh aige.

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Ach, tha duilgheadas mòr ann: às deidh a h-uile càil chan eil tagradh soirbheachail a’ ciallachadh sgaoileadh soirbheachail. Ma tha Kubernetes a’ tuigsinn dè na h-atharrachaidhean a dh’ fheumar a chuir an sàs agus a chuir an sàs, chan eil fios againn fhathast dè an toradh a bhios ann. Mar eisimpleir, is dòcha gum bi e soirbheachail le bhith ag ùrachadh agus ag ath-thòiseachadh pods air an aghaidh, ach chan ann air an backend, agus gheibh sinn dreachan eadar-dhealaichte de na h-ìomhaighean tagraidh ruith.

Gus a h-uile càil a dhèanamh ceart, feumaidh an sgeama seo ceangal a bharrachd - rianadair sònraichte a gheibh fiosrachadh inbhe bho Kubernetes API agus a chuir a-mach airson tuilleadh sgrùdaidh air fìor staid nan rudan. Chruthaich sinn leabharlann Open Source ann an Go - cubedog (faic an sanas aige an seo), a dh’ fhuasglas an duilgheadas seo agus a tha air a thogail a-steach don fheur.

Tha giùlan an rianadair seo aig ìre werf air a rèiteachadh le bhith a’ cleachdadh notaichean a tha air an cur air Cleachdaidhean no StatefulSets. Prìomh iomradh - fail-mode - a 'tuigsinn na brìgh a leanas:

  • IgnoreAndContinueDeployProcess - bidh sinn a’ seachnadh nan duilgheadasan a thaobh a bhith a’ sgaoileadh a’ phàirt seo agus a’ leantainn air adhart leis an cleachdadh;
  • FailWholeDeployProcessImmediately - tha mearachd sa phàirt seo a’ cur stad air a’ phròiseas cleachdadh;
  • HopeUntilEndOfDeployProcess - tha sinn an dòchas gun obraich am pàirt seo ro dheireadh an cleachdadh.

Mar eisimpleir, am measgachadh seo de ghoireasan agus luachan notaichean fail-mode:

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Nuair a chleachdas sinn airson a’ chiad uair, is dòcha nach bi an stòr-dàta (MongoDB) deiseil fhathast - Fàilligidh cleachdadh. Ach faodaidh tu feitheamh gus an tòisich e, agus bidh an cleachdadh fhathast a ’tachairt.

Tha dà nota eile ann airson kubedog ann an werf:

  • failures-allowed-per-replica - an àireamh de tuiteam ceadaichte airson gach mac-samhail;
  • show-logs-until - a’ riaghladh a’ mhionaid gus am bi werf a’ sealltainn (ann an stdout) logaichean bho gach pod a chaidh a sgaoileadh. Tha am bun-bheachd PodIsReady (gus teachdaireachdan a leigeil seachad nach eil sinn ag iarraidh nuair a thòisicheas trafaic a’ tighinn chun pod), ach tha luachan dligheach cuideachd: ControllerIsReady и EndOfDeploy.

Dè eile a tha sinn ag iarraidh bho chleachdadh?

A bharrachd air an dà phuing a chaidh a mhìneachadh mar-thà, bu mhath leinn:

  • fhaicinn logaichean - agus dìreach an fheadhainn a tha riatanach, agus chan e a h-uile dad ann an sreath;
  • rian adhartas, oir ma tha an obair a 'crochadh "sàmhach" airson grunn mhionaidean, tha e cudromach tuigsinn dè tha a' tachairt ann;
  • иметь tar-aisig fèin-ghluasadach gun fhios nach deach rudeigin ceàrr (agus mar sin tha e deatamach fios a bhith agad air fìor inbhe an t-suidheachaidh). Feumaidh an sgaoileadh a bhith atamach: an dàrna cuid bidh e a’ dol troimhe chun deireadh, no bidh a h-uile càil a’ tilleadh chun staid a bh’ ann roimhe.

Builean

Dhuinne mar chompanaidh, tha e gu leòr a h-uile nuance a chaidh a mhìneachadh a chuir an gnìomh aig diofar ìrean lìbhrigidh (togail, foillseachadh, cleachdadh), siostam CI agus goireasachd. gaoir.

An àite co-dhùnadh:

werf - an inneal againn airson CI / CD ann an Kubernetes (aithisg ath-shealladh is bhidio)

Le cuideachadh bho werf, tha sinn air adhartas math a dhèanamh ann a bhith a’ fuasgladh àireamh mhòr de dhuilgheadasan dha innleadairean DevOps agus bhiodh sinn toilichte nam biodh a’ choimhearsnachd san fharsaingeachd co-dhiù a’ feuchainn ris a’ ghoireas seo an gnìomh. Bidh e nas fhasa toradh math a choileanadh còmhla.

Bhidiothan agus slides

Bhidio bhon taisbeanadh (~ 47 mionaid):

Taisbeanadh na h-aithisg:

PS

Aithisgean eile mu Kubernetes air ar blog:

Source: www.habr.com

Cuir beachd ann