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.
ma 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 PUT
и PATCH
... Far an robh update
и replace
cleachdadh PUT
agus 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, kubectl
na 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 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 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 apply
gu 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 patch
gus 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: 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
Bidhapplication/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.
Source: www.habr.com