Co-aonadh 3-shligheach gu Werf: cleachdadh gu Kubernetes le Helm air steroids

Thachair na tha sinn (agus chan e sinne a-mhàin) air a bhith a’ feitheamh airson ùine mhòr: gaoir, an goireas stòr fosgailte againn airson aplacaidean a thogail agus an lìbhrigeadh gu Kubernetes, a-nis a’ toirt taic do bhith a’ cur atharrachaidhean an sàs le bhith a’ cleachdadh badan co-aonaidh 3-shligheach! A bharrachd air an sin, tha e comasach a-nis goireasan K8s a tha ann mar-thà a ghabhail a-steach do fhoillseachaidhean Helm gun an ath-chruthachadh.

Co-aonadh 3-shligheach gu Werf: cleachdadh gu Kubernetes le Helm air steroids

Ann an ùine ghoirid, chuir sinn WERF_THREE_WAY_MERGE=enabled — gheibh sinn cleachdadh “mar a tha ann an kubectl apply", co-chòrdail ri stàlaidhean Helm 2 a tha ann mar-thà agus beagan a bharrachd.

Ach tòisichidh sinn leis an teòiridh: dè a th’ ann am badan co-aonaidh 3-shligheach, ciamar a smaoinich daoine air an dòigh-obrach airson an gineadh, agus carson a tha iad cudromach ann am pròiseasan CI/CD le bun-structar stèidhichte air Kubernetes? Às deidh sin, coimheadaidh sinn air dè a th’ ann an co-aonadh 3-shligheach ann an werf, dè na modhan a thathas a’ cleachdadh gu bunaiteach, agus mar a stiùireas sinn e.

Dè a th’ ann am pasgan co-aonaidh 3-shligheach?

Mar sin, tòisichidh sinn leis an obair a bhith a’ cur ghoireasan a-mach a tha air am mìneachadh ann am manifestean YAML gu Kubernetes.

Tha na h-obrachaidhean bunaiteach a leanas aig API Kubernetes airson obrachadh le goireasan: cruthachadh, pasgadh, ath-chur, agus sguab Ă s. Tha iad sin an dĂšil an cleachdadh gus sgaoileadh ghoireasan goireasach, leantainneach a thogail don chruinneachadh. Ciamar?

Òrdughan kubectl riatanach

Is e a’ chiad dhòigh air nithean a riaghladh ann an Kubernetes òrdughan kubectl èiginneach a chleachdadh gus na nithean sin a chruthachadh, atharrachadh agus a dhubhadh às. Gu sìmplidh:

  • sgioba kubectl run Faodaidh tu Deployment no Job a ruith:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • sgioba kubectl scale — atharraich an Ă ireamh de leth-bhreacan:
    kubectl scale --replicas=3 deployment/mysql
  • agus mar sin air adhart.

Dh’fhaodadh an dòigh-obrach seo a bhith coltach ri rud goireasach an toiseach. Ach, tha duilgheadasan ann:

  1. Tha e duilich dha fèin-ghluasad.
  2. Ciamar meòrachadh rèiteachadh ann an Git? Ciamar a nì mi ath-sgrùdadh air atharrachaidhean a chaidh a dhèanamh air a’ chnuasach?
  3. Mar a nÏ thu cinnteach ath-ghin rèiteachaidhean aig ath-thòiseachadh?
  4. ...

