I-Kubernetes inezinketho ezimbalwa zokubuyekeza izinsiza: sebenzisa, hlela, chibiyela futhi ufake esikhundleni. Kukhona ukudideka mayelana nokuthi ngamunye wenzani nokuthi asetshenziswe nini. Ake sikuthole.
Uma 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 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, kubectl
iwukugoqa 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 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 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 apply
kuya 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 patch
ukuyisusa 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: 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
kuyobaapplication/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.
Source: www.habr.com