Co-aonadh 3-slighe gu werf: cleachdadh gu Kubernetes le Helm “air steroids”

Thachair na tha sinn (agus chan e a-mhàin sinne) air a bhith a’ feitheamh airson ùine mhòr: gaoir, an goireas Open Source againn airson tagraidhean a thogail agus an lìbhrigeadh gu Kubernetes, a-nis a’ toirt taic do bhith a’ cur an sàs atharrachaidhean a’ cleachdadh pìosan aonaidh 3-slighe! A bharrachd air an seo, tha e comasach goireasan K8 a th’ ann mar-thà a ghabhail a-steach ann am fiosan Helm gun a bhith ag ath-thogail nan goireasan sin.

Co-aonadh 3-slighe gu werf: cleachdadh gu Kubernetes le Helm “air steroids”

Ma tha e gu math goirid, cuiridh sinn WERF_THREE_WAY_MERGE=enabled - gheibh sinn cleachdadh “mar a tha e kubectl apply", co-chòrdail ris na h-ionadan Helm 2 a th' ann mar-thà agus eadhon beagan a bharrachd.

Ach tòisichidh sinn leis an teòiridh: dè dìreach a th’ ann am badan 3-slighe-aonaidh, ciamar a thàinig daoine suas leis an dòigh-obrach airson an cruthachadh, agus carson a tha iad cudromach ann am pròiseasan CI / CD le bun-structar stèidhichte air Kubernetes? Agus às deidh sin, chì sinn dè a th’ ann an 3-way-merge ann an werf, dè na modhan a thathas a’ cleachdadh gu bunaiteach agus mar a stiùireas tu e.

Dè a th’ ann am paiste 3-slighe-aonadh?

Mar sin, tòisichidh sinn leis a’ ghnìomh a bhith a’ sgaoileadh nan goireasan a tha air am mìneachadh ann an YAML a’ nochdadh gu Kubernetes.

Gus obrachadh le goireasan, tha an Kubernetes API a’ tabhann na h-obraichean bunaiteach a leanas: cruthaich, paiste, cuir an àite agus cuir às. Thathas a’ gabhail ris leis an taic aca gu bheil e riatanach sgaoileadh leantainneach goireasach de ghoireasan a thogail don bhuidheann. Ciamar?

kubectl àitheantan riatanach

Is e a’ chiad dòigh air nithean a stiùireadh ann an Kubernetes a bhith a’ cleachdadh òrdughan riatanach kubectl gus na nithean sin a chruthachadh, atharrachadh agus a dhubhadh às. Dìreach cuir:

  • sgioba kubectl run faodaidh tu cleachdadh no obair a ruith:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • sgioba kubectl scale - atharraich an àireamh de mhac-samhail:
    kubectl scale --replicas=3 deployment/mysql
  • agus mar sin air adhart.

Faodaidh an dòigh-obrach seo a bhith a 'coimhead freagarrach aig a' chiad shealladh. Ach tha duilgheadasan ann:

  1. Tha e doirbh fèin-ghluasad.
  2. Ciamar a 'nochdadh rèiteachadh ann an Git? Ciamar a nì thu sgrùdadh air na h-atharrachaidhean a tha a’ tachairt sa bhuidheann?
  3. Ciamar a thoirt seachad ath-ghin rèiteachaidhean air ath-thòiseachadh?
  4. ...

Tha e soilleir nach eil an dòigh-obrach seo a’ freagairt gu math ri bhith a’ stòradh tagradh agus bun-structar mar chòd (IaC; no eadhon GitOps mar roghainn nas ùire, a’ fàs mòr-chòrdte ann an eag-shiostam Kubernetes). Mar sin, cha d’ fhuair na h-òrdughan sin tuilleadh leasachaidh ann an kubectl.

Cruthaich, faigh, cuir an àite agus cuir às do ghnìomhachd

Le bun-sgoil cruthachadh tha e sìmplidh: cuir am follaiseach chun na h-obrach create kube api agus chaidh an goireas a chruthachadh. Faodar riochdachadh YAML den manifest a stòradh ann an Git agus a chruthachadh leis an àithne kubectl create -f manifest.yaml.

С toirt air falbh cuideachd sìmplidh: cuir an aon rud an àite manifest.yaml bho Git gu sgioba kubectl delete -f manifest.yaml.

Obrachadh replace a’ leigeil leat rèiteachadh a’ ghoireas a chuir na àite gu tur le fear ùr, gun a bhith ag ath-chruthachadh a’ ghoireas. Tha seo a’ ciallachadh, mus atharraich thu goireas, gu bheil e loidsigeach ceasnachadh a dhèanamh air an dreach làithreach leis an obrachadh get, atharraich e agus ùraich e leis an obrachadh replace. Tha kube apiserver air a thogail a-steach glasadh dòchasach agus, ma tha an dèidh obair-lannsa get tha an nì air atharrachadh, an uairsin an obrachadh replace chan obraich e.

Gus an rèiteachadh ann an Git a stòradh agus ùrachadh le bhith a’ cleachdadh fear eile, feumaidh tu an obrachadh a dhèanamh get, cuir còmhla an config bho Git leis na fhuair sinn, agus cuir an gnìomh replace. Gu gnàthach, cha leig kubectl leat ach an àithne a chleachdadh kubectl replace -f manifest.yamlcàite manifest.yaml - foillseachadh làn ullaichte (anns a’ chùis againn, co-aonaichte) a dh’ fheumar a chuir a-steach. Tha e a ’tionndadh a-mach gum feum an neach-cleachdaidh taisbeanaidhean aonaidh a chuir an gnìomh, agus chan e cùis bheag a tha seo ...

Is fhiach a bhith mothachail cuideachd ged a tha manifest.yaml agus air a stòradh ann an Git, chan urrainn dhuinn fios a bhith againn ro-làimh a bheil feum air rud a chruthachadh no ùrachadh - feumaidh seo a bhith air a dhèanamh le bathar-bog luchd-cleachdaidh.

Iomlan: an urrainn dhuinn sgaoileadh leantainneach a thogail dìreach a’ cleachdadh cruthaich, cuir an àite 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 feumaidh tu an obrachadh aonaidh a chuir an gnìomh manifestos agus seòrsa de cheangal a tha:

  • a’ sgrùdadh làthaireachd nì anns a’ bhuidheann,
  • a’ dèanamh cruthachadh ghoireasan tùsail,
  • ùrachadh no cuir às dha.

Nuair a bhios tu ag ùrachadh, thoir an aire sin is dòcha gu bheil an goireas air atharrachadh bho dheireadh get agus làimhsich gu fèin-ghluasadach cùis glasaidh dòchasach - dèan oidhirpean ùrachadh a-rithist.

Ach, carson ath-thòiseachadh a 'chuibhle 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

A-nis tha sinn a 'dol gu na pàtrain.

Is e pìosan am prìomh dhòigh air atharrachaidhean a chuir an sàs ann an nithean a tha ann an Kubernetes. Obrachaidh patch tha e ag obair mar seo:

  • feumaidh an neach-cleachdaidh kube-apiserver bad a chuir ann an cruth JSON agus an nì a shònrachadh,
  • agus bidh apiserver fhèin a’ dèiligeadh ri staid làithreach an nì agus ga thoirt chun fhoirm a tha a dhìth.

Chan eil feum air glasadh dòchasach sa chùis seo. Tha an obair seo nas dearbhaiche na tha e na àite, ged a dh’ fhaodadh gum biodh e coltach an taobh eile an toiseach.

San dòigh seo:

  • cleachdadh gnìomh create cruthaichidh sinn nì a rèir follaiseach 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 fhoirm a tha air a mhìneachadh ann an Git.

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

Mar a tha pìosan ag obair ann an Helm 2: 2-way-merge

Nuair a stàlaicheas tu brath an-toiseach, bidh Helm a’ coileanadh an obrachaidh create airson goireasan cairt.

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

  • a’ beachdachadh air a’ phìos eadar an tionndadh ghoireasan bhon chairt roimhe agus an dreach clàir làithreach,
  • a 'buntainn ris a' phìos seo.

Canaidh sinn am pàipear seo Pìos co-aonaidh 2-shligheach, a chionn gu bheil dà mhanifesto an sàs ann an cruthachadh:

  • goireas follaiseach bhon fhoillseachadh roimhe,
  • goireas follaiseach bhon ghoireas làithreach.

Nuair a bheir thu air falbh obrachadh delete ann an kube apiserver air a ghairm airson goireasan a chaidh ainmeachadh anns an fhoillseachadh roimhe, ach nach deach ainmeachadh anns an fhear a th’ ann an-dràsta.

Tha duilgheadas aig an dòigh-obrach aonaidh dà-shligheach: bidh e a’ leantainn gu a-mach à sioncranachadh ri fìor staid a’ ghoireas anns a’ bhasgaid agus am follais ann an Git.

Dealbh air an duilgheadas le eisimpleir

  • Ann an Git, tha clàr a’ stòradh foillseachadh anns a bheil an raon image Cùisean cleachdadh ubuntu:18.04.
  • Cleachdaiche tro kubectl edit atharraich luach an raoin seo gu ubuntu:19.04.
  • Nuair a thèid an clàr Helm ath-shuidheachadh chan eil e a’ gineadh paiste, oir tha an raon image anns an dreach roimhe seo den fhoillseachadh agus anns a’ chairt làithreach mar an ceudna.
  • Às deidh ath-shuidheachadh image fhàgail ubuntu:19.04, ged a tha an clàr ag ràdh ubuntu:18.04.

Fhuair sinn desynchronization agus chaill sinn dearbhadh.

Dè a th’ ann an goireas sioncronaich?

San fharsaingeachd làn Tha e do-dhèanta maids fhaighinn eadar an goireas a tha follaiseach ann am buidheann ruith agus am foillseachadh bho Git. Leis gu bheil e ann am fìor fhoillseachadh dh’ fhaodadh gum bi notaichean seirbheis / bileagan, soithichean a bharrachd agus dàta eile a thèid a chuir 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 chumail ann an Git. Ach, tha sinn airson gum bi na raointean a shònraich sinn gu sònraichte ann an Git a’ gabhail ris na luachan iomchaidh nuair a thèid an sgaoileadh.

Tha e a 'tionndadh a-mach cho coitcheann riaghailt stòrais sioncronaich: nuair a bhios tu a’ sgaoileadh goireas, chan urrainn dhut ach na raointean sin a tha air an sònrachadh gu soilleir anns an fhoillseachadh o Git atharrachadh no a sguabadh às (no a chaidh a shònrachadh ann an dreach roimhe agus a tha a-nis air an sguabadh às).

Pìos co-aonaidh 3-shligheach

Prìomh bheachd Pìos co-aonaidh 3-shligheach: bidh sinn a’ gineadh bad eadar an dreach gnìomhaichte mu dheireadh den manifesto bho Git agus an dreach targaid den manifesto bho Git, a’ toirt aire don dreach làithreach den fhoillseachadh bhon bhuidheann ruith. Feumaidh am pìos a thig às a leantainn cumail ris an riaghailt ghoireasan sioncronaich:

  • tha raointean ùra air an cur ris an dreach targaid air an cur ris a’ cleachdadh bad;
  • tha raointean a bha ann roimhe san dreach gnìomhaichte mu dheireadh agus nach eil ann san dreach targaid air an ath-shuidheachadh le bhith a’ cleachdadh bad;
  • tha raointean anns an dreach làithreach den nì a tha eadar-dhealaichte bhon dreach targaid den fhoillseachadh air an ùrachadh leis a’ phaiste.

Is ann air a’ phrionnsapal seo a bhios e a’ gineadh badan kubectl apply:

  • tha an dreach gnìomhaichte mu dheireadh den fhollaisiche air a stòradh ann an nota an nì fhèin,
  • targaid - air a thoirt bhon fhaidhle YAML ainmichte,
  • tha am fear a th’ ann an-dràsta bho bhuidheann ruith.

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

A’ cur atharrachaidhean an sàs ann an werf

Roimhe sin, chleachd weath, mar Helm 2, pìosan 2-slighe-aonaidh.

Pasg càraidh

Gus atharrachadh gu seòrsa ùr de phìosan - 3-way-merge - a’ chiad cheum thug sinn a-steach an rud ris an canar pasgain a chàradh.

Nuair a thathar ga chleachdadh, thathas a’ cleachdadh bad àbhaisteach 2-way-merge, ach bidh werf cuideachd a’ gineadh bad a bhiodh a’ sioncronadh fìor staid a’ ghoireas leis na tha sgrìobhte ann an Git (tha an leithid de phaiste air a chruthachadh a’ cleachdadh an aon riaghailt ghoireasan sioncronaich a tha air a mhìneachadh gu h-àrd) .