Tha e soilleir nach eil an dòigh-obrach seo a’ freagairt gu math ri bhith a’ stòradh còd is bun-structar an tagraidh mar chòd (IaC; no eadhon GitOps (mar roghainn nas ùire a tha a’ sìor fhàs mòr-chòrdte ann an eag-shiostam Kubernetes). Mar sin, cha deach na h-òrdughan seo ann an kubectl a leasachadh tuilleadh.

GnĂŹomhan a chruthachadh, fhaighinn, a chur nan Ă ite, agus a sguabadh Ă s

Le bun-sgoil cruthachadh Tha e sÏmplidh: cuiridh sinn am manifesto chun na h-obrachaidh create Tha an kube API agus an goireas air an cruthachadh. Faodar riochdachadh YAML den manifesto a stòradh ann an Git, agus gus a chruthachadh, cleachd an àithne kubectl create -f manifest.yaml.

С toirt air falbh tha e sìmplidh cuideachd: bidh sinn a’ cur an aon rud na àite manifest.yaml bho Git gu sgioba kubectl delete -f manifest.yaml.

Obrachadh replace Leigidh seo leat rèiteachadh goireas a chur an àite rèiteachadh ùr gu tur, gun an goireas ath-chruthachadh. Tha seo a’ ciallachadh, mus dèanar atharrachadh air goireas, gu bheil e reusanta an dreach làithreach iarraidh leis an obrachadh. get, atharraich e agus ùraich e leis an obrachadh replaceTha apiserver togte a-steach aig Kube. glasadh dòchasach agus ma tha às dèidh lannsaireachd get tha an nì air atharrachadh, an uairsin an obrachadh replace cha obraich e.

Gus an rèiteachadh a stòradh ann an Git agus ùrachadh a dhèanamh air le bhith a’ cleachdadh replace, feumaidh tu an gnìomh a dhèanamh get, cuir an rèiteachadh bho Git còmhla ris na fhuair sinn, agus ruith e replaceGu gnàthach, chan eil kubectl a’ leigeil leat ach an àithne a chleachdadh kubectl replace -f manifest.yamlcàite manifest.yaml — manifesto làn-ullaichte (nar cùis-ne, co-aonaichte) a dh’ fheumar a stàladh. Tha seo a’ ciallachadh gum feum an neach-cleachdaidh na manifestos a chur còmhla, rud nach eil na chùis bheag…

Is fhiach a thoirt fa-near cuideachd, ged a tha manifest.yaml agus air a stòradh ann an Git, chan urrainn dhuinn fios a bhith againn ro-làimh am feum nì a chruthachadh no ùrachadh—feumaidh bathar-bog an neach-cleachdaidh seo a dhèanamh.

Iomlan: An urrainn dhuinn sgaoileadh leantainneach a thogail? a’ cleachdadh dìreach cruthachadh, ath-chur, agus cuir às, a’ dèanamh cinnteach gu bheil rèiteachadh a’ bhun-structair air a stòradh ann an Git còmhla ris a’ chòd agus CI/CD goireasach?

Ann am prionnsabal, is urrainn dhuinn... Airson seo bidh e riatanach an obair aonaidh a chur an gnÏomh manifestos agus seòrsa de cheangal, a tha:

  • a’ sgrĂšdadh lĂ thaireachd nĂŹ anns a’ chruinneachadh,
  • a’ dèanamh cruthachadh tĂšsail goireas,
  • ga Ăšrachadh no ga sguabadh Ă s.

Nuair a bhios tu ag ùrachadh, cumaibh cuimhne air sin dh’ fhaodadh an goireas a bhith air atharrachadh bhon uair mu dheireadh get agus a’ làimhseachadh cùis glasaidh dòchasach gu fèin-ghluasadach - dèan oidhirpean a-rithist is a-rithist airson ùrachadh.

Ach, carson a dh’ath-chruthaicheas tu an roth nuair a tha kube-apiserver a’ tabhann dòigh eile air goireasan ùrachadh: an obrachadh patch, a bheir faochadh don neach-cleachdaidh bho chuid de na duilgheadasan a chaidh a mhìneachadh?

Patch

Mar sin, tha sinn air ruighinn air na badan mu dheireadh.

’S e badan a’ phrìomh dhòigh air atharrachaidhean a chur an sàs ann an nithean a tha ann mar-thà ann an Kubernetes. patch ag obair ann an dòigh mar sin:

  • Feumaidh an neach-cleachdaidh kube-apiserver pasgan a chuir ann an cruth JSON agus an nĂŹ a shònrachadh,
  • agus dèiligeadhidh an apiserver fhèin ri staid lĂ ithreach an nĂŹ agus bheir e chun chruth a tha a dhĂŹth e.

Chan eil feum air glasadh dòchasach sa chùis seo. Tha an gnìomh seo nas dearbhaiche na ath-chur, ged a dh’ fhaodadh e a bhith coltach ris an toiseach.

San dòigh seo:

  • tro obair-lannsa create bidh sinn a’ cruthachadh nĂŹ stèidhichte air an manifesto bho Git,
  • le cuideachadh delete - cuir Ă s mura h-eil feum air an nĂŹ tuilleadh,
  • le cuideachadh patch — bidh sinn ag atharrachadh an nĂŹ, ga thoirt chun chruth a tha air a mhĂŹneachadh ann an Git.

Ach, gus seo a dhèanamh, feumaidh tu a chruthachadh paiste ceart!

Mar a bhios Pasganan ag Obrachadh ann an Helm 2: Co-aonaidhean 2-Shligheach

Nuair a stàlaicheas tu brath-naidheachd an toiseach, bidh Helm a’ dèanamh an obrachaidh create airson goireasan chairtean.

Nuair a bhios tu ag Ăšrachadh brath Helm airson gach goireas:

  • a’ tomhas a’ phaiste eadar an dreach ghoireasan bhon chairt roimhe agus an dreach lĂ ithreach den chairt,
  • a’ cur a’ phasgan seo an sĂ s.

Canaidh sinn paiste mar sin Paiste co-aonaidh dĂ -shligheach, leis gu bheil dĂ  mhanifesto an sĂ s ann a chruthachadh:

  • manifest ghoireasan bhon fhoillseachadh roimhe,
  • manifest ghoireasan bhon ghoireas lĂ ithreach.

Nuair a sguabas tu às an obrachadh delete Ann an kube, thèid apiserver a ghairm airson goireasan a chaidh ainmeachadh san fhoillseachadh roimhe ach nach deach ainmeachadh san fhear làithreach.

Tha duilgheadas aig an dòigh-obrach paiste aonaidh dà-shligheach: bidh e a’ leantainn gu dì-shioncronachadh staid fhìor an ghoireis anns a’ chruinneachadh agus am manifest ann an Git.

A’ mìneachadh na trioblaid le eisimpleir

  • Ann an Git, bidh an graf a’ stòradh manifest anns a bheil an raon image Tha luach aig an sgaoileadh ubuntu:18.04.
  • Cleachdaiche tro kubectl edit dh’atharraich luach an raoin seo gu ubuntu:19.04.
  • Nuair a bhios cairt Helm ga ath-chleachdadh chan eil e a’ cruthachadh pasgan, oir an raon image anns an dreach roimhe den fhoillseachadh agus anns a’ chairt lĂ ithreach tha iad mar an ceudna.
  • Às dèidh ath-shuidheachadh image fhĂ gail ubuntu:19.04, ged a tha an clĂ r ag rĂ dh ubuntu:18.04.

Chaill sinn ar comas dearbhaidh agus chaidh sinn air chall ann an sioncronachadh.

Dè a th’ ann an goireas sioncronaichte?

San fharsaingeachd crìochnaich Tha e do-dhèanta maidseadh fhaighinn eadar manifesto goireas ann an cruinneachadh a tha a’ ruith agus manifesto bho Git. Tha seo air sgàth gum faodadh manifesto fìor a bhith a’ toirt a-steach notaichean/leubail seirbheis, soithichean a bharrachd, agus dàta eile a chaidh a chur ris agus a thoirt air falbh bhon ghoireas gu dinamach le cuid de luchd-riaghlaidh. Chan urrainn dhuinn agus chan eil sinn airson an dàta seo a stòradh ann an Git. Ach, tha sinn ag iarraidh gum bi na luachan iomchaidh aig na raointean a shònraich sinn gu soilleir ann an Git rè an cleachdaidh.

Tha e a’ tionndadh a-mach gu bheil e cho coitcheann riaghailt ghoireasan sioncronaichteNuair a bhios tu a’ cur goireas air bhog, chan urrainn dhut ach na raointean sin atharrachadh no a dhubhadh às a tha air an sònrachadh gu soilleir ann am manifesto Git (no a chaidh a shònrachadh san dreach roimhe agus a chaidh a thoirt air falbh a-nis).

Paiste co-aonaidh dĂ -shligheach

Prìomh bheachd Paiste co-aonaidh dà-shligheachCruthaich pasgan eadar an dreach mu dheireadh a chaidh a chur an sàs den manifesto Git agus an dreach targaid den manifesto Git, a’ toirt aire don dreach làithreach den manifesto bhon chruinneachadh a tha a’ ruith. Feumaidh am pasgan a thig às a sin gèilleadh ris an riaghailt ghoireasan sioncronaichte:

  • thèid raointean Ăšra a chur ris an dreach targaid a chur ris tro phaiste;
  • thèid raointean a bha ann roimhe san dreach mu dheireadh a chaidh a chur an sĂ s agus an fheadhainn nach eil ann san dreach targaid ath-shuidheachadh le bhith a’ cleachdadh pasgan;
  • Thèid raointean san dreach lĂ ithreach den nĂŹ a tha eadar-dhealaichte bhon dreach targaid den manifesto Ăšrachadh le bhith a’ cleachdadh pasgan.

Is e seo am prionnsabal leis a bheilear a’ cruthachadh phìosan. kubectl apply:

  • tha an dreach mu dheireadh den manifesto a chaidh a chur an sĂ s air a stòradh ann an anotachadh an nĂŹ fhèin,
  • targaid - air a thoirt bhon fhaidhle YAML ainmichte,
  • gnĂ thach - bho chruinneachadh ruith.

A-nis gu bheil sinn air an teòiridh a chòmhdach, tha an t-àm ann innse dhut dè a rinn sinn ann an werf.

A’ cur atharrachaidhean an sàs ann an werf

Roimhe seo, chleachd werf, mar Helm 2, badan co-aonaidh 2-shligheach.

PĂŹos cĂ raidh

Gus gluasad gu seòrsa ùr de phìosan - co-aonadh 3-shligheach - b’ e a’ chiad cheum a ghabh sinn a bhith a’ toirt a-steach an rud ris an canar badan càraidh.

Nuair a thathar ga chur an gnìomh, thathar a’ cleachdadh pasgan àbhaisteach dà-shligheach-aonaidh, ach bidh werf cuideachd a’ gineadh pasgan a bhiodh a’ sioncronachadh fìor staid a’ ghoireis leis na tha sgrìobhte ann an Git (chithear am pasgan seo a’ cleachdadh an aon riaghailt ghoireasan sioncronaichte a chaidh a mhìneachadh gu h-àrd).

Ma thachras dì-shioncronachadh, aig deireadh an cleachdaidh, gheibh an neach-cleachdaidh teachdaireachd RABHADH le teachdaireachd co-fhreagarrach agus pasgan a dh’ fheumar a chur an sàs gus an goireas a thoirt air ais gu sioncronachadh. Tha am pasgan seo cuideachd sgrìobhte gu nota sònraichte. werf.io/repair-patchThathar a’ gabhail ris gu bheil an neach-cleachdaidh a’ cleachdadh a làmhan сам cuiridh e am pasgan seo an sàs: cha chuir werf an sàs e air prionnsabal.

’S e ceum sealach a th’ ann a bhith a’ gineadh badan càraidh a leigeas leat deuchainn a dhèanamh air a’ phròiseas gineadh badan co-aonaidh 3-shligheach, ach chan eil e a’ cur nam badan sin an sàs gu fèin-ghluasadach. Tha am modh seo air a chomasachadh gu bunaiteach an-dràsta.

Pasgan co-aonaidh 3-shligheach airson fiosan Ăšra a-mhĂ in

Bho 1 Dùbhlachd 2019, tòisichidh dreachan beta is alpha de werf gu gnàthach Cleachd badan làn-aonaidh 3-shligheach gus atharrachaidhean a chur an sàs a-mhàin ann am brathan Helm ùra a thèid a chleachdadh tro werf. Cumaidh brathan a th’ ann mar-thà orra a’ cleachdadh an dòigh-obrach 2-shligheach-aonaidh + badan càraidh.

Faodar am modh obrachaidh seo a chomasachadh gu soilleir le bhith a’ suidheachadh WERF_THREE_WAY_MERGE_MODE=onlyNewReleases nis.

thuirtnochd am feart ann an werf thar grunn fhoillseachaidhean: anns an t-sianal alpha thĂ inig e gu bhith deiseil le dreach v1.0.5-alpha.19, agus anns an t-sianal beta - le v1.0.4-beta.20.

Pasgan co-aonaidh 3-shligheach airson a h-uile foillseachadh

A’ tòiseachadh air 15 Dùbhlachd 2019, cleachdaidh dreachan beta is alpha de werf badan co-aonaidh 3-shligheach gu bunaiteach gus atharrachaidhean a chur an sàs airson a h-uile brath.

Faodar am modh obrachaidh seo a chomasachadh gu soilleir le bhith a’ suidheachadh WERF_THREE_WAY_MERGE_MODE=enabled nis.

Ciamar a dhèiligeas tu ri fèin-sgèileadh ghoireasan?

Tha dà sheòrsa fèin-sgèileadh ann an Kubernetes: HPA (còmhnard) agus VPA (inghearach).

Bidh an tè chòmhnard a’ taghadh an àireamh de leth-bhreacan gu fèin-ghluasadach, agus bidh an tè dhìreach a’ taghadh an àireamh de ghoireasan. Tha an dà chuid an àireamh de leth-bhreacan agus riatanasan ghoireasan air an sònrachadh ann am manifesto nan goireasan (faic spec.replicas no spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и другие).

Duilgheadas: Ma rèiticheas neach-cleachdaidh goireas ann an cairt gus am bi e a’ sònrachadh luachan sònraichte airson goireasan no leth-bhreacan, agus ma tha autoscalers air an comasachadh airson a’ ghoireis seo, an uairsin le gach cleachdadh, ath-shuidhichidh werf na luachan sin chun na tha sgrìobhte ann am manifesto a’ chairt.

Tha dà fhuasgladh ann airson na trioblaid seo. Is e an dòigh as fheàrr air tòiseachadh a bhith a’ seachnadh luachan fèin-sgèileachaidh a shònrachadh gu soilleir ann am manifest a’ chairt. Mura h-eil an roghainn seo freagarrach airson adhbhar air choireigin (mar eisimpleir, leis gu bheil e goireasach crìochan ghoireasan tùsail agus an àireamh de leth-bhreacan sa chairt a shònrachadh), tha werf a’ tabhann nan notaichean a leanas:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

Leis a’ chomharradh seo, cha dèan werf ath-shuidheachadh air na luachan co-fhreagarrach air gach cleachdadh, ach cha suidhich e iad ach nuair a thèid an goireas a chruthachadh an toiseach.

Airson tuilleadh fiosrachaidh, faic sgrìobhainnean a’ phròiseict. HPA и VPA.

Cuir dheth cleachdadh a’ phaiste co-aonaidh 3-shligheach

Faodaidh an neach-cleachdaidh cleachdadh phìosan ùra ann an werf a dhì-cheadachadh an-dràsta le bhith a’ cleachdadh caochladair àrainneachd. WERF_THREE_WAY_MERGE_MODE=disabledAch, a’ tòiseachadh Cha bhi an casg seo an sàs tuilleadh bho 1 Màrt 2020. agus cha bhith e comasach ach badan co-aonaidh 3-shligheach a chleachdadh.

Gabhail ri goireasan ann an werf

Le bhith a’ maighstireachd an dòigh paiste 3-shligheach airson atharrachaidhean a chur an sàs, b’ urrainn dhuinn feart a chuir an gnìomh sa bhad leithid gabhail ri goireasan cruinneachaidh a th’ ann mar-thà ann am brath Helm.

Tha duilgheadas aig Helm 2: chan urrainn dhut goireas a chur ri taisbeanaidhean cairt a tha ann mu thràth sa chruinneachadh gun an goireas sin ath-chruthachadh bhon fhìor thoiseach (faic gu h-ìosal). #6031, #3275). Tha sinn air werf a theagasg gus goireasan a tha ann mar-thà a ghabhail a-steach do fhoillseachadh. Gus seo a dhèanamh, feumaidh tu anotachadh a stàladh air an dreach làithreach de ghoireas bho chruinneachadh a tha a’ ruith (mar eisimpleir, a’ cleachdadh kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

A-nis feumar an goireas a mhìneachadh sa chairt, agus an ath thuras a chuireas werf brath-naidheachd leis an ainm co-fhreagarrach an gnìomh, thèid an goireas a th’ ann a ghabhail a-steach don bhrath-naidheachd sin agus fuirichidh e fo a riaghladh. A bharrachd air sin, rè a’ phròiseas gabhail ris a’ ghoireas a-steach don bhrath-naidheachd, atharraichidh werf staid làithreach a’ ghoireis bhon chruinneachadh a tha a’ ruith chun na staid a tha air a mhìneachadh sa chairt, a’ cleachdadh nan aon phìosan 3-shligheach-aonaidh agus riaghailt nan goireasan sioncronaichte.

thuirt: suidheachadh WERF_THREE_WAY_MERGE_MODE chan eil buaidh aige air gabhail ri goireasan - ma thèid gabhail riutha, thathar an-còmhnaidh a’ cleachdadh am pasgan aonaidh 3-shligheach.

Tha mion-fhiosrachadh ann sgrĂŹobhainnean.

Co-dhĂšnaidhean agus planaichean san Ă m ri teachd

Tha mi an dòchas gun do rinn an t-artaigil seo nas soilleire dè a th’ ann am badan co-aonaidh 3-shligheach agus carson a chaidh an taghadh. Bho shealladh practaigeach airson pròiseact werf, tha an cur an gnìomh a’ comharrachadh ceum eile a dh’ionnsaigh leasachadh cleachdadh coltach ri Helm. Faodar cùisean sioncronaidh rèiteachaidh a dh’èirich gu tric le Helm 2 a dhìochuimhneachadh a-nis. Aig an aon àm, chaidh feart ùr, feumail a chur ris: a’ gabhail ri goireasan Kubernetes a chaidh a chleachdadh mu thràth ann an sgaoileadh Helm.

Tha cuid de chÚisean agus dhÚbhlain ann fhathast le cleachdadh coltach ri Helm, leithid cleachdadh theamplaidean Go, agus cumaidh sinn oirnn gan dèiligeadh.

Gheibhear fiosrachadh mu dhòighean Úrachadh ghoireasan agus gabhail riutha aig cuideachd an duilleag sgrÏobhainnean seo.

StiĂšir 3

Airidh air iomradh sònraichte air a leigeil ma sgaoil Dìreach an latha eile, chaidh prìomh dhreach ùr de Helm—v3—a leigeil ma sgaoil, a bhios cuideachd a’ cleachdadh badan co-aonaidh 3-shligheach agus a’ toirt air falbh Tiller. Tha an dreach ùr de Helm ag iarraidh… imrich stàlaidhean a th’ ann mar-thà gus an tionndadh chun chruth stòraidh sgaoilidh ùr.

Tha Werf, air a thaobh fhèin, a-nis air faighinn cuidhteas cleachdadh Tiller, air gluasad gu co-aonadh 3-shligheach agus air a chur ris tòrr a bharrachd, fhad ’s a tha e fhathast co-chòrdail ri stàlaidhean Helm 2 a tha ann mar-thà (chan eil feum air sgriobtaichean imrich). Mar sin, gus an gluais werf gu Helm 3, cha chaill luchd-cleachdaidh werf na prìomh bhuannachdan a tha aig Helm 3 thairis air Helm 2 (tha na buannachdan sin aig werf cuideachd).

Ach, tha e do-sheachanta gun tèid werf a ghluasad chun stòr-còd Helm 3 agus tachair e a dh’ aithghearr. Is coltach gur e werf 1.1 no werf 1.2 a bhios ann (an-dràsta, is e 1.0 am prìomh dhreach de werf; airson tuilleadh fiosrachaidh mu bhith a’ cleachdadh dreachan werf, faic an seoRè na h-ùine seo, bidh ùine aig Helm 3 gus seasmhachd a ruighinn.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster