Isbarbardhigga saxda ah ee Kubernetes Codso, Beddel oo Patch

Kubernetes waxa ay haysataa dhawr ikhtiyaar oo lagu cusboonaysiinayo agabka: codso, wax ka beddel, balastar iyo beddel. Waxaa jira jahawareer ku saabsan mid walba waxa uu sameeyo iyo goorta la isticmaalayo. Aynu ogaano.

Isbarbardhigga saxda ah ee Kubernetes Codso, Beddel oo Patch

haddii ka raadi Google weedha "kubernetes apply vs replace" waxay ku taal uga jawaab StackOverflow, taas oo aan sax ahayn. Marka la raadinayo "kubernetes apply vs patch" isku xirka ugu horeeya waa dukumentiyada kubectl patch, taas oo aan ku jirin isbarbardhigga apply ΠΈ patch. Maqaalkani wuxuu eegi doonaa fursadaha kala duwan, iyo sidoo kale isticmaalka habboon ee mid kasta.

Inta lagu jiro meertada noloshu ee kheyraadka Kubernetes (adeegga, geynta, soo gelida, iwm.), marmarka qaarkood waxaad u baahan tahay inaad bedesho, ku darto ama ka saarto qaar ka mid ah hantida ilahan. Tusaale ahaan, ku dar qoraal, kordhi ama yaree tirada nuqullada.

Kubernetes CLI

Haddii aad horay ula shaqaynaysay kooxaha Kubernetes adigoo isticmaalaya CLI, horeba waad u taqaannay apply ΠΈ edit. Kooxda apply wuxuu akhriyaa faahfaahinta kheyraadka ee galka wuxuuna ka dhigayaa "kor u kaca" kutlada Kubernetes, i.e. wuxuu abuuraa kheyraadka haddii uusan jirin oo cusbooneysiiyaa haddii uu jiro. Kooxda edit wuxuu akhriyaa kheyraadka API-ga, ka bacdina wuxuu ku qorayaa qeexida kheyraadka fayl gudaha ah, kaasoo markaas lagu furayo tafatiraha qoraalka. Kadib markaad tafatirto oo aad kaydiso faylka, kubectl waxay dib u soo diri doontaa isbeddelada lagu sameeyay API, kaas oo si taxadar leh u isticmaali doona isbeddeladan ilaha.

Qof kastaa ma yaqaan amarrada patch ΠΈ replace. Kooxda patch Waxay kuu ogolaaneysaa inaad bedesho qayb ka mid ah qeexida kheyraadka, iyadoo bixisa kaliya qeybta la beddelay ee khadka taliska. Kooxda replace shaqeeyaa la mid ah sida edit, laakiin wax walba waxay u baahan yihiin in lagu sameeyo gacanta: waxaad u baahan tahay inaad soo dejiso nooca hadda ee qeexida kheyraadka, tusaale ahaan, adoo isticmaalaya kubectl get -o yaml, wax ka beddel, ka dibna isticmaal replace si loo cusboonaysiiyo kheyraadka iyadoo loo eegayo qeexitaanka la beddelay. Kooxda replace ma shaqayn doono haddii wax isbeddel ahi ka dhaceen akhrinta iyo beddelka kheyraadka.

Kubernetes API

Waxay u badan tahay inaad taqaan hababka CoreV1().Pods().Update(), replaceNamespacedService ama patch_namespaced_deployment, haddii aad la shaqayso kooxaha via maktabadda macmiilka ee Kubernetes API adigoo isticmaalaya luqadaha barnaamijyada qaarkood. Maktabadu waxay wax ka qabataa hababkan iyada oo loo marayo codsiyada HTTP iyadoo la isticmaalayo hababka PUT ΠΈ PATCH... Halkaas update ΠΈ replace isticmaal PUTiyo patch, si kasta oo ay u yar tahay, isticmaal PATCH.

Waa muhiim in la ogaado taas kubectl Waxa kale oo ay la shaqaysaa kooxo iyada oo loo sii marayo API. Si kale haddii loo dhigo, kubectlwaa ku duub dusha sare ee maktabadda macmiilka ee luqadda Go, taas oo inta badan siisa awoodda lagu bixiyo amar-hoosaadyo qaab cufan oo la akhriyi karo marka lagu daro awoodaha API-ga caadiga ah. Tusaale ahaan, sida aad horeba u aragtay, habka apply laguma sheegin kor ku xusan cutubka hore. Hadda (Maajo 2020, qiyaastii turjumaan) dhammaan caqli-galnimada kubectl apply, i.e. abuurista ilo aan jirin iyo cusboonaysiinta kuwa jira, waxay si buuxda uga shaqeysaa dhinaca koodhka kubectl. Waxaa socda dadaallo ku saabsan wareejinta macquulka ah apply dhanka API, laakiin wali waxay ku jirtaa beta. Waxaan si faahfaahsan hoos ku qori doonaa.

Patch by default

Sida ugu fiican loo isticmaalo patch, haddii aad rabto inaad cusboonaysiiso kheyraadka. Tani waa sida labada maktabadood ee macmiilku u shaqeeyaan dusha sare ee Kubernetes API iyo kubectl (la yaab ma leh, maadaama ay duub u tahay maktabadda macmiilka, qiyaastii turjumaan).

Si xeeladaysan u shaqee

Dhammaan kooxaha kubectl apply, edit ΠΈ patch isticmaal habka PATCH Codsiyada HTTP si loo cusboonaysiiyo kheyraadka jira. Haddii aad si faahfaahsan u dhex gasho fulinta amarada, markaa dhammaantood waxay isticmaalaan habka balastar istaraatijiyad-isku-dhafka si loo cusboonaysiiyo agabka, in kastoo amarka patch laga yaabaa inay isticmaalaan habab kale (wax badan oo tan hoose ah). Habka isku-dhafka istiraatijiyadeed ee isku-dhafka ah wuxuu isku dayaa inuu "sixiyo" iyadoo la isku darayo qeexida la bixiyay iyo qeexitaanka jira. Si gaar ah, waxa ay isku daydaa in ay isku gayso shay iyo arrays labadaba, taas oo macnaheedu yahay in isbeddelladu ay noqdaan kuwo wax lagu daro. Tusaale ahaan, socodsiinta amarka patch oo leh doorsoome deegaan oo cusub oo ku jira qashin qubka, waxay sababtaa doorsoomayaasha deegaanka in lagu daro doorsoomayaasha deegaanka ee jira halkii ay dib u qori lahaayeen. Si meesha looga saaro adeegsiga habkan, waa inaad ku qasbeysaa qiyamka cabbirka inuu buray qeexitaanka la bixiyay. Waa kuwee kooxaha kubectl Ma ugu fiican in loo isticmaalo cusboonaysiinta?

Haddii aad abuurto oo aad maamusho kheyraadkaaga adigoo isticmaalaya kubectl apply, marka la cusboonaysiinayo waxa fiican in had iyo jeer la isticmaalo kubectl applysidaa darteed kubectl waxay maareyn kartaa qaabeynta oo si sax ah ula socon kartaa isbeddelada la codsaday ee codsi ilaa codsi. Faa'iidada had iyo jeer isticmaal apply waa in ay la socoto qeexitaan hore loo dabaqay, taas oo u oggolaanaysa in ay ogaato marka sifooyinka gaarka ah iyo walxaha diyaarsan si cad meesha looga saaro. Tani waxay kuu ogolaaneysaa inaad isticmaasho apply si meesha looga saaro waxyaabaha la isku habeeyey, halka isku-dhafka istiraatijiyadeed ee caadiga ahi aanu shaqaynayn. Kooxaha edit ΠΈ patch ha cusboonaysiin qoraalada in kubectl apply waxay isticmaashaa si ay ula socoto isbeddelkeeda, markaa isbeddel kasta oo lagu raad raaco oo lagu sameeyo Kubernetes API, laakiin lagu sameeyo amarada edit ΠΈ patch, aan la arki karin amarrada xiga apply, taasi waa apply kama saarayso xitaa haddii aysan ka muuqan tilmaamaha soo-gelinta apply (Dokumentiga ayaa sheegaya in edit ΠΈ patch cusbooneysiin ku samee qoraalada la isticmaalay apply, laakiin ficil ahaan - maya).

Haddii aadan isticmaalin amarka apply, waxaa loo isticmaali karaa sida edit, iyo patch, doorashada amarka ku habboon isbeddelka la sameynayo. Marka lagu daro oo la beddelo guryaha BOM, labada habba waa isku mid. Marka la tirtirayo sifooyinka gaarka ah ama curiyeyaasha soo diyaarsan edit wuxuu u dhaqmaa sidii hal mar la bilaabay apply, oo ay ku jirto la socoshada waxa qeexiddu ay tahay ka hor iyo ka dib markii la tafatiray, si aad si cad uga saari karto alaabta iyo walxaha isku dubaridka ah ee kheyraadka. Waxaad u baahan tahay inaad si cad u dejiso qiimaha hantida inuu buray qeexitaanka patchsi looga saaro kheyraadka. Ka saarida walxaha isku dhafan iyadoo la adeegsanayo balastar istaraatiijiyadeed-isku-dhafka ah ayaa aad u adag sababtoo ah waxay u baahan tahay isticmaalka dardaaranka isku-dhafka. Hoos ka eeg habab kale oo casriyeyn ah si aad u hesho beddelaad waxtar leh.

Si loo hirgeliyo hababka cusboonaysiinta maktabadda macmiilka ee u dhaqma si la mid ah amarrada sare kubectl, waa in lagu dejiyaa codsiyo content-type Π² application/strategic-merge-patch+json. Haddii aad rabto in aad ka saarto guryaha si gaar ah, waxaad u baahan tahay inaad si cad u dejiso qiyamkooda si la mid ah kubectl patch. Haddii aad u baahan tahay in aad meesha ka saarto walxaha isku dubaridka ah, waa in aad ku dartaa awaamiirta isku darka ee faahfaahinta cusboonaysiinta ama isticmaal hab ka duwan cusboonaysiinta.

Hababka kale ee cusbooneysiinta

Kubernetes waxay taageertaa laba hab oo kale oo cusub: Isku-darka JSON ΠΈ JSON balastar. Habka balastarka isku darka JSON waxa uu qaataa qeexida qayb ka mid ah Kubernetes sida wax gelinta waxana ay taageertaa isku darka walxaha la mid ah habka isku darka istiraatijiyadeed. Farqiga u dhexeeya labadu waa in ay taageerto beddelka diyaarinta, oo ay ku jirto haynta weelka ee qeexitaanka boodhka. Tani waxay ka dhigan tahay marka aad isticmaalayso balastar isku-darka JSON, waxaad u baahan tahay inaad bixiso tafaasiil dhamaystiran dhammaan weelasha haddii hanti kasta oo weel kasta ay isbeddesho. Markaa habkani waxa uu faa'iido u leeyahay in laga saaro canaasirta ku jirta BOM. Xariiqda taliska waxaad ku dooran kartaa balastar isku-darka JSON adoo isticmaalaya kubectl patch --type=merge. Markaad la shaqaynayso Kubernetes API, waa inaad isticmaashaa habka codsiga PATCH iyo rakibidda content-type Π² application/merge-patch+json.

Habka balastarrada JSON, halkii laga bixin lahaa qeexid qaybeed kheyraad ah, waxay isticmaashaa bixinta isbeddellada aad rabto inaad ku samayso kheyraadka sida hannaan ahaan, taas oo qayb kasta oo ka mid ah shaxdu ay u taagan tahay sharraxaadda isbeddelka lagu sameynayo kheyraadka. Habkani waa hab aad u dabacsan oo awood badan oo lagu muujiyo isbeddelada la samaynayo, laakiin kharashka liiska isbeddelada lagu samaynayo qaab gaar ah, oo aan ahayn Kubernetes, halkii loo diri lahaa qeexitaan kheyraad qayb ah. IN kubectl waxaad dooran kartaa JSON patch adigoo isticmaalaya kubectl patch --type=json. Markaad isticmaalayso Kubernetes API, habkani wuxuu shaqeeyaa iyadoo la isticmaalayo habka codsiga PATCH iyo rakibidda content-type Π² application/json-patch+json.

Waxaan u baahanahay kalsooni - isticmaal beddelka

Xaaladaha qaarkood, waxaad u baahan tahay inaad hubiso inaan wax isbeddel ah lagu samayn kheyraadka inta u dhaxaysa wakhtiga macluumaadka la akhriyo iyo marka la cusboonaysiiyo. Si kale haddii loo dhigo, waa inaad hubisaa in dhammaan isbeddellada ay ahaan doonaan atomiga. Xaaladdan oo kale, si aad u cusboonaysiiso agabka waa inaad isticmaashaa replace. Tusaale ahaan, haddii aad haysato ConfigMap oo leh counter ay cusboonaysiiyeen ilo badan, waa inaad hubisaa in laba ilood aanay isku mar cusboonaysiin miiska, taasoo keenaysa in cusboonaysiinta lumo. Si aad u muujiso, qiyaas dhacdooyin isku xigxiga adoo isticmaalaya habka patch:

  • A iyo B waxay ka helaan API-ga heerka ay hadda ku sugan tahay kheyraadka
  • Mid kastaa deegaan ahaan waxa uu cusboonaysiiyaa qeexitaanka isaga oo ku kordhinaya miiska mid mid sidoo kalena ku daraya β€œA” ama β€œB” siday u kala horreeyaan qoraalka β€œupdated-by”
  • Oo waxay u cusbooneysiisaa kheyraadka si degdeg ah
  • B waxay cusbooneysiisaa kheyraadka

Natiijo ahaan, cusbooneysiinta A waa la waayayaa. Hawlgalkii u dambeeyay patch guulaysta, miiska waxa lagu kordhiyey hal halkii laba, qiimaha qoraalka "updated-by" wuxuu ku dhamaanayaa "B" oo kuma jiro "A". Aynu is barbar dhigno kuwa sare iyo waxa dhacaya marka wax cusub la sameeyo iyadoo la adeegsanayo habka replace:

  • A iyo B waxay ka helaan API-ga heerka ay hadda ku sugan tahay kheyraadka
  • Mid kastaa deegaan ahaan waxa uu cusboonaysiiyaa qeexitaanka isaga oo ku kordhinaya miiska mid mid sidoo kalena ku daraya β€œA” ama β€œB” siday u kala horreeyaan qoraalka β€œupdated-by”
  • Oo waxay u cusbooneysiisaa kheyraadka si degdeg ah
  • B wuxuu isku dayaa inuu cusboonaysiiyo kheyraadka, laakiin cusboonaysiinta waxaa diiday API sababtoo ah nooca kheyraadka ayaa ku jira qeexitaanka replace kuma dhigna nooca hadda ee kheyraadka ee Kubernetes sababtoo ah nooca kheyraadka waxaa lagu kordhiyay hawlgalka beddelka A.

Xaaladda sare, B waa in ay dib u soo celiso kheyraadka, ku sameyso isbedelada gobolka cusub oo ay mar kale isku daydo replace. Tani waxay sababi doontaa in miiska miiska lagu kordhiyo laba iyo "cusboonaysiinta-by" qoraalka lagu daro "AB" dhamaadka.

Tusaalaha kore wuxuu muujinayaa marka la fulinayo replace Dhammaan kheyraadka si buuxda ayaa loo beddelay. Tilmaamaha loo isticmaalo replace, waa in aanu noqon qayb ahaan, ama qayb ahaan sida ku jirta apply, laakiin dhammaystiran, oo ay ku jiraan ku-darka resourceVersion galay xogta xogta gaarka ah. Haddii aadan awood u yeelan resourceVersion ama nooca aad bixisay ma aha mid hadda jira, beddelka waa la diidi doonaa. Markaa habka ugu wanaagsan ee loo isticmaalo waa replace – akhri ilaha, cusboonaysii oo isla markiiba beddel. Isticmaalka kubectl, waxay u ekaan kartaa sidan:

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

Waxaa xusid mudan in labada amar ee soo socda, oo si isdaba joog ah loo fuliyay, ay si guul leh u fulin doonaan, tan iyo markii deployment.yaml kuma jiraan hanti .metadata.resourceVersion

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

Tani waxay u muuqan doontaa inay ka hor imanayso waxa kor lagu sheegay, i.e. " ku daray resourceVersion galay metadata sifaynta." Ma khalad in taas la yidhaahdo? Maya, ma aha, sababtoo ah haddii kubectl ogeysiisyada aadan cayimin resourceVersion, waxay ka akhrin doontaa kheyraadka waxayna ku dari doontaa qeexida aad sheegtay, ka dibna kaliya ayaa fulin doona replace. Sababtoo ah tani waa khatar haddii aad ku tiirsan tahay atomity, sixirku gabi ahaanba wuu ka shaqeeyaa dhinaca kubectl, waa inaadan ku tiirsanayn markaad isticmaalayso maktabadaha macmiilka ee la shaqeeya API-ga. Xaaladdan oo kale waa inaad akhridaa faahfaahinta kheyraadka hadda, cusboonaysii oo ka dibna fuli PUT codsi.

Ma sameyn kartid balastar - waxaan sameynaa bedel

Mararka qaarkood waxaad u baahan tahay inaad samayso isbeddelo aanay API-gu wax ka qaban karin. Xaaladahan, waxaad ku qasbi kartaa beddelka kheyraadka adiga oo tirtiraya oo dib u abuuraya. Tan waxaa lagu sameeyaa iyadoo la isticmaalayo kubectl replace --force. Ku socodsiinta amarka isla markaaba waxay ka saartaa agabka ka dibna waxay dib uga abuurtaa qeexida la bixiyay. Ma jiro maamule "xoog bedela" API-ga, si aad sidaas u samayso API-ga, waxaad u baahan tahay inaad samayso laba hawlgal. Marka hore waxaad u baahan tahay inaad tirtirto kheyraadka adoo dejinaya gracePeriodSeconds ilaa eber (0) iyo propagationPolicy gudaha "Background" ka dibna dib u samee kheyraadkan oo leh qeexida la rabo.

Digniin: Habkani waa mid khatar ah oo keeni kara xaalad aan la cayimin.

Ka codso dhinaca server-ka

Sida kor ku xusan, horumarinta Kubernetes waxay ka shaqeynayaan hirgelinta macquulnimada apply ka kubectl Kubernetes API. Logics apply laga heli karo Kubernetes 1.18 iyada oo loo marayo kubectl apply --server-side ama iyada oo la adeegsanayo API-ga iyadoo la adeegsanayo habka PATCH с content-type application/apply-patch+YAML.

Xusuusin: JSON sidoo kale waa YAML ansax ah, marka waxaad u diri kartaa qeexitaanka JSON ahaan xitaa haddii content-type noqon doonaa application/apply-patch+yaml.

Caqligaas ka sokow kubectl qof walba u heli karo API, apply dhinaca server-ka, waxa ay la socotaa cidda ka mas'uulka ah goobaha qeexida, sidaas awgeed u oggolaanaysa marin u helitaan badan oo ammaan ah oo tafatir la'aan ah. Si kale haddii loo dhigo, haddii apply dhanka server-ka wuxuu noqon doonaa mid baahsan, isku xirka maaraynta kheyraadka aaminka ah ee caalamiga ah ayaa u muuqan doona macaamiisha kala duwan, tusaale ahaan, kubectl, Pulumi ama Terraform, GitOps, iyo sidoo kale qoraalo iskood isku qoray oo isticmaalaya maktabadaha macmiilka.

Natiijooyinka

Waxaan rajeynayaa in dulmarkan gaaban ee siyaabaha kala duwan ee loo cusboonaysiiyo agabka kutlada ay ku anfici lahayd. Way fiican tahay in la ogaado in aanay ahayn kaliya in lagu dabaqo beddelka; waa suurtagal in la cusboonaysiiyo kheyraadka iyada oo la adeegsanayo codso, tafatir, balastar, ama beddel. Ka dib oo dhan, mabda'a, hab kastaa wuxuu leeyahay aag u gaar ah codsiga. Isbeddellada atomiga, beddelka ayaa la door bidayaa, haddii kale, waa inaad isticmaashaa balastar istaraatiijiyadeed adoo codsanaya. Ugu yaraan, waxaan kaa filayaa inaad fahanto inaadan aamini karin Google ama StackOerflow markaad raadinayso "kubernetes apply vs replace". Ugu yaraan ilaa maqaalkani beddelo jawaabta hadda jirta.

Isbarbardhigga saxda ah ee Kubernetes Codso, Beddel oo Patch

Source: www.habr.com

Add a comment