Kev sib piv zoo ntawm Kubernetes Thov, Hloov thiab Patch

Kubernetes muaj ntau txoj hauv kev rau kev hloov kho cov peev txheej: thov, kho, thaj thiab hloov. Muaj kev tsis meej pem txog txhua tus ua dab tsi thiab thaum twg yuav siv lawv. Cia peb xav txog nws.

Kev sib piv zoo ntawm Kubernetes Thov, Hloov thiab Patch

Yog hais tias tus nrhiav hauv Google cov kab lus "kubernetes thov vs hloov" nyob teb rau StackOverflow, uas tsis yog lawm. Thaum tshawb nrhiav "kubernetes thov vs thaj" thawj qhov txuas yog cov ntaub ntawv rau kubectl patch, uas tsis suav nrog kev sib piv apply ΠΈ patch. Kab lus no yuav saib cov kev xaiv sib txawv, nrog rau kev siv kom zoo ntawm txhua tus.

Thaum lub sij hawm lub neej ntawm Kubernetes cov peev txheej (kev pabcuam, kev xa tawm, kev nkag, thiab lwm yam), qee zaum koj yuav tsum hloov, ntxiv lossis tshem tawm qee yam khoom ntawm cov peev txheej no. Piv txwv li, ntxiv ib daim ntawv, nce los yog txo tus naj npawb ntawm replicas.

Kubernetes CLI

Yog tias koj twb tau ua haujlwm nrog Kubernetes pawg ntawm CLI, koj twb paub lawm apply ΠΈ edit. Koj apply nyeem cov kev qhia tshwj xeeb los ntawm cov ntaub ntawv thiab ua rau "upsert" rau Kubernetes pawg, piv txwv li. tsim cov peev txheej yog tias nws tsis muaj thiab hloov kho nws yog tias nws muaj. Pab neeg edit nyeem cov peev txheej ntawm API, tom qab ntawd sau cov peev txheej tshwj xeeb rau cov ntaub ntawv hauv zos, uas tau qhib rau hauv cov ntawv nyeem. Tom qab koj hloov kho thiab txuag cov ntaub ntawv, kubectl yuav xa cov kev hloov pauv rov qab los ntawm API, uas yuav ua tib zoo siv cov kev hloov pauv no rau cov peev txheej.

Tsis yog txhua tus paub cov lus txib patch ΠΈ replace. Koj patch tso cai rau koj hloov ib feem ntawm cov kev qhia tshwj xeeb, tsuas yog muab qhov hloov pauv ntawm kab hais kom ua. Pab neeg replace ua haujlwm tib yam li edit, tab sis txhua yam yuav tsum tau ua manually: koj yuav tsum rub tawm cov ntawv tam sim no ntawm cov peev txheej tshwj xeeb, piv txwv li, siv kubectl get -o yaml, kho nws, ces siv replace hloov kho cov peev txheej raws li qhov hloov pauv tshwj xeeb. Pab neeg replace yuav tsis ua haujlwm yog tias muaj kev hloov pauv ntawm kev nyeem ntawv thiab hloov cov peev txheej.

Kubernetes API

Tej zaum koj yuav paub txog cov txheej txheem CoreV1().Pods().Update(), replaceNamespacedService los yog patch_namespaced_deployment, yog tias koj ua haujlwm nrog pawg ntawm neeg siv tsev qiv ntawv rau Kubernetes API siv qee yam lus programming. Lub tsev qiv ntawv tswj cov txheej txheem ntawm HTTP thov siv cov txheej txheem PUT ΠΈ PATCH... Nyob rau update ΠΈ replace siv PUTthiab patch, tsis muaj teeb meem npaum li cas nws yuav yog, siv PATCH.

Nws yog tsim nyog sau cia tias kubectl kuj ua haujlwm nrog pawg ntawm API. Hauv lwm lo lus, kubectlyog ib lub wrapper nyob rau sab saum toj ntawm lub tsev qiv ntawv tus neeg siv khoom rau Go lus, uas feem ntau muab lub peev xwm los muab cov lus txib hauv ib daim ntawv ntau dua thiab nyeem tau ntxiv rau tus qauv API muaj peev xwm. Piv txwv li, raws li koj tau pom lawm, txoj kev apply tsis tau hais saum toj no hauv kab lus dhau los. Tam sim no (Lub Tsib Hlis 2020, kwv yees. tus txhais lus) tag nrho cov logic kubectl apply, i.e. tsim cov peev txheej uas tsis muaj nyob thiab hloov kho cov uas twb muaj lawm, ua haujlwm tag nrho ntawm cov cai sab kubectl. Kev siv zog ua ntawm logic hloov apply mus rau sab API, tab sis nws tseem nyob hauv beta. Kuv yuav sau kom ntxaws ntxiv hauv qab no.

Patch los ntawm lub neej ntawd

Qhov zoo tshaj plaws siv patch, yog tias koj xav hloov kho cov peev txheej. Qhov no yog li cas ob lub tsev qiv ntawv cov neeg siv khoom ua haujlwm saum Kubernetes API thiab kubectl (tsis xav tsis thoob, vim nws yog ib daim ntaub qhwv rau cov neeg siv khoom, kwv yees. tus txhais lus).

Ua haujlwm zoo

Txhua pab pawg kubectl apply, edit ΠΈ patch siv txoj kev PATCH hauv HTTP thov kom hloov kho cov peev txheej uas twb muaj lawm. Yog tias koj delve rau hauv kev siv cov lus txib kom ntxaws, ces tag nrho lawv siv txoj hauv kev Strategic-merge patching hloov kho cov peev txheej, txawm hais tias cov lus txib patch tuaj yeem siv lwm txoj hauv kev (ntxiv rau qhov no hauv qab no). Lub tswv yim-merge patching mus kom ze sim "kom nws txoj cai" los ntawm kev sib koom ua ke cov khoom siv nrog cov lus qhia uas twb muaj lawm. Tshwj xeeb tshaj yog, nws sim ua ke ob qho tib si khoom thiab arrays, uas txhais tau hais tias cov kev hloov pauv yuav yog qhov ntxiv. Piv txwv li, khiav cov lus txib patch nrog rau ib puag ncig tshiab hloov pauv hauv cov thawv ntim cov ntsiab lus, ua rau qhov chaw hloov pauv mus ntxiv rau qhov hloov pauv ib puag ncig uas twb muaj lawm ntau dua li tsis sau lawv. Txhawm rau tshem tawm siv txoj hauv kev no, koj yuav tsum yuam tus nqi parameter rau null hauv qhov kev qhia tshwj xeeb. Pab pawg twg kubectl Puas yog nws zoo tshaj los siv rau kev hloov kho?

Yog tias koj tsim thiab tswj koj cov peev txheej siv kubectl apply, thaum hloov kho nws yog qhov zoo dua los siv ib txwm kubectl applyyog li ntawd kubectl tuaj yeem tswj hwm kev teeb tsa thiab raug taug qab thov hloov pauv ntawm daim ntawv thov mus rau daim ntawv thov. Qhov zoo ib txwm siv apply yog tias nws ua raws li cov lus qhia yav dhau los, tso cai rau nws paub thaum twg cov khoom tshwj xeeb thiab cov ntsiab lus array raug tshem tawm meej meej. Qhov no tso cai rau koj siv apply tshem tawm cov khoom thiab cov ntsiab lus array, thaum lub tswv yim sib koom ua ke yuav tsis ua haujlwm. Pab pawg edit ΠΈ patch tsis hloov cov ntawv sau tseg tias kubectl apply siv los taug qab nws cov kev hloov pauv, yog li txhua qhov kev hloov pauv uas tau taug qab thiab ua los ntawm Kubernetes API, tab sis ua los ntawm cov lus txib edit ΠΈ patch, pom tsis tau rau cov lus txib tom ntej apply, uas yog apply tsis tshem tawm txawm tias lawv tsis tshwm sim hauv cov lus qhia tshwj xeeb rau apply (Cov ntaub ntawv hais tias edit ΠΈ patch ua hloov tshiab rau cov ntawv siv apply, tab sis hauv kev xyaum - tsis muaj).

Yog tias koj tsis siv cov lus txib apply, tuaj yeem siv ua edit, thiab patch, xaiv cov lus txib uas zoo tshaj plaws rau kev hloov pauv. Thaum ntxiv thiab hloov BOM cov cuab yeej, ob txoj hauv kev yog kwv yees tib yam. Thaum rho tawm cov khoom tshwj xeeb lossis cov ntsiab lus array edit coj zoo li ib zaug tso tawm apply, suav nrog kev taug qab ntawm qhov kev qhia tshwj xeeb zoo li ua ntej thiab tom qab nws raug kho, yog li koj tuaj yeem tshem tawm cov khoom thiab cov ntsiab lus ntawm cov peev txheej. Koj yuav tsum tau qhia meej meej cov khoom muaj nqis rau null hauv cov lus qhia rau patchkom tshem tawm nws los ntawm cov peev txheej. Tshem tawm cov ntsiab lus array uas siv cov tswv yim sib koom ua ke yog qhov nyuaj dua vim nws yuav tsum tau siv cov lus qhia sib koom ua ke. Saib lwm cov kev hloov kho tshiab hauv qab no rau ntau txoj hauv kev siv tau.

Txhawm rau siv cov txheej txheem hloov tshiab hauv cov tsev qiv ntawv tus neeg siv khoom uas coj zoo ib yam li cov lus txib saum toj no kubectl, yuav tsum tau teem rau hauv kev thov content-type Π² application/strategic-merge-patch+json. Yog tias koj xav tshem tawm cov khoom hauv ib qho kev qhia tshwj xeeb, koj yuav tsum tau qhia meej meej lawv cov txiaj ntsig rau null hauv txoj kev zoo sib xws kubectl patch. Yog tias koj xav tau tshem tawm cov ntsiab lus array, koj yuav tsum suav nrog cov lus qhia sib koom ua ke hauv qhov hloov tshiab tshwj xeeb lossis siv lwm txoj hauv kev los hloov kho tshiab.

Lwm txoj hauv kev rau kev hloov tshiab

Kubernetes txhawb nqa ob txoj hauv kev hloov tshiab: JSON sib koom ua ke ΠΈ JSON thaj. JSON merge patch mus kom ze yuav siv ib feem ntawm Kubernetes specification raws li cov tswv yim thiab txhawb kev sib koom ua ke cov khoom zoo ib yam li cov tswv yim-merge patching mus kom ze. Qhov sib txawv ntawm ob yog tias nws tsuas yog txhawb nqa array hloov, suav nrog lub thawv array hauv pod specification. Qhov no txhais tau hais tias thaum siv JSON kev sib koom ua ke, koj yuav tsum muab cov lus qhia ua tiav rau txhua lub ntim hauv rooj plaub ntawm cov khoom ntawm ib lub thawv hloov pauv. Yog li no txoj hauv kev no muaj txiaj ntsig rau kev tshem tawm cov ntsiab lus los ntawm ib qho array hauv BOM. Ntawm kab hais kom ua koj tuaj yeem xaiv JSON sib koom ua ke siv kubectl patch --type=merge. Thaum ua haujlwm nrog Kubernetes API, koj yuav tsum siv txoj kev thov PATCH thiab installation content-type Π² application/merge-patch+json.

JSON thaj ua rau thaj, ntau dua li muab cov kev qhia tshwj xeeb ntawm cov peev txheej, siv muab cov kev hloov pauv uas koj xav ua rau cov peev txheej ua ib qho array, uas txhua lub ntsiab lus ntawm array sawv cev rau cov lus piav qhia ntawm qhov kev hloov pauv rau cov peev txheej. Txoj hauv kev no yog ib txoj hauv kev yooj yim dua thiab muaj zog los qhia txog cov kev hloov pauv tau ua, tab sis ntawm tus nqi teev cov kev hloov pauv tau ua nyob rau hauv ib qho cais, tsis yog-Kubernetes hom, es tsis yog xa ib feem ntawm cov peev txheej tshwj xeeb. IN kubectl koj tuaj yeem xaiv JSON thaj siv kubectl patch --type=json. Thaum siv Kubernetes API, txoj hauv kev no ua haujlwm siv txoj kev thov PATCH thiab installation content-type Π² application/json-patch+json.

Peb xav tau kev ntseeg siab - siv hloov

Qee qhov xwm txheej, koj yuav tsum paub tseeb tias tsis muaj kev hloov pauv rau cov peev txheej ntawm lub sijhawm cov ntaub ntawv tau nyeem thiab thaum nws hloov kho. Hauv lwm lo lus, koj yuav tsum xyuas kom meej tias txhua qhov kev hloov pauv yuav yog atomic. Hauv qhov no, txhawm rau hloov kho cov peev txheej koj yuav tsum siv replace. Piv txwv li, yog tias koj muaj ConfigMap nrog lub txee uas hloov kho los ntawm ntau qhov chaw, koj yuav tsum nco ntsoov tias ob qhov chaw tsis hloov lub txee rau tib lub sijhawm, ua rau qhov hloov tshiab ploj. Txhawm rau ua kom pom, xav txog ib ntu ntawm cov xwm txheej uas siv txoj hauv kev patch:

  • A thiab B tau txais lub xeev tam sim no ntawm cov peev txheej los ntawm API
  • Txhua tus hauv zos hloov kho qhov tshwj xeeb los ntawm kev nce lub txee los ntawm ib qho thiab tseem ntxiv "A" lossis "B" raws li daim ntawv "hloov kho-los ntawm"
  • Thiab nws hloov kho cov peev txheej sai me ntsis
  • B hloov kho cov peev txheej

Yog li ntawd, hloov tshiab A ploj. Kev ua haujlwm kawg patch yeej, lub txee yog nce los ntawm ib tug es tsis txhob ntawm ob, thiab tus nqi ntawm "hloov-los ntawm" ntawv xaus nrog "B" thiab tsis muaj "A". Cia peb piv cov saum toj no nrog dab tsi tshwm sim thaum hloov tshiab ua tiav siv txoj hauv kev replace:

  • A thiab B tau txais lub xeev tam sim no ntawm cov peev txheej los ntawm API
  • Txhua tus hauv zos hloov kho qhov tshwj xeeb los ntawm kev nce lub txee los ntawm ib qho thiab tseem ntxiv "A" lossis "B" raws li daim ntawv "hloov kho-los ntawm"
  • Thiab nws hloov kho cov peev txheej sai me ntsis
  • B sim hloov kho cov peev txheej, tab sis qhov hloov tshiab yog tsis lees paub los ntawm API vim tias cov peev txheej muaj nyob rau hauv cov lus qhia. replace tsis phim qhov tam sim no version ntawm cov peev txheej hauv Kubernetes vim hais tias cov version ntawm cov peev txheej tau nce los ntawm A qhov hloov pauv ua haujlwm.

Nyob rau hauv cov ntaub ntawv saum toj no, B yuav tsum rov muab cov peev txheej, hloov pauv rau lub xeev tshiab thiab rov sim dua replace. Qhov no yuav ua rau lub txee yuav nce ntxiv los ntawm ob thiab daim ntawv "hloov-los ntawm" kom suav nrog "AB" thaum kawg.

Cov piv txwv saum toj no txhais tau tias thaum ua tiav replace Tag nrho cov peev txheej yog hloov tag nrho. Specification siv rau replace, yuav tsum tsis yog ib feem, los yog nyob rau hauv qhov chaw raws li nyob rau hauv apply, tab sis ua tiav, suav nrog qhov ntxiv resourceVersion rau hauv specification metadata. Yog hais tias koj tsis tau enabled resourceVersion los yog cov version koj muab tsis yog tam sim no, qhov hloov pauv yuav raug tsis lees paub. Yog li txoj hauv kev zoo tshaj plaws los siv yog replace - nyeem cov peev txheej, hloov kho nws thiab hloov tam sim ntawd. Siv kubectl, nws yuav zoo li no:

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

Nws yog ib nqi sau cia hais tias cov nram qab no ob commands, ua sequentially, yuav ua kom tiav, txij li thaum deployment.yaml tsis muaj vaj tse .metadata.resourceVersion

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

Qhov no yuav zoo li contradict qhov tau hais saum toj no, i.e. "ntxiv resourceVersion mus rau hauv cov specification metadata." Puas yog hais tias tsis yog? kubectl ceeb toom uas koj tsis tau qhia resourceVersion, nws yuav nyeem nws los ntawm cov peev txheej thiab ntxiv rau qhov tshwj xeeb koj tau teev tseg, thiab tsuas yog tom qab ntawd ua nws replace. Vim tias qhov no yog qhov txaus ntshai yog tias koj tso siab rau atomicity, cov khawv koob ua haujlwm tag nrho ntawm sab kubectl, koj yuav tsum tsis txhob cia siab rau nws thaum siv cov neeg siv khoom qiv uas ua haujlwm nrog API. Hauv qhov no koj yuav tsum tau nyeem cov kev qhia tshwj xeeb tam sim no, hloov kho nws thiab ua tiav PUT thov.

Koj tsis tuaj yeem ua ib thaj - peb ua qhov hloov

Qee zaum koj yuav tsum tau ua qee qhov kev hloov pauv uas tsis tuaj yeem tswj hwm los ntawm API. Hauv cov xwm txheej no, koj tuaj yeem yuam kom hloov cov peev txheej los ntawm kev rho tawm thiab rov tsim nws. Qhov no yog ua tiav siv kubectl replace --force. Khiav cov lus txib tam sim tshem tawm cov peev txheej thiab tom qab ntawd rov tsim lawv los ntawm cov khoom siv tshwj xeeb. Tsis muaj "force replace" handler hauv API, thiab txhawm rau ua li ntawd los ntawm API, koj yuav tsum ua ob txoj haujlwm. Ua ntej koj yuav tsum rho tawm cov peev txheej los ntawm kev teeb tsa rau nws gracePeriodSeconds mus rau xoom (0) thiab propagationPolicy hauv "Background" thiab tom qab ntawd rov tsim cov peev txheej no nrog rau qhov xav tau tshwj xeeb.

Ceeb Toom: Txoj hauv kev no muaj peev xwm txaus ntshai thiab tuaj yeem ua rau lub xeev tsis tau txhais.

Thov rau sab server

Raws li tau hais los saum no, Cov neeg tsim khoom Kubernetes tab tom ua haujlwm ntawm kev siv lub logic apply los ntawm kubectl hauv Kubernetes API. Logics apply muaj nyob rau hauv Kubernetes 1.18 ntawm kubectl apply --server-side los yog ntawm API siv txoj kev PATCH с content-type application/apply-patch+YAML.

Nco tseg: JSON kuj siv tau YAML, yog li koj tuaj yeem xa cov lus qhia raws li JSON txawm tias content-type yuav application/apply-patch+yaml.

Tsis tas li ntawd logic kubectl yuav muaj rau txhua tus ntawm API, apply ntawm tus neeg rau zaub mov sab, taug qab ntawm leej twg yog lub luag haujlwm rau thaj chaw hauv qhov kev qhia tshwj xeeb, yog li tso cai rau ntau yam kev nkag mus rau nws qhov kev tsis sib haum xeeb-dawb kho. Hauv lwm lo lus, yog apply nyob rau sab neeg rau zaub mov yuav dhau los ua ntau dua, kev tswj hwm kev nyab xeeb thoob ntiaj teb yuav tshwm sim rau cov neeg siv khoom sib txawv, piv txwv li, kubectl, Pulumi lossis Terraform, GitOps, nrog rau cov ntawv sau tus kheej siv cov neeg siv khoom qiv.

Cov txiaj ntsim tau los

Kuv vam tias qhov kev piav qhia luv luv ntawm ntau txoj hauv kev los hloov kho cov peev txheej hauv pawg yuav pab tau rau koj. Nws yog qhov zoo kom paub tias nws tsis yog siv rau kev hloov pauv xwb; nws tuaj yeem hloov kho cov peev txheej siv siv, hloov kho, thaj, lossis hloov. Tom qab tag nrho, nyob rau hauv lub hauv paus ntsiab lus, txhua txoj kev muaj nws tus kheej cheeb tsam ntawm daim ntawv thov. Rau kev hloov pauv atomic, hloov yog qhov zoo dua; txwv tsis pub, koj yuav tsum siv lub tswv yim sib koom ua ke ntawm kev thov. Tsawg kawg, kuv xav kom koj nkag siab tias koj tsis tuaj yeem ntseeg Google lossis StackOerflow thaum tshawb nrhiav "kubernetes thov vs hloov". Tsawg kawg kom txog thaum tsab xov xwm no hloov cov lus teb tam sim no.

Kev sib piv zoo ntawm Kubernetes Thov, Hloov thiab Patch

Tau qhov twg los: www.hab.com

Ntxiv ib saib