Ukuqhathaniswa Okufanelekile kwe-Kubernetes Faka isicelo, Faka esikhundleni kanye nePatch

I-Kubernetes inezinketho ezimbalwa zokubuyekeza izinsiza: sebenzisa, hlela, chibiyela futhi ufake esikhundleni. Kukhona ukudideka mayelana nokuthi ngamunye wenzani nokuthi asetshenziswe nini. Ake sikuthole.

Ukuqhathaniswa Okufanelekile kwe-Kubernetes Faka isicelo, Faka esikhundleni kanye nePatch

Uma sesha ku-Google inkulumo ethi "kubernetes apply vs replace" itholakala phendula ku-StackOverflow, okungalungile. Uma usesha "i-kubernetes apply vs patch" isixhumanisi sokuqala siyimibhalo ye kubectl patch, okungafaki ukuqhathanisa apply ΠΈ patch. Lesi sihloko sizobheka izinketho ezahlukene, kanye nokusetshenziswa ngendlela efanele ngayinye.

Ngesikhathi somjikelezo wempilo wensiza yakwaKubernetes (isevisi, ukuthunyelwa, ukungena, njll.), kwesinye isikhathi udinga ukuguqula, wengeze noma ususe ezinye izakhiwo zalo mthombo. Isibonelo, engeza inothi, wandise noma wehlise inani lezifaniso.

Kubernetes CLI

Uma usuvele usebenza namaqoqo e-Kubernetes nge-CLI, usujwayelene nawo apply ΠΈ edit. Ithimba apply ifunda ukucaciswa kwensiza efayelini futhi yenza "i-upsert" kuqoqo le-Kubernetes, i.e. idala insiza uma ingekho futhi iyibuyekeze uma ikhona. Ithimba edit ifunda insiza nge-API, bese ibhala ukucaciswa kwensiza kufayela lendawo, elibe selivulwa kumhleli wombhalo. Ngemva kokuhlela nokulondoloza ifayela, kubectl izothumela izinguquko ezenziwe emuva nge-API, ezosebenzisa ngokucophelela lezi zinguquko kusisetshenziswa.

Akuwona wonke umuntu owazi imiyalo patch ΠΈ replace. Ithimba patch ikuvumela ukuthi uguqule ingxenye yesicaciso sensiza, unikeze kuphela ingxenye eshintshiwe emugqeni womyalo. Ithimba replace isebenza ngokufanayo edit, kodwa yonke into idinga ukwenziwa ngesandla: udinga ukulanda inguqulo yamanje yokucaciswa kwensiza, isibonelo, usebenzisa kubectl get -o yaml, hlela, bese usebenzisa replace ukuze ubuyekeze insiza ngokuya ngencazelo eshintshile. Ithimba replace ngeke isebenze uma kukhona izinguquko ezenzekayo phakathi kokufunda nokushintsha insiza.

Kubernetes API

Cishe uyazazi izindlela CoreV1().Pods().Update(), replaceNamespacedService noma patch_namespaced_deployment, uma usebenza namaqoqo nge ilabhulali yeklayenti ye-Kubernetes API usebenzisa ulimi oluthile lokuhlela. Umtapo wolwazi uphatha lezi zindlela ngezicelo ze-HTTP usebenzisa izindlela PUT ΠΈ PATCH... Lapho update ΠΈ replace sebenzisa PUT, futhi patch, kungakhathaliseki ukuthi incane kangakanani, isebenzisa PATCH.

Kuyafaneleka ukuphawula lokho kubectl futhi isebenza namaqoqo nge-API. Ngamanye amazwi, kubectliwukugoqa phezu kwelabhulali yeklayenti yolimi lwe-Go, ehlinzeka kakhulu ngamandla okunikeza imiyalo engaphansi ngendlela ehlangene futhi efundekayo ngaphezu kwamakhono ajwayelekile e-API. Ngokwesibonelo, njengoba ungase kakade waphawula, indlela apply akukhulunywanga ngakho ngenhla endimeni edlule. Okwamanje (May 2020, cishe. umhumushi) konke okunengqondo kubectl apply, i.e. ukudala izinsiza ezingekho kanye nokuvuselela ezikhona, kusebenza ngokuphelele ohlangothini lwekhodi kubectl. Imizamo iyenziwa ekudluliselweni okunengqondo apply ohlangothini lwe-API, kodwa iseku-beta. Ngizobhala kabanzi ngezansi.

Patch ngokuzenzakalelayo

Okusetshenziswe kakhulu patch, uma ufuna ukubuyekeza insiza. Lena yindlela yomibili imitapo yolwazi yamaklayenti esebenza ngaphezulu kwe-Kubernetes API kanye kubectl (akumangazi, ngoba kuyisiphephelo selabhulali yeklayenti, cishe. umhumushi).

Sebenza ngamasu

Wonke amaqembu kubectl apply, edit ΠΈ patch sebenzisa indlela PATCH ezicelweni ze-HTTP zokuvuselela insiza ekhona. Uma uhlolisisa ukuqaliswa kwemiyalo ngokuningiliziwe, khona-ke bonke basebenzisa indlela i-strategic-merge patching ukuze ubuyekeze izinsiza, nakuba umyalo patch ingase isebenzise ezinye izindlela (ngaphezulu kulokhu ngezansi). Indlela yokuhlanganisa amasu izama "ukuyilungisa" ngokuhlanganisa ukucaciswa okunikeziwe nokucaciswa okukhona. Ngokuqondile, izama ukuhlanganisa kokubili izinto nezinhlaka, okusho ukuthi izinguquko zivamise ukungezwa. Isibonelo, ukusebenzisa umyalo patch ngokushintshashintsha kwemvelo okusha ekucacisweni kwesiqukathi se-pod, kubangela ukuthi okuguquguqukayo kwemvelo kwengezwe ezintweni eziguquguqukayo zemvelo ezikhona esikhundleni sokuzibhala ngaphezulu. Ukuze ususe usebenzisa le ndlela, kufanele uphoqe inani lepharamitha ukuthi lingasebenzi esicacisweni esinikeziwe. Imaphi emaqenjini kubectl Ingabe kungcono ukusebenzisela ukubuyekeza?

Uma udala futhi uphatha izinsiza zakho usebenzisa kubectl apply, lapho ubuyekeza kungcono ukusebenzisa njalo kubectl applykuya kubectl ingaphatha ukucushwa futhi ilandelele kahle izinguquko eziceliwe kusuka kuhlelo lokusebenza kuya kuhlelo lokusebenza. I-Advantage sebenzisa njalo apply ukuthi ilandelela ukucaciswa okusetshenziswe ngaphambilini, ukuyivumela ukuthi yazi lapho izici zokucaciswa kanye nama-elementi angamalungu afanayo kususwa ngokusobala. Lokhu kukuvumela ukuthi usebenzise apply ukususa izakhiwo kanye nezakhi zamalungu afanayo, kuyilapho ukuhlanganisa okujwayelekile kwamasu ngeke kusebenze. Amaqembu edit ΠΈ patch ungabuyekezi amanothi ukuthi kubectl apply isebenzisa ukulandelela izinguquko zayo, ngakho-ke noma yiziphi izinguquko ezilandelwayo futhi ezenziwe nge-Kubernetes API, kodwa ezenziwe ngemiyalo edit ΠΈ patch, engabonakali emiyalweni elandelayo apply, okungukuthi apply ayizisusi ngisho noma zingaveli ekucacisweni okokufaka kwazo apply (Imibhalo isho lokho edit ΠΈ patch yenza izibuyekezo kumanothi asetshenzisiwe apply, kodwa ngokusebenza - cha).

Uma ungawusebenzisi umyalo apply, ingasetshenziswa njenge edit, futhi patch, ukukhetha umyalo olufanele kangcono ushintsho olwenziwayo. Lapho ungeza futhi ushintsha izakhiwo ze-BOM, zombili izindlela zicishe zifane. Lapho ususa izici ezicacisiwe noma izakhi zamalungu afanayo edit iziphatha njengokwethulwa kwesikhathi esisodwa apply, okuhlanganisa ukulandelela ukuthi ukucaciswa kwakunjani ngaphambi nangemuva kokuthi kuhlelwe, ukuze ukwazi ukususa ngokusobala izakhiwo kanye nezici zamalungu afanayo kusisetshenziswa. Udinga ukusetha ngokusobala inani lesakhiwo ukuze ungasebenzi ekucacisweni kwaso patchukuyisusa esisetshenziswa. Ukususa i-elementi yamalungu afanayo kusetshenziswa ukupheshana kwe-strategic-merge kuyinkimbinkimbi kakhulu ngoba kudinga ukusetshenziswa kweziqondiso zokuhlanganisa. Bona ezinye izindlela zokuthuthukisa ngezansi ukuze uthole ezinye izindlela ezisebenzisekayo.

Ukuze usebenzise izindlela zokuvuselela kulabhulali yeklayenti eziziphatha ngendlela efanayo nemiyalo engenhla kubectl, kufanele ibekwe ezicelweni content-type Π² application/strategic-merge-patch+json. Uma ufuna ukususa izakhiwo ngendlela ethile, udinga ukubeka ngokucacile amanani azo ukuze angasebenzi ngendlela efanayo. kubectl patch. Uma udinga ukususa ama-elementi angamalungu afanayo, kufanele ufake iziqondiso zokuhlanganisa ekucacisweni kwesibuyekezo noma usebenzise indlela ehlukile yezibuyekezo.

Ezinye izindlela zokuvuselela

I-Kubernetes isekela ezinye izindlela ezimbili zokuvuselela: I-JSON hlanganisa ipheshi ΠΈ Isiqephu se-JSON. Indlela yokuhlanganisa i-JSON ithatha ukucaciswa kwe-Kubernetes okuncane njengokufakwayo futhi isekela ukuhlanganisa izinto ezifana nendlela yokuhlanganisa yesu. Umehluko phakathi kwakho kokubili ukuthi isekela kuphela ukushintshwa kwamalungu afanayo, okuhlanganisa uhlu lwesiqukathi ekucacisweni kwe-pod. Lokhu kusho ukuthi uma usebenzisa ipheshi yokuhlanganisa i-JSON, udinga ukuhlinzeka ngemininingwane ephelele yazo zonke iziqukathi uma kwenzeka noma yisiphi isici sanoma yisiphi isiqukathi sishintsha. Ngakho-ke le ndlela ilusizo ekususeni izakhi ohlwini ku-BOM. Emugqeni womyalo ungakhetha i-JSON yokuhlanganisa isichibi usebenzisa kubectl patch --type=merge. Lapho usebenza ne-Kubernetes API, kufanele usebenzise indlela yokucela PATCH kanye nokufakwa content-type Π² application/merge-patch+json.

Indlela yesichibi ye-JSON, kunokuba inikeze ukucaciswa okuyingxenye kwensiza, isebenzisa ukuhlinzeka ngezinguquko ofuna ukuzenza esisetshenziswa njengohlelo, lapho ingxenye ngayinye yamalungu afanayo imelela incazelo yoshintsho olwenziwa esisetshenziswa. Le ndlela iyindlela eguquguqukayo futhi enamandla yokuveza izinguquko ezenziwayo, kodwa ngezindleko zokufakwa kuhlu izinguquko ezenziwa ngefomethi ehlukile, engeyona eye-Kubernetes, kunokuthumela ukucaciswa kwensiza ingxenye. IN kubectl ungakhetha isichibi se-JSON usebenzisa kubectl patch --type=json. Uma usebenzisa i-Kubernetes API, le ndlela isebenza kusetshenziswa indlela yokucela PATCH kanye nokufakwa content-type Π² application/json-patch+json.

Sidinga ukuzethemba - sebenzisa esikhundleni

Kwezinye izimo, udinga ukuqiniseka ukuthi azikho izinguquko ezenziwa esisetshenziswa phakathi nesikhathi sokufundwa kwensiza nalapho ibuyekezwa. Ngamanye amazwi, kufanele uqiniseke ukuthi zonke izinguquko zizoba i-athomu. Kulokhu, ukuvuselela izinsiza kufanele usebenzise replace. Isibonelo, uma une-ConfigMap enekhawunta ebuyekezwa imithombo eminingi, kufanele uqiniseke ukuthi imithombo emibili ayibuyekezi ikhawunta ngesikhathi esisodwa, okwenza ukuthi isibuyekezo silahleke. Ukuze ubonise, cabanga ngokulandelana kwezenzakalo usebenzisa indlela patch:

  • U-A no-B bathola isimo samanje sensiza ku-API
  • Ngayinye endaweni ibuyekeza ukucaciswa ngokukhuphula ikhawunta ngayinye futhi ingeze okuthi "A" noma "B" ngokulandelana kunothi "elibuyekeziwe"
  • Futhi ibuyekeza insiza ngokushesha kancane
  • B ubuyekeza insiza

Ngenxa yalokho, isibuyekezo esingu-A silahlekile. Ukusebenza kokugcina patch iwina, ikhawunta inyuswa ngokukodwa esikhundleni sokubili, futhi inani lenothi "elibuyekeziwe" ligcina ngokuthi "B" futhi aliqukethe u-"A". Ake siqhathanise lokhu okungenhla nalokho okwenzekayo lapho ukubuyekezwa kwenziwa kusetshenziswa indlela replace:

  • U-A no-B bathola isimo samanje sensiza ku-API
  • Ngayinye endaweni ibuyekeza ukucaciswa ngokukhuphula ikhawunta ngayinye futhi ingeze okuthi "A" noma "B" ngokulandelana kunothi "elibuyekeziwe"
  • Futhi ibuyekeza insiza ngokushesha kancane
  • U-B uzama ukubuyekeza isisetshenziswa, kodwa isibuyekezo sinqatshwa i-API ngoba inguqulo yesisetshenziswa isesimisweni. replace ayifani nenguqulo yamanje yesisetshenziswa ku-Kubernetes ngenxa yokuthi inguqulo yesisetshenziswa inyuswe ngokushintsha kuka-A.

Esimeni esingenhla, u-B kuzodingeka aphinde alande insiza, enze izinguquko kusimo esisha bese uzama futhi replace. Lokhu kuzodala ukuthi ikhawunta inyuswe ngamabili kanye nenothi "elibuyekeziwe" lifake u-"AB" ekugcineni.

Isibonelo esingenhla sisho ukuthi lapho kwenziwa replace Yonke insiza ishintshwa ngokuphelele. Ukucaciswa okusetshenziselwa replace, akufanele kube ingxenye, noma izingxenye njengoba in apply, kodwa ephelele, kuhlanganise nokwengezwa resourceVersion kumethadatha ecacisiwe. Uma ungakayivuli amandla resourceVersion noma inguqulo oyinikezayo akuyona eyamanje, ukumiselela kuzonqatshwa. Ngakho-ke indlela engcono kakhulu yokuyisebenzisa replace - funda insiza, uyibuyekeze bese uyibuyisela ngokushesha. Ukusebenzisa kubectl, kungase kubukeke kanje:

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

Kuyaphawuleka ukuthi imiyalo emibili elandelayo, ekhishwe ngokulandelana, izosebenza ngempumelelo, ngoba deployment.yaml ayiqukethe impahla .metadata.resourceVersion

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

Lokhu kungase kubonakale kuphikisana nalokho okushiwo ngenhla, i.e. "engeza resourceVersion kumethadatha ecacisiwe." Ingabe akulungile ukusho lokho? Cha, akunjalo, ngoba uma kubectl izaziso ongazicacisanga resourceVersion, izoyifunda kusisetshenziswa bese ikwengeza esimisweni esicacisile, bese sikwenza kuphela replace. Ngoba lokhu kungaba yingozi uma uthembele ku-atomicity, umlingo usebenza ngokuphelele ohlangothini kubectl, akufanele uthembele kuyo lapho usebenzisa amalabhulali eklayenti asebenza ne-API. Kulokhu kuzodingeka ufunde ukucaciswa kwensiza yamanje, uyibuyekeze bese uyayenza PUT isicelo.