Ma thachras dì-shioncronachadh, aig deireadh an cleachdadh gheibh an neach-cleachdaidh RABHADH le teachdaireachd co-fhreagarrach agus bad a dh’ fheumar a chuir an sàs gus an goireas a thoirt gu cruth sioncronaich. Tha am pìos seo cuideachd air a chlàradh ann an nota sònraichte werf.io/repair-patch. Thathas a 'gabhail ris gu bheil làmhan an neach-cleachdaidh сам cuiridh am paiste seo an sàs: cha chuir werf an sàs idir e.

Is e tomhas sealach a th’ ann a bhith a’ gineadh badan càraidh a leigeas leat deuchainn a dhèanamh air cruthachadh phìosan stèidhichte air a’ phrionnsapal 3-slighe-aonadh, ach na cuir na pìosan sin an sàs gu fèin-ghluasadach. Aig an àm seo, tha am modh obrachaidh seo air a chomasachadh gu bunaiteach.

Pìos 3-slighe-aonadh a-mhàin airson fiosan ùra

A’ tòiseachadh air 1 Dùbhlachd, 2019, tòisichidh dreachan beta agus alpha de werf gu gnàthach cleachd pìosan làn-aonaidh 3-slighe gus atharrachaidhean a chuir an sàs a-mhàin air fiosan ùra Helm a chaidh a sgaoileadh tro werf. Leanaidh fiosan a th’ ann mar-thà a’ cleachdadh an dòigh-obrach 2-way-merge + badan càraidh.

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

thuirt: nochd am feart ann an werf thairis air grunn sgaoilidhean: anns an t-sianal alpha dh’ fhàs e deiseil le dreach v1.0.5-alpha.19, agus anns an t-sianal beta - le v1.0.4-beta.20.

Pìos 3-slighe-aonadh airson a h-uile sgaoileadh

A’ tòiseachadh air 15 Dùbhlachd, 2019, bidh dreachan beta agus alpha de werf a’ tòiseachadh a’ cleachdadh badan làn 3-slighe-aonadh gu bunaiteach gus atharrachaidhean a chuir an sàs anns a h-uile brath.

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

Dè a nì thu le fèin-sgèileadh ghoireasan?

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

Bidh còmhnard gu fèin-ghluasadach a’ taghadh an àireamh de mhac-samhail, inghearach - an àireamh de ghoireasan. Tha an dà chuid an àireamh de mhac-samhail agus feumalachdan ghoireasan air an sònrachadh anns an fhoillseachadh ghoireasan (faic am Manifest Goireasan). 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 mac-samhail agus gu bheil autoscalers air an comasachadh airson a’ ghoireas seo, an uairsin le gach cleachdadh werf ath-shuidhichidh e na luachan sin chun na tha sgrìobhte sa chlàr follaiseach .

Tha dà fhuasgladh air an duilgheadas. An toiseach, tha e nas fheàrr a bhith a’ seachnadh luachan fèin-sgèile gu soilleir anns a’ chlàr follaiseach. Mura h-eil an roghainn seo freagarrach airson adhbhar air choireigin (mar eisimpleir, leis gu bheil e goireasach crìochan stòrais tùsail a shuidheachadh agus an àireamh de mhac-samhail sa chairt), tha werf a’ tabhann na notaichean a leanas:

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

Ma tha an leithid de nota an làthair, chan ath-shuidhich werf na luachan co-fhreagarrach air gach cleachdadh, ach cha shuidhich e iad ach nuair a thèid an goireas a chruthachadh an toiseach.

Airson tuilleadh fiosrachaidh, faic na sgrìobhainnean pròiseict airson HPA и VPA.

Cuir casg air cleachdadh paiste 3-slighe-aonaidh

Faodaidh an neach-cleachdaidh an-dràsta casg a chuir air badan ùra ann an werf a’ cleachdadh caochladair àrainneachd WERF_THREE_WAY_MERGE_MODE=disabled. Ge-tà, a 'tòiseachadh Bho 1 Màrt 2020, cha bhi an casg seo ann tuilleadh. agus cha bhith e comasach ach pìosan 3-aonaidh a chleachdadh.

Gabhail ri goireasan ann an werf

Le bhith a’ maighstireachd an dòigh air atharrachaidhean a chuir an sàs le pìosan 3-slighe-aonadh leig leinn feart leithid seo a chuir an gnìomh sa bhad ri bhith a’ gabhail ri goireasan a bha sa bhuidheann a-steach don fhoillseachadh Helm.

Tha duilgheadas aig Helm 2: chan urrainn dhut goireas a chur ris na taisbeanaidhean clàir a tha mar-thà sa bhuidheann gun a bhith ag ath-chruthachadh a’ ghoireas seo bhon fhìor thoiseach (faic. #6031, #3275). Dh'ionnsaich sinn dròbh gabhail ris na goireasan a th' ann mu thràth airson an leigeil ma sgaoil. Gus seo a dhèanamh, feumaidh tu nota a stàladh air an tionndadh làithreach den ghoireas bhon bhuidheann ruith (mar eisimpleir, a’ cleachdadh kubectl edit):

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

A-nis feumar cunntas a thoirt air a’ ghoireas sa chlàr agus an ath thuras a bhios werf a’ cleachdadh brath leis an ainm iomchaidh, thèid gabhail ris a’ ghoireas a th’ ann mar-thà a-steach don fhoillseachadh seo agus bidh e fhathast fo a smachd. A bharrachd air an sin, ann am pròiseas gabhail ri goireas airson a leigeil ma sgaoil, bheir werf staid làithreach a’ ghoireas bhon bhuidheann ruith chun na stàite a tha air a mhìneachadh sa chairt, a’ cleachdadh na h-aon phìosan 3-slighe-aonaidh agus an riaghailt ghoireasan sioncronaich.

thuirt: suidheachadh WERF_THREE_WAY_MERGE_MODE chan eil e a’ toirt buaidh air uchd-mhacachd ghoireasan - a thaobh uchd-mhacachd, thathas an-còmhnaidh a’ cleachdadh bad 3-slighe-aonaidh.

Mion-fhiosrachadh - a-steach sgrìobhainnean.

Co-dhùnaidhean agus planaichean san àm ri teachd

Tha mi an dòchas às deidh an artaigil seo gu bheil e air fàs nas soilleire dè a th’ ann am badan 3-way-merge agus carson a thàinig iad thuca. Bho shealladh practaigeach air leasachadh a’ phròiseict werf, bha am buileachadh na cheum eile a dh’ionnsaigh leasachadh cleachdadh coltach ri Helm. A-nis faodaidh tu dìochuimhneachadh mu na duilgheadasan le sioncronadh rèiteachaidh, a dh ’èirich gu tric nuair a bha thu a’ cleachdadh Helm 2. Aig an aon àm, chaidh feart feumail ùr de bhith a ’gabhail ri goireasan Kubernetes a chaidh a luchdachadh sìos mar-thà a chuir ris an fhoillseachadh Helm.

Tha cuid de chùisean agus dhùbhlain ann fhathast le cleachdadh coltach ri Helm, leithid cleachdadh teamplaidean Go, air an cùm sinn oirnn a’ dèiligeadh.

Gheibhear fiosrachadh mu dhòighean ùrachadh ghoireasan agus gabhail riutha aig an duilleag sgrìobhainnean seo.

Stiùir 3

Is fhiach nota sònraichte air a leigeil ma sgaoil dìreach an latha eile dreach mòr ùr de Helm - v3 - a bhios cuideachd a’ cleachdadh badan 3-slighe-aonaidh agus a’ faighinn cuidhteas Tiller. Feumaidh an tionndadh ùr de Helm imrich ionadan gnàthaichte gus an tionndadh gu cruth stòraidh fuasglaidh ùr.

Tha Werf, airson a phàirt, air faighinn cuidhteas an-dràsta bho bhith a’ cleachdadh Tiller, air tionndadh gu 3-way-merge agus air a chur ris. tòrr a bharrachd, fhad 'sa tha e fhathast co-chòrdail ris na h-ionadan Helm 2 a th' ann mar-thà (chan eil feum air sgriobtaichean imrich a chur gu bàs). Mar sin, gus an atharraich werf gu Helm 3, cha bhith luchd-cleachdaidh werf a’ call prìomh bhuannachdan Helm 3 thairis air Helm 2 (tha iad aig werf cuideachd).

Ach, tha e do-sheachanta gum bi gluasad werf gu stòr còd Helm 3 agus tachraidh e a dh’ aithghearr. Is dòcha gur e seo werf 1.1 no werf 1.2 (an-dràsta, is e 1.0 am prìomh dhreach de werf; airson tuilleadh fiosrachaidh mun inneal tionndadh werf, faic an seo). Rè na h-ùine seo, bidh ùine aig Helm 3 a bhith seasmhach.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann