Coimeas ceart de Kubernetes Cuir a-steach, Ath-chuir agus Patch

Tha grunn roghainnean aig Kubernetes airson goireasan ùrachadh: cuir an sàs, deasachadh, paiste agus cuir an àite. Tha mì-chinnt ann mu dè nì gach fear agus cuin a chleachdas iad iad. Feuch an dèan sinn a-mach e.

Coimeas ceart de Kubernetes Cuir a-steach, Ath-chuir agus Patch

ma lorg air Google tha an abairt "kubernetes apply vs replace" suidhichte freagairt do StackOverflow, rud nach eil ceart. Nuair a lorg "kubernetes apply vs patch" is e a’ chiad cheangal na sgrìobhainnean airson kubectl patch, nach eil a’ toirt a-steach coimeas apply и patch. Bheir an artaigil seo sùil air na diofar roghainnean, a bharrachd air cleachdadh ceart gach fear.

Rè cuairt-beatha goireas Kubernetes (seirbheis, cleachdadh, toirt a-steach, msaa), uaireannan feumaidh tu cuid de fheartan a’ ghoireas seo atharrachadh, a chur ris no a thoirt air falbh. Mar eisimpleir, cuir nota ris, àrdaich no lughdaich an àireamh de mhac-samhail.

Kubernetes CLI

Ma tha thu mu thràth ag obair le cruinneachaidhean Kubernetes tron ​​​​CLI, tha thu eòlach air mu thràth apply и edit... Sgioba apply a’ leughadh an t-sònrachadh ghoireasan bhon fhaidhle agus a’ dèanamh “troimh-chèile” do bhuidheann Kubernetes, i.e. cruthaichidh e an goireas mura h-eil e ann agus ùraich e ma tha e ann. Sgioba edit a’ leughadh goireas tron ​​API, an uairsin a’ sgrìobhadh an t-sònrachadh ghoireasan gu faidhle ionadail, a thèid fhosgladh an uairsin ann an deasaiche teacsa. Às deidh dhut am faidhle a dheasachadh agus a shàbhaladh, kubectl cuiridh e na h-atharrachaidhean a chaidh a dhèanamh air ais tron ​​​​API, a chuireas na h-atharrachaidhean sin gu faiceallach ris a’ ghoireas.

Chan eil fios aig a h-uile duine air na h-òrdughan patch и replace... Sgioba patch a’ leigeil leat pàirt de shònrachadh stòrais atharrachadh, a’ toirt seachad dìreach am pàirt atharraichte air an loidhne-àithne. Sgioba replace ag obair mar an ceudna edit, ach feumar a h-uile càil a dhèanamh le làimh: feumaidh tu an dreach làithreach den t-sònrachadh ghoireasan a luchdachadh sìos, mar eisimpleir, a’ cleachdadh kubectl get -o yaml, deasaich e, an uairsin cleachd replace gus goireas ùrachadh a rèir sònrachadh atharraichte. Sgioba replace chan obraich e ma thachair atharrachadh sam bith eadar leughadh agus ath-chur a’ ghoireas.

Kubernetes API

Is dòcha gu bheil thu eòlach air na dòighean-obrach CoreV1().Pods().Update(), replaceNamespacedService no patch_namespaced_deployment, ma tha thu ag obair le cruinneachaidhean tro leabharlann teachdaiche airson Kubernetes API a’ cleachdadh beagan cànan prògramaidh. Bidh an leabharlann a’ làimhseachadh nan dòighean sin tro iarrtasan HTTP a’ cleachdadh nan dòighean PUT и PATCH... Far an robh update и replace cleachdadh PUTagus patch, ge bith dè cho beag 'sa dh' fhaodadh e a bhith, cleachdaidhean PATCH.

Is fhiach a bhith mothachail sin kubectl cuideachd ag obair le cruinneachaidhean tro API. Ann am faclan eile, kubectlna phasgan a bharrachd air leabharlann teachdaiche airson a’ chànan Go, a tha gu ìre mhòr a’ toirt seachad comas fo-òrdughan a thoirt seachad ann an cruth nas toinnte agus a ghabhas leughadh a bharrachd air na comasan àbhaisteach API. Mar eisimpleir, mar is dòcha gu bheil thu air mothachadh mu thràth, an dòigh-obrach apply nach deach ainmeachadh gu h-àrd anns a’ pharagraf roimhe. An-dràsta (Cèitean 2020, mu thuairmeas. eadar-theangair) uile loidsig kubectl apply, i.e. a’ cruthachadh ghoireasan nach eil ann agus ag ùrachadh an fheadhainn a th’ ann mar-thà, ag obair gu tur air taobh a’ chòd kubectl. Tha oidhirpean gan dèanamh air gluasad loidsig apply gu taobh API, ach tha e fhathast ann am beta. Sgrìobhaidh mi nas mionaidiche gu h-ìosal.