Awukwazi ukwenza ipheshi - sishintsha

Kwesinye isikhathi udinga ukwenza izinguquko ezithile ezingakwazi ukusingathwa yi-API. Kulezi zimo, ungaphoqa ukushintshwa kwesisetshenziswa ngokususa futhi usenze kabusha. Lokhu kwenziwa ngokusebenzisa kubectl replace --force. Ukuqalisa umyalo kususa izinsiza ngokushesha bese kuphinda kuzenze zisuka kuncazelo enikeziwe. Asikho isibambi "sokubuyisela amandla" ku-API, futhi ukuze wenze kanjalo nge-API, udinga ukwenza imisebenzi emibili. Okokuqala udinga ukususa insiza ngokuyilungiselela gracePeriodSeconds ku-zero (0) kanye propagationPolicy kokuthi "Ingemuva" bese udala kabusha lesi sisetshenziswa ngokucaciswa okufunayo.

Isexwayiso: Le ndlela ingaba yingozi futhi ingase iholele esimweni esingachazwanga.

Faka isicelo ohlangothini lweseva

Njengoba kushiwo ngenhla, abathuthukisi be-Kubernetes basebenzela ukusebenzisa i-logic apply kusuka ku kubectl ku-Kubernetes API. Amacebo apply itholakala ku-Kubernetes 1.18 nge kubectl apply --server-side noma nge-API usebenzisa indlela PATCH с content-type application/apply-patch+YAML.

Qaphela: I-JSON nayo iyi-YAML evumelekile, ngakho ungathumela ukucaciswa njenge-JSON noma ngabe content-type kuyoba application/apply-patch+yaml.

Ngaphandle kwalokho logic kubectl itholakala kuwo wonke umuntu nge-API, apply ohlangothini lweseva, ilandelela ukuthi ubani onesibopho sezinkambu ezicacisweni, ngaleyo ndlela ivumele ukufinyelela okuvikelekile okuningi ekuhleleni kwayo okungenangxabano. Ngamanye amazwi, uma apply ohlangothini lweseva luzosakazeka kakhulu, kuzovela isixhumi esibonakalayo sokuphathwa kwezinsiza ezivikelekile emhlabeni wonke kumakhasimende ahlukene, isibonelo, i-kubectl, i-Pulumi noma i-Terraform, i-GitOps, kanye nemibhalo ezibhala yona kusetshenziswa imitapo yolwazi yamakhasimende.

Imiphumela

Ngethemba ukuthi lokhu kubuka konke okufushane kwezindlela ezahlukene zokubuyekeza izinsiza kumaqoqo kube wusizo kuwe. Kuhle ukwazi ukuthi akusebenzi kuphela uma kuqhathaniswa nokushintshanisa; kungenzeka ukubuyekeza insiza usebenzisa ukufaka, ukuhlela, ukuchibiyela, noma ukufaka esikhundleni. Phela, ngokomthetho, indlela ngayinye inendawo yayo yokufaka isicelo. Ngezinguquko ze-athomu, ukushintshwa kuyancomeka; ngaphandle kwalokho, kufanele usebenzise isiqephu sokuhlanganisa samasu ngokufaka isicelo. Okungenani, ngilindele ukuthi uqonde ukuthi awukwazi ukwethemba i-Google noma i-StackOerflow lapho usesha okuthi "kubernetes apply vs replace". Okungenani kuze kube yilapho lesi sihloko sithatha isikhundla sempendulo yamanje.

Ukuqhathaniswa Okufanelekile kwe-Kubernetes Faka isicelo, Faka esikhundleni kanye nePatch

Source: www.habr.com

Engeza amazwana