Ntụle kwesịrị ekwesị nke Kubernetes Tinye, Dochie na Patch

Kubernetes nwere ọtụtụ nhọrọ maka imelite akụrụngwa: tinye, dezie, kwachie na dochie. Enwere mgbagwoju anya banyere ihe onye ọ bụla na-eme na mgbe a ga-eji ha eme ihe. Ka anyị chọpụta ya.

Ntụle kwesịrị ekwesị nke Kubernetes Tinye, Dochie na Patch

ma ọ bụrụ na chọọ na Google Nkebi ahịrịokwu "kubernetes apply vs replace" dị zaghachi StackOverflow, nke na-ezighi ezi. Mgbe ị na-achọ "kubernetes apply vs patch" njikọ mbụ bụ akwụkwọ maka kubectl patch, nke na-agụnyeghị ntụnyere apply и patch. Isiokwu a ga-eleba anya na nhọrọ dị iche iche, yana ojiji nke ọ bụla kwesịrị ekwesị.

N'ime usoro ndụ nke akụ Kubernetes (ọrụ, ntinye, ntinye, wdg), mgbe ụfọdụ ịkwesịrị ịgbanwe, gbakwunye ma ọ bụ wepu ụfọdụ akụrụngwa nke akụrụngwa a. Dịka ọmụmaatụ, tinye ndetu, bulie ma ọ bụ belata ọnụ ọgụgụ nke oyiri.

Ụlọ ọrụ Kubernetes CLI

Ọ bụrụ na ị na-arụkọ ọrụ na ụyọkọ Kubernetes site na CLI, ị maralarị nke ọma apply и edit. Otu apply na-agụ nkọwapụta akụrụngwa sitere na faịlụ ahụ wee mee “mmelite” na ụyọkọ Kubernetes, ya bụ. na-emepụta akụrụngwa ma ọ bụrụ na ọ dịghị ma na-emelite ya ma ọ bụrụ na ọ dị. Otu edit na-agụ akụrụngwa site na API, wee dee nkọwapụta akụrụngwa na faịlụ mpaghara, nke meghere na ndezi ederede. Mgbe ị dezie ma chekwaa faịlụ ahụ, kubectl ga-eziga mgbanwe ndị e mere azụ site na API, nke ga-eji nlezianya tinye mgbanwe ndị a na akụrụngwa.

Ọ bụghị onye ọ bụla maara iwu patch и replace. Otu patch na-enye gị ohere ịgbanwe akụkụ nke nkọwapụta akụrụngwa, na-enye naanị akụkụ gbanwere na ahịrị iwu. Otu replace na-arụ ọrụ otu ihe ahụ edit, mana ihe niile kwesịrị ka ejiri aka mee ya: ịkwesịrị ibudata ụdị nkọwapụta ihe onwunwe ugbu a, dịka ọmụmaatụ, iji. kubectl get -o yaml, dezie ya, wee jiri replace imelite akụrụngwa dịka nkọwapụta gbanwere si dị. Otu replace agaghị arụ ọrụ ma ọ bụrụ na mgbanwe ọ bụla mere n'etiti ịgụ na dochie akụrụngwa.

Kubernetes API

Eleghị anya ị maara usoro ndị ahụ CoreV1().Pods().Update(), replaceNamespacedService ma ọ bụ patch_namespaced_deployment, ma ọ bụrụ na ị na-arụ ọrụ na ụyọkọ via Ọbá akwụkwọ ndị ahịa maka Kubernetes API iji ụfọdụ asụsụ mmemme. Ọbá akwụkwọ na-ejikwa usoro ndị a site na arịrịọ HTTP site na iji usoro ndị a PUT и PATCH... N'ime ya update и replace jiri PUTna patch, n'agbanyeghị otú ọ pụrụ ịbụ obere ihe, na-eji PATCH.

Ekwesiri ighota na kubectl na-arụkwa ọrụ na ụyọkọ site na API. Yabụ, kubectlbụ ihe mkpuchi n'elu ọba akwụkwọ ndị ahịa maka asụsụ Go, nke na-enyekarị ikike ịnye iwu subcommands n'ụdị kọmpat na nke enwere ike ịgụ na mgbakwunye na ike API ọkọlọtọ. Dịka ọmụmaatụ, dịka ị chọpụtala, usoro ahụ apply ekwughị n'elu na paragraf gara aga. Ugbu a (Mee 2020, ihe ruru. onye ntụgharị okwu) niile mgbagha kubectl apply, i.e. ịmepụta akụrụngwa na-adịghị adị na imelite ndị dị adị, na-arụ ọrụ kpamkpam n'akụkụ koodu kubectl. A na-eme mgbalị na mgbagha nyefe apply n'akụkụ API, mana ọ ka nọ na beta. M ga-ede n'ụzọ zuru ezu n'okpuru.

Patch na ndabara

Eji kacha mma patch, ma ọ bụrụ na ị chọrọ imelite akụrụngwa. Nke a bụ ka ụlọ akwụkwọ ndị ahịa abụọ si arụ ọrụ n'elu Kubernetes API na kubectl (ọ bụghị ihe ijuanya, ebe ọ bụ ihe mkpuchi maka ụlọ akwụkwọ ndị ahịa, ihe ruru. onye ntụgharị okwu).

Na-arụ ọrụ nke ọma

Otu niile kubectl apply, edit и patch jiri usoro PATCH na arịrịọ HTTP ka imelite akụrụngwa dị. Ọ bụrụ na ị banye n'ime mmejuputa iwu n'ụzọ zuru ezu, mgbe ahụ ha niile na-eji usoro ahụ stratejik-jikota patching imelite akụrụngwa, ọ bụ ezie na iwu ahụ patch nwere ike iji usoro ndị ọzọ (karịa na nke a n'okpuru). Ụzọ nchikota stratejik-jikọrọ ọnụ na-anwa "ịme ya nke ọma" site na ijikọ nkọwapụta enyere na nkọwapụta dị ugbu a. Kpọmkwem, ọ na-agba mbọ ijikọta ma ihe na arrays, nke pụtara na mgbanwe na-abụkarị mgbakwunye. Dịka ọmụmaatụ, na-agba ọsọ iwu patch na mgbanwe gburugburu ebe obibi ọhụrụ n'ime nkọwapụta akpa akpa ahụ, na-eme ka agbakwunye mgbanwe gburugburu ebe obibi na mgbanwe gburugburu ebe obibi karịa idegharị ha. Iji wepuo usoro a, ị ga-amanye uru paramita ahụ ka ọ ghara imebi na nkọwapụta enyere. Kedu nke otu kubectl Ọ kacha mma iji maka mmelite?

Ọ bụrụ na ị na-emepụta ma jikwaa akụrụngwa gị site na iji kubectl apply, mgbe emelite ọ ka mma iji mgbe niile kubectl applyka ọ were kubectl nwere ike ijikwa nhazi yana soro mgbanwe ndị a rịọrọ nke ọma site na ngwa gaa na ngwa. Uru mgbe niile na-eji apply bụ na ọ na-edobe nkọwapụta nke etinyere na mbụ, na-enye ya ohere ịmara mgbe ewepụrụ ihe njirimara na ihe n'usoro n'ụzọ doro anya. Nke a na-enye gị ohere iji apply iji wepụ ihe onwunwe na ihe n'usoro, ebe njikọta usoro nkịtị agaghị arụ ọrụ. Otu egwuregwu edit и patch emelitela ndetu na kubectl apply na-eji soro mgbanwe ya, yabụ mgbanwe ọ bụla a na-enyocha ma mee site na Kubernetes API, mana emere site na iwu. edit и patch, adịghị ahụ anya nye iwu ndị na-esote apply, nke ahụ bụ apply anaghị ewepụ ha ọbụlagodi na ha egosighi na nkọwapụta ntinye maka apply (Akwụkwọ ahụ kwuru na edit и patch mee mmelite na ndetu eji apply, ma na omume - mba).

Ọ bụrụ na ị naghị eji iwu ahụ apply, enwere ike iji ya edit, na patch, na-ahọrọ iwu kachasị mma maka mgbanwe a na-eme. Mgbe ị na-agbakwunye ma na-agbanwe ihe onwunwe BOM, ụzọ abụọ ahụ bụ otu ihe. Mgbe ị na-ehichapụ njirimara nkọwapụta ma ọ bụ ihe n'usoro edit na-akpa àgwà dị ka mmalite otu oge apply, gụnyere idobe ihe nkọwapụta dị ka tupu na mgbe edezichara ya, yabụ ị nwere ike wepu ihe onwunwe na ihe n'usoro n'ụzọ doro anya na akụrụngwa. Ịkwesịrị ịtọ uru ụlọ n'ụzọ doro anya ka ọ ghara imebi na nkọwapụta maka patchiji wepu ya na akụrụngwa. Iwepu ihe n'usoro site na iji patching strategic-merge patching dị mgbagwoju anya karịa n'ihi na ọ chọrọ iji ntuziaka njikọta. Hụ usoro nkwalite ndị ọzọ n'okpuru maka ụzọ ndị ọzọ bara uru.

Iji mejuputa usoro mmelite n'ọbá akwụkwọ ndị ahịa na-akpa àgwà yiri nke iwu ndị dị n'elu kubectl, kwesịrị ịtọ na arịrịọ content-type в application/strategic-merge-patch+json. Ọ bụrụ na ịchọrọ iwepụ ihe onwunwe na nkọwapụta, ịkwesịrị ịtọpụta ụkpụrụ ha n'ụzọ doro anya ka ọ ghara imebi n'ụzọ yiri nke ahụ. kubectl patch. Ọ bụrụ na ịchọrọ iwepụ ihe n'usoro, ị kwesịrị ịtinye ntuziaka njikọ na nkọwapụta mmelite ma ọ bụ jiri ụzọ dị iche maka mmelite.

Ụzọ ndị ọzọ maka mmelite

Kubernetes na-akwado ụzọ mmelite abụọ ọzọ: JSON jikota kwachie и JSON patch. Ụzọ nchikota JSON na-ewe nkọwapụta Kubernetes akụkụ dị ka ntinye ma na-akwado ijikọta ihe ndị yiri usoro nchikota atụmatụ. Ọdịiche dị n'etiti ha abụọ bụ na ọ na-akwado naanị ngbanwe n'usoro, gụnyere akpa n'usoro na nkọwapụta pod. Nke a pụtara na mgbe ị na-eji patch JSON jikọtara ọnụ, ịkwesịrị ịnye nkọwa zuru oke maka akpa niile ma ọ bụrụ na akụrụngwa ọ bụla gbanwere. Ya mere, usoro a bara uru maka iwepụ ihe dị n'usoro na BOM. N'ahịrị iwu ị nwere ike họrọ patch jikota JSON site na iji kubectl patch --type=merge. Mgbe ị na-arụ ọrụ na Kubernetes API, ị ga-eji usoro arịrịọ PATCH na echichi content-type в application/merge-patch+json.

Ụzọ patch JSON, kama ịnye nkọwapụta akụkụ nke akụrụngwa, na-eji inye mgbanwe ndị ịchọrọ ịme na akụrụngwa dị ka nhazi, nke akụkụ ọ bụla nke nhazi ahụ na-anọchi anya nkọwa mgbanwe a na-eme na akụrụngwa. Usoro a bụ ụzọ dị mfe ma dị ike iji gosipụta mgbanwe ndị a na-eme, ma na ọnụ ahịa nke ịdepụta mgbanwe ndị a na-eme n'ụdị dị iche iche, na-abụghị Kubernetes, kama iziga nkọwapụta ihe onwunwe. N'ime kubectl ị nwere ike họrọ patch JSON site na iji kubectl patch --type=json. Mgbe ị na-eji Kubernetes API, usoro a na-arụ ọrụ site na iji usoro arịrịọ PATCH na echichi content-type в application/json-patch+json.

Anyị kwesịrị ntụkwasị obi - jiri dochie anya

N'ọnọdụ ụfọdụ, ịkwesịrị ijide n'aka na ọ nweghị mgbanwe ọ bụla a na-eme na akụrụngwa n'etiti oge a na-agụ akụrụngwa na mgbe emelitere ya. N'ikwu ya n'ụzọ ọzọ, ị kwesịrị ijide n'aka na mgbanwe niile ga-abụ atomic. N'okwu a, iji melite akụrụngwa ị ga-eji replace. Dịka ọmụmaatụ, ọ bụrụ na ị nwere ConfigMap nwere counter nke ọtụtụ isi mmalite na-emelite, ị kwesịrị ijide n'aka na isi mmalite abụọ anaghị emelite counter n'otu oge, na-eme ka mmelite ahụ pụọ. Iji gosi, were usoro ihe omume were ụzọ patch:

  • A na B na-enweta ọnọdụ akụrụngwa ugbu a site na API
  • Onye ọ bụla n'ime obodo na-emelite nkọwapụta site n'ịkwalite counter otu yana tinyekwa "A" ma ọ bụ "B" n'otu n'otu na ndetu "emelitere-site"
  • Ma ọ na-emelite akụrụngwa ntakịrị ngwa ngwa
  • B na-emelite akụrụngwa

N'ihi ya, mmelite A efuola. Ọrụ ikpeazụ patch merie, a na-abawanye counter ahụ site na otu kama ịbụ abụọ, uru nke ndetu "emelitere-site" na-ejedebe na "B" na enweghị "A". Ka anyị tulee ihe ndị a dị n'elu na ihe na-eme mgbe emelite mmelite site na iji ụzọ replace:

  • A na B na-enweta ọnọdụ akụrụngwa ugbu a site na API
  • Onye ọ bụla n'ime obodo na-emelite nkọwapụta site n'ịkwalite counter otu yana tinyekwa "A" ma ọ bụ "B" n'otu n'otu na ndetu "emelitere-site"
  • Ma ọ na-emelite akụrụngwa ntakịrị ngwa ngwa
  • B na-agbalị imelite akụrụngwa, mana API jụrụ mmelite ahụ n'ihi na ụdị akụrụngwa dị na nkọwapụta replace adabaghị na ụdị akụ dị ugbu a dị na Kubernetes n'ihi na ejiri ọrụ nnọchi A na-abawanye ụdị akụrụngwa ahụ.

N'okwu a dị n'elu, B ga-eweghachite akụrụngwa, mee mgbanwe na steeti ọhụrụ wee nwaa ọzọ replace. Nke a ga-eme ka ọnụọgụ abụọ mụbaa counter yana ndetu "emelitere-site" gụnyere "AB" na njedebe.

Ihe atụ dị n'elu na-egosi na mgbe a na-eme ihe replace A na-edochi anya akụrụngwa niile kpamkpam. A na-eji nkọwapụta replace, ekwesịghị ịbụ ele mmadụ anya n'ihu, ma ọ bụ n'akụkụ dị ka n'ime apply, ma zuru ezu, gụnyere mgbakwunye resourceVersion n'ime metadata nkọwapụta. Ọ bụrụ na ịgbanyebeghị resourceVersion ma ọ bụ ụdị nke ị nyere adịghị ugbu a, a ga-ajụ onye nọchiri ya. Ya mere, ụzọ kacha mma iji bụ replace - gụọ akụrụngwa, melite ya ma dochie ya ozugbo. Iji kubectl, ọ nwere ike ịdị ka nke a:

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

Ọ dị mma ịmara na iwu abụọ ndị a, nke emebere n'usoro, ga-emezu nke ọma, ebe ọ bụ na deployment.yaml enweghị ihe onwunwe .metadata.resourceVersion

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

Nke a ga-adị ka ọ na-emegide ihe ekwuru n'elu, ya bụ. "na-agbakwụnye resourceVersion n'ime metadata nkọwapụta." Ọ dị njọ ikwu nke ahụ? Mba, ọ bụghị, n'ihi na ọ bụrụ kubectl na-achọpụta na ị kọwaghị ya resourceVersion, ọ ga-agụ ya site na akụrụngwa wee tinye ya na nkọwapụta nke ị kwuru, ma mechaa mebie ya replace. N'ihi na nke a nwere ike ịdị ize ndụ ma ọ bụrụ na ị dabere na atomity, anwansi na-arụ ọrụ kpamkpam n'akụkụ kubectl, ịkwesighi ịdabere na ya mgbe ị na-eji ọba akwụkwọ ndị ahịa na-arụ ọrụ na API. N'okwu a, ị ga-agụ nkọwapụta akụrụngwa ugbu a, melite ya wee mebie ya PUT arịrịọ.

Ị pụghị ime patch - anyị na-eme nnọchi

Mgbe ụfọdụ, ịkwesịrị ịme mgbanwe ụfọdụ API enweghị ike ijikwa. N'ọnọdụ ndị a, ịnwere ike ịmanye nnọchi nke akụrụngwa site na ihichapụ na megharịa ya ọzọ. A na-eme nke a site na iji kubectl replace --force. Ịgba iwu ahụ ozugbo wepụrụ akụrụngwa wee megharịa ha na nkọwapụta enyere. Enweghị onye njikwa "ike dochie" na API, na iji mee ya site na API, ịkwesịrị ịrụ ọrụ abụọ. Mbụ ị ga-ehichapụ ihe onwunwe site na ịtọ maka ya gracePeriodSeconds ruo efu (0) na propagationPolicy na "Background" wee megharịa akụrụngwa a na nkọwapụta achọrọ.

Ịdọ aka ná ntị: Ụzọ a nwere ike ịdị ize ndụ ma nwee ike ibute ọnọdụ enweghị nkọwa.

Tinye n'akụkụ ihe nkesa

Dị ka e kwuru n'elu, ndị mmepe Kubernetes na-arụ ọrụ iji mejuputa echiche ahụ apply si kubectl na Kubernetes API. Ezi uche apply dị na Kubernetes 1.18 site na kubectl apply --server-side ma ọ bụ site na API site na iji usoro PATCH с content-type application/apply-patch+YAML.

Mara: JSON dịkwa mma YAML, yabụ ị nwere ike izipu nkọwapụta dị ka JSON ọbụlagodi content-type ga- application/apply-patch+yaml.

E wezụga mgbagha ahụ kubectl na-adị onye ọ bụla site na API, apply na nkesa n'akụkụ, na-esochi nke onye na-ahụ maka ubi na nkọwapụta, otú ikwe ka echekwabara otutu ohere maka ya esemokwu-free edezi. N'ikwu ya n'ụzọ ọzọ, ọ bụrụ apply n'akụkụ ihe nkesa ga-agbasawanye ebe niile, njikwa ihe njikwa ihe onwunwe zuru ụwa ọnụ ga-apụta maka ndị ahịa dị iche iche, dịka ọmụmaatụ, kubectl, Pulumi ma ọ bụ Terraform, GitOps, yana edemede nke onwe ya na-eji ụlọ akwụkwọ ndị ahịa.

Nsonaazụ

Enwere m olileanya na nlebanya dị mkpirikpi a nke ụzọ dị iche iche isi melite akụrụngwa na ụyọkọ nyere gị aka. Ọ dị mma ịmara na ọ bụghị naanị itinye n'ọnọdụ dochie ya, enwere ike imelite akụrụngwa site na iji tinye, dezie, kpachie ma ọ bụ dochie ya. E kwuwerị, n'ụkpụrụ, usoro ọ bụla nwere mpaghara nke ya. Maka mgbanwe atọm, ọ ka mma dochie anya, ma ọ bụghị ya, ị ga-eji patch-jikota site na itinye. Ma ọ dịkarịa ala, a na m atụ anya ka ị ghọta na ị nweghị ike ịtụkwasị Google obi ma ọ bụ StackOerflow mgbe ị na-achọ "kubernetes apply vs replace". Opekempe ruo mgbe akụkọ a ga-anọchi azịza dị ugbu a.

Ntụle kwesịrị ekwesị nke Kubernetes Tinye, Dochie na Patch

isi: www.habr.com

Tinye a comment