Patch gu bunaiteach

As fheàrr a chleachdadh patch, ma tha thu airson an goireas ùrachadh. Seo mar a bhios an dà leabharlann teachdaiche ag obair a bharrachd air an Kubernetes API agus kubectl (chan eil e na iongnadh, leis gu bheil e na phasgan airson leabharlann an luchd-cleachdaidh, mu thuairmeas. eadar-theangair).

Obraich gu ro-innleachdail

A h-uile sgioba kubectl apply, edit и patch cleachd am modh PATCH ann an iarrtasan HTTP airson goireas a tha ann mu thràth ùrachadh. Ma nì thu sgrùdadh nas mionaidiche air buileachadh òrdughan, bidh iad uile a’ cleachdadh an dòigh-obrach co-aonadh ro-innleachdail gus goireasan ùrachadh, ged a tha an àithne patch faodaidh tu dòighean-obrach eile a chleachdadh (barrachd air seo gu h-ìosal). Bidh an dòigh-obrach aonaidh ro-innleachdail a’ feuchainn ri “fhaighinn ceart” le bhith a’ ceangal an t-sònrachadh a chaidh a sholarachadh leis an t-sònrachadh a th’ ann mar-thà. Nas sònraichte gu sònraichte, bidh e a’ feuchainn ris an dà chuid nithean agus arrays a chur còmhla, a tha a’ ciallachadh gu bheil na h-atharrachaidhean buailteach a bhith cur-ris. Mar eisimpleir, ruith an àithne patch le caochladair àrainneachd ùr ann an sònrachadh pod container, ag adhbhrachadh gun tèid an caochladair àrainneachd sin a chur ris na caochladairean àrainneachd a th’ ann an àite a bhith gan sgrìobhadh thairis orra. Gus a thoirt air falbh le bhith a’ cleachdadh an dòigh-obrach seo, feumaidh tu luach a’ pharamadair a thoirt gu null anns an t-sònrachadh a chaidh a sholarachadh. Cò de na sgiobaidhean kubectl A bheil e nas fheàrr a chleachdadh airson ùrachadh?

Ma chruthaicheas agus a stiùireas tu do ghoireasan a’ cleachdadh kubectl apply, nuair a tha e ag ùrachadh tha e nas fheàrr a chleachdadh an-còmhnaidh kubectl applygu kubectl b’ urrainn dhaibh rèiteachadh a riaghladh agus sùil cheart a chumail air atharrachaidhean a chaidh iarraidh bho thagradh gu iarrtas. Buannachd an-còmhnaidh a 'cleachdadh apply is e gu bheil e a’ cumail sùil air sònrachadh a chaidh a chuir an sàs roimhe, a’ leigeil leis fios a bhith aige cuin a thèid feartan sònrachaidh agus eileamaidean rèite a thoirt air falbh gu soilleir. Leigidh seo leat a chleachdadh apply gus togalaichean agus eileamaidean rèite a thoirt air falbh, fhad ‘s nach obraich aonadh ro-innleachdail àbhaisteach. Sgiobaidhean edit и patch Na ùraich na notaichean sin kubectl apply cleachdadh gus sùil a chumail air na h-atharrachaidhean aige, mar sin atharrachaidhean sam bith a thèid a leantainn agus a dhèanamh tro Kubernetes API, ach air an dèanamh tro òrdughan edit и patch, neo-fhaicsinneach do òrdughan às deidh sin apply, is e sin apply cha toir e air falbh iad eadhon ged nach nochd iad anns an t-sònrachadh cuir a-steach airson apply (Tha na sgrìobhainnean ag ràdh sin edit и patch Dèan ùrachadh air na notaichean a chaidh a chleachdadh apply, ach ann an cleachdadh - chan eil).

Mura cleachd thu an àithne apply, faodar a chleachdadh mar edit, agus patch, a’ taghadh an àithne as fheàrr a fhreagras air an atharrachadh a thathar a’ dèanamh. Nuair a bhios tu a’ cur ris agus ag atharrachadh thogalaichean BOM, tha an dà dhòigh-obrach timcheall air an aon rud. Nuair a sguabas tu às feartan sònrachaidh no eileamaidean rèite edit ga ghiùlan fhèin mar chur air bhog aon-ùine apply, a’ toirt a-steach cumail sùil air cò ris a bha an sònrachadh ro agus às deidh a dheasachadh, gus an urrainn dhut feartan agus eileamaidean rèite a thoirt air falbh bho ghoireas. Feumaidh tu luach an togalaich a shuidheachadh gu null anns an t-sònrachadh airson patchgus a thoirt air falbh bhon ghoireas. Tha e nas iom-fhillte a bhith a’ toirt air falbh eileamaid rèite a’ cleachdadh gleusadh aonadh ro-innleachdail leis gu bheil feum air stiùiridhean aonaidh a chleachdadh. Faic dòighean ùrachaidh eile gu h-ìosal airson roghainnean eile a tha nas so-dhèanta.

Gus dòighean ùrachaidh a chuir an gnìomh ann an leabharlann an luchd-cleachdaidh a bhios gan giùlan fhèin san aon dòigh ris na h-òrdughan gu h-àrd kubectl, bu chòir a shuidheachadh ann an iarrtasan content-type в application/strategic-merge-patch+json. Ma tha thu airson feartan ann an sònrachadh a thoirt air falbh, feumaidh tu na luachan aca a shuidheachadh gu neo-eisimeileach san aon dòigh kubectl patch. Ma dh’ fheumas tu eileamaidean rèite a thoirt air falbh, bu chòir dhut stiùiridhean aonaidh a thoirt a-steach don t-sònrachadh ùrachaidh no dòigh-obrach eile a chleachdadh airson ùrachaidhean.

Dòigh eile airson ùrachaidhean

Tha Kubernetes a’ toirt taic do dhà dhòigh ùrachaidh eile: Pìos co-aonaidh JSON и Pìos JSON. Tha an dòigh-obrach aonaidh JSON a’ gabhail a-steach sònrachadh pàirt Kubernetes mar chur-a-steach agus a’ toirt taic do nithean a tha a’ tighinn còmhla coltach ris an dòigh glacaidh aonadh ro-innleachdail. Is e an eadar-dhealachadh eadar an dà rud nach eil e a’ toirt taic ach do chuir an àite array, a’ toirt a-steach an t-sreath de shoithichean anns an t-sònrachadh pod. Tha seo a’ ciallachadh, nuair a bhios tu a’ cleachdadh bad co-aonaidh JSON, gum feum thu mion-chomharrachadh iomlan a thoirt seachad airson a h-uile soitheach gun fhios nach atharraich seilbh sam bith air soitheach. Mar sin tha an dòigh-obrach seo feumail airson eileamaidean a thoirt air falbh bho raon ann am BOM. Air an loidhne-àithne faodaidh tu taghadh JSON merge patch a’ cleachdadh kubectl patch --type=merge. Nuair a bhios tu ag obair leis an Kubernetes API, bu chòir dhut an dòigh iarrtas a chleachdadh PATCH agus stàladh content-type в application/merge-patch+json.

Tha dòigh-obrach paiste JSON, seach a bhith a’ toirt seachad sònrachadh pàirt de ghoireas, a’ cleachdadh a bhith a’ toirt seachad na h-atharrachaidhean a tha thu airson a dhèanamh air a’ ghoireas mar raon, anns a bheil gach eileamaid den raon a’ riochdachadh cunntas air an atharrachadh a thathar a’ dèanamh air a’ ghoireas. Tha an dòigh-obrach seo na dhòigh nas sùbailte agus nas cumhachdaiche air na h-atharrachaidhean a thathar a’ dèanamh a chur an cèill, ach aig cosgais a bhith a’ clàradh na h-atharrachaidhean a thathas a’ dèanamh ann an cruth air leth, neo-Kubernetes, seach a bhith a’ cur sònrachadh goireas pàirt. ANNS kubectl faodaidh tu paiste JSON a thaghadh a’ cleachdadh kubectl patch --type=json. Nuair a bhios tu a’ cleachdadh an Kubernetes API, bidh an dòigh-obrach seo ag obair a’ cleachdadh an dòigh iarrtais PATCH agus stàladh content-type в application/json-patch+json.

Feumaidh sinn misneachd - cleachd fear eile

Ann an cuid de chùisean, feumaidh tu a bhith cinnteach nach eil atharrachadh sam bith air a dhèanamh air goireas eadar an àm a thèid an goireas a leughadh agus nuair a thèid ùrachadh. Ann am faclan eile, bu chòir dhut dèanamh cinnteach gum bi a h-uile atharrachadh atamach. Anns a 'chùis seo, gus goireasan ùrachadh a bu chòir dhut a chleachdadh replace. Mar eisimpleir, ma tha ConfigMap agad le cuntair a tha air ùrachadh le grunn stòran, bu chòir dhut a bhith cinnteach nach ùraich dà stòr a’ chunntair aig an aon àm, ag adhbhrachadh gun tèid an ùrachadh a chall. Gus sealltainn, smaoinich air sreath de thachartasan a’ cleachdadh an dòigh-obrach patch:

  • Bidh A agus B a’ faighinn staid làithreach a’ ghoireas bhon API
  • Bidh gach fear gu h-ionadail ag ùrachadh an t-sònrachadh le bhith ag àrdachadh a’ chunntair le aon agus cuideachd a’ cur “A” no “B” fa leth ris an nota “ùrachadh-by”.
  • Agus bidh e ag ùrachadh an goireas beagan nas luaithe
  • B ag ùrachadh an stòrais

Mar thoradh air an sin, tha ùrachadh A air chall. Obrachadh mu dheireadh patch a’ buannachadh, thèid a’ chunntair àrdachadh le aon seach dhà, agus tha luach an nota “ùrachadh-by” a’ crìochnachadh le “B” agus chan eil “A” ann. Dèanamaid coimeas eadar na tha gu h-àrd agus na thachras nuair a thèid ùrachadh a dhèanamh leis an dòigh-obrach replace:

  • Bidh A agus B a’ faighinn staid làithreach a’ ghoireas bhon API
  • Bidh gach fear gu h-ionadail ag ùrachadh an t-sònrachadh le bhith ag àrdachadh a’ chunntair le aon agus cuideachd a’ cur “A” no “B” fa leth ris an nota “ùrachadh-by”.
  • Agus bidh e ag ùrachadh an goireas beagan nas luaithe
  • Bidh B a’ feuchainn ris a’ ghoireas ùrachadh, ach tha an t-ùrachadh air a dhiùltadh leis an API leis gu bheil an dreach stòrais anns an t-sònrachadh replace chan eil e a' freagairt ris an tionndadh làithreach den ghoireas ann an Kubernetes a chionn 's gun deach an tionndadh den ghoireas àrdachadh le gnìomhachd ùr A.

Anns a’ chùis gu h-àrd, feumaidh B an goireas fhaighinn air ais, atharraichean a dhèanamh air an t-suidheachadh ùr agus feuchainn a-rithist replace. Bidh seo ag adhbhrachadh gum bi a’ chunntair air àrdachadh le dhà agus an nota “ùrachadh-le” a’ toirt a-steach “AB” aig an deireadh.

Tha an eisimpleir gu h-àrd a’ ciallachadh sin nuair a thathar ga chur gu bàs replace Tha an goireas gu lèir air a chuir na àite gu tur. Sònrachadh air a chleachdadh airson replace, chan fhaod a bhith ann am pàirt, no ann am pàirtean mar a tha e apply, ach coileanta, a’ gabhail a-steach cur-ris resourceVersion a-steach don mheata-dàta sònrachadh. Mura h-eil thu air a chomasachadh resourceVersion air neo nach eil an dreach a bheir thu seachad gnàthach, thèid an t-àite ùr a dhiùltadh. Mar sin is e an dòigh as fheàrr air a chleachdadh replace - leugh an goireas, ùraich e agus cuir na àite sa bhad. A 'cleachdadh kubectl, is dòcha gum bi e a’ coimhead mar seo:

$ kubectl get deployment my-deployment -o json 
    | jq '.spec.template.spec.containers[0].env[1].value = "new value"' 
    | kubectl replace -f -

Is fhiach a bhith mothachail gun tèid an dà àithne a leanas, air an cur an gnìomh ann an òrdugh, a chuir an gnìomh gu soirbheachail, bhon uair sin deployment.yaml chan eil seilbh ann .metadata.resourceVersion

$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml

Tha e coltach gu bheil seo a’ dol an-aghaidh na chaidh a ràdh gu h-àrd, i.e. "a' cur resourceVersion a-steach do mheata-dàta an t-sònrachadh." A bheil e ceàrr sin a ràdh? Chan e, chan eil, oir ma tha kubectl brathan nach do shònraich thu resourceVersion, leughaidh e bhon ghoireas e agus cuiridh e ris an t-sònrachadh a shònraich thu, agus dìreach an uairsin cuir an gnìomh e replace. Leis gum faodadh seo a bhith cunnartach ma tha thu an urra ri atomicity, bidh an draoidheachd ag obair gu tur air an taobh kubectl, cha bu chòir dhut a bhith an urra ris nuair a bhios tu a’ cleachdadh leabharlannan teachdaiche a bhios ag obair leis an API. Anns a 'chùis seo feumaidh tu an sònrachadh goireas làithreach a leughadh, ùrachadh agus an uairsin a chur an gnìomh PUT iarrtas.

Chan urrainn dhut bad a dhèanamh - nì sinn fear eile

Aig amannan feumaidh tu atharrachaidhean a dhèanamh nach urrainn an API a làimhseachadh. Anns na cùisean sin, faodaidh tu an goireas a chuir na àite le bhith ga dhubhadh às agus ga ath-chruthachadh. Tha seo air a dhèanamh a 'cleachdadh kubectl replace --force. Le bhith a’ ruith an àithne bheir sin air falbh na goireasan sa bhad agus an uairsin gan ath-chruthachadh bhon t-sònrachadh a chaidh a thoirt seachad. Chan eil inneal-làimhseachaidh “force replace” anns an API, agus gus sin a dhèanamh tron ​​​​API, feumaidh tu dà obair a dhèanamh. An toiseach feumaidh tu an goireas a dhubhadh às le bhith ga shuidheachadh gracePeriodSeconds gu neoni (0) agus propagationPolicy ann an “Cùl-fhiosrachadh” agus an uairsin ath-chruthaich an goireas seo leis an t-sònrachadh a tha thu ag iarraidh.

Rabhadh: Dh’ fhaodadh an dòigh-obrach seo a bhith cunnartach agus dh’ fhaodadh e leantainn gu staid neo-mhìnichte.

Cuir a-steach air taobh an fhrithealaiche

Mar a chaidh ainmeachadh gu h-àrd, tha luchd-leasachaidh Kubernetes ag obair air an loidsig a bhuileachadh apply bho kubectl anns an Kubernetes API. loidsig apply ri fhaighinn ann an Kubernetes 1.18 tro kubectl apply --server-side no tron ​​​​API a’ cleachdadh an dòigh PATCH с content-type application/apply-patch+YAML.

Nota: Tha JSON cuideachd YAML dligheach, gus an urrainn dhut an sònrachadh a chuir mar JSON eadhon ged a bhiodh content-type Bidh application/apply-patch+yaml.

A bharrachd air an loidsig sin kubectl ri fhaighinn leis a h-uile duine tro API, apply air taobh an fhrithealaiche, a’ cumail sùil air cò a tha cunntachail airson na raointean san t-sònrachadh, agus mar sin a’ toirt cothrom air ioma-ruigsinneachd tèarainte airson a dheasachadh gun strì. Ann am faclan eile, ma tha apply air taobh an fhrithealaiche a’ fàs nas fharsainge, nochdaidh eadar-aghaidh riaghlaidh ghoireasan tèarainte uile-choitcheann airson diofar teachdaichean, mar eisimpleir, kubectl, Pulumi no Terraform, GitOps, a bharrachd air sgriobtaichean fèin-sgrìobhte a’ cleachdadh leabharlannan teachdaiche.

Builean

Tha mi an dòchas gun robh an sealladh goirid seo de dhiofar dhòighean air goireasan ùrachadh ann an cruinneachaidhean na chuideachadh dhut. Tha e math fios a bhith agad nach e dìreach tagradh an aghaidh ath-chur a th’ ann; tha e comasach goireas ùrachadh le bhith a’ cleachdadh cuir a-steach, deasachadh, paiste, no cuir an àite. Às deidh na h-uile, ann am prionnsabal, tha a raon tagraidh fhèin aig gach dòigh-obrach. Airson atharrachaidhean atamach, tha e nas fheàrr ath-shuidheachadh; air dhòigh eile, bu chòir dhut paiste aonadh ro-innleachdail a chleachdadh tro thagradh. Aig a’ char as lugha, tha mi an dùil gun tuig thu nach urrainn dhut earbsa a bhith ann an Google no StackOerflow nuair a bhios tu a’ lorg “kubernetes apply vs replace”. Co-dhiù gus an tèid an artaigil seo an àite an fhreagairt làithreach.

Coimeas ceart de Kubernetes Cuir a-steach, Ath-chuir agus Patch

Source: www.habr.com

Cuir beachd ann