Fa'atusatusaga Talafeagai o Kubernetes Fa'aoga, Sui ma Patch

E tele filifiliga a Kubernetes mo le faʻafouina o punaoa: faʻaoga, faʻasaʻo, patch ma sui. O loʻo i ai le fenumiai e uiga i mea e fai e tagata taʻitoʻatasi ma le taimi e faʻaaogaina ai. Sei o tatou mafaufau i ai.

Fa'atusatusaga Talafeagai o Kubernetes Fa'aoga, Sui ma Patch

ana su'e ile Google o le fuaitau "kubernetes apply vs replace" o loʻo i ai tali i le StackOverflow, e le sa'o. Pe a su'esu'e "kubernetes apply vs patch" o le sootaga muamua o le pepa mo kubectl patch, lea e le aofia ai faatusatusaga apply и patch. O lenei tusiga o le a vaʻavaʻai i filifiliga eseese, faʻapea foʻi ma le faʻaogaina tatau o mea taʻitasi.

I le gasologa o le olaga o se punaoa Kubernetes (auaunaga, faʻapipiʻiina, ulufale, ma isi), o nisi taimi e te manaʻomia le sui, faʻaopoopo pe aveese nisi o meatotino o lenei punaoa. Mo se faʻataʻitaʻiga, faʻaopoopo se faʻamatalaga, faʻaopoopo pe faʻaititia le numera o faʻataʻitaʻiga.

Kubernetes CLI

Afai ua uma ona e galue ma Kubernetes fuifui e ala i le CLI, ua e masani i ai apply и edit. Au apply faitau le faʻamatalaga punaoa mai le faila ma faia se "upsert" i le Kubernetes cluster, i.e. fatuina le puna'oa pe afai e le o iai ma fa'afou pe a iai. Au edit faitau se punaoa e ala i le API, ona tusia lea o le faʻamatalaga o punaoa i se faila faʻapitonuʻu, ona tatalaina lea i se tusitala tusitusiga. A uma ona e fa'asa'o ma sefe le faila, kubectl o le a toe fa'afo'i suiga e ala i le API, lea o le a fa'aogaina ma le fa'aeteete nei suiga i le punaoa.

E le iloa e tagata uma ia poloaiga patch и replace. Au patch e mafai ai ona e suia se vaega o se punaoa faʻamatalaga, tuʻuina atu naʻo le vaega ua suia i luga o le laina o le poloaiga. Au replace galue tutusa ma edit, ae o mea uma e manaʻomia ona fai ma le lima: e te manaʻomia le siiina mai o le lomiga o loʻo i ai nei o le faʻamatalaga punaoa, mo se faʻataʻitaʻiga, faʻaaogaina kubectl get -o yaml, fa'asa'o, ona fa'aaoga lea replace e fa'afou se punaoa e tusa ai ma se fa'amatalaga ua suia. Au replace e le aoga pe a iai ni suiga i le va o le faitau ma le suia o le punaoa.

Kubernetes API

Atonu ua e masani i metotia CoreV1().Pods().Update(), replaceNamespacedService poʻo patch_namespaced_deployment, pe afai e te galue ma fuifui e ala i faletusi a tagata fa'atau mo Kubernetes API fa'aaogaina nisi gagana fa'apolokalame. O le faletusi e faʻaaogaina nei metotia e ala i talosaga HTTP e faʻaaoga ai metotia PUT и PATCH... Lea update и replace faʻaaoga PUTma patch, e tusa lava po o le a le faatauvaa, e faaaoga PATCH.

E taua le maitauina o kubectl galue foi ma fuifui e ala i le API. I se isi faaupuga, kubectlo se afifi i luga o le faletusi o tagata o tausia mo le gagana Go, lea e tele lava ina maua ai le tomai e tuʻuina atu ai subcommands i se foliga sili atu ona faʻapipiʻi ma mafai ona faitau faʻaopoopo i le tulaga gafatia API. Mo se faʻataʻitaʻiga, e pei ona e matauina, o le metotia apply e leʻi taʻua i luga i le parakalafa muamua. I le taimi nei (Me 2020, tusa. faaliliu) manatu uma kubectl apply, i.e. fatuina o punaoa e le o iai ma faʻafouina mea o loʻo i ai, e galue atoatoa i le itu code kubectl. O loo faia taumafaiga i luga o le fesiitaiga o manatu apply i le itu API, ae o loʻo iai pea ile beta. O le a ou tusia atili auiliiliga i lalo.

Fa'apipi'i fa'aletonu

Sili ona fa'aoga patch, pe afai e te manaʻo e faʻafouina le punaoa. O le auala lea e galulue ai faletusi uma e lua i luga o le Kubernetes API ma kubectl (e le o se mea e ofo ai, talu ai o se afifi mo le faletusi o tagata o tausia, tusa. faaliliu).

Galue fa'atatau

'au uma kubectl apply, edit и patch faaaoga le auala PATCH i HTTP talosaga e faʻafouina se punaoa o loʻo iai. Afai e te suʻesuʻeina le faʻatinoga o faʻatonuga i faʻamatalaga atili, ona latou faʻaaogaina uma lea o le auala fa'apipi'i fuafuaga fa'atasi e faafou punaoa, e ui lava o le poloaiga patch e mafai ona faʻaogaina isi auala (sili atu i lenei mea i lalo). O le fuafuaga fa'apipi'i tu'ufa'atasiga e taumafai e "fa'asa'o" e ala i le tu'ufa'atasia o fa'amatalaga tu'uina atu ma fa'amatalaga o lo'o iai. Aemaise lava, e taumafai e tuʻufaʻatasia mea uma ma faʻasologa, o lona uiga o suiga e masani ona faʻaopoopo. Mo se faʻataʻitaʻiga, faʻatautaia le poloaiga patch fa'atasi ai ma se suiga fou o le si'osi'omaga i le fa'amatalaga o pusa pusa, e mafua ai ona fa'aopoopo le fesuiaiga o le si'osi'omaga i suiga o le si'osi'omaga o lo'o iai nai lo le fa'asolo. Ina ia aveese le faʻaaogaina o lenei auala, e tatau ona e faʻamalosia le tau faʻamaufaʻailoga i le null i le faʻamatalaga tuʻuina atu. O fea o au kubectl E sili ona fa'aoga mo le fa'afouina?

Afai e te fatuina ma pulea au punaoa e faʻaaoga ai kubectl apply, pe a faʻafouina e sili atu le faʻaaogaina i taimi uma kubectl applyo lena la kubectl e mafai ona fa'atautaia le fa'atulagaga ma siaki lelei suiga o lo'o talosagaina mai lea fa'aoga i lea fa'aoga. Fa'aoga i taimi uma apply o le fa'amaumauina lea o se fa'amatalaga sa fa'aaoga muamua, e mafai ai ona iloa pe a fa'ate'a'ese'ese fa'apitoa meatotino ma elemene elemene. O lenei mea e mafai ai ona e faʻaaogaina apply e aveese meatotino ma elemene elemene, ae o le a le aoga le tuufaatasia o fuafuaga masani. 'Au edit и patch aua le fa'afou fa'amatalaga lena kubectl apply fa'aaoga e siaki ai ona suiga, so'o se suiga e siaki ma faia e ala i le Kubernetes API, ae faia e ala i poloaiga edit и patch, e le vaaia i poloaiga mulimuli ane apply, o lona uiga apply e le aveesea i latou e tusa lava pe latou te le o aliali mai i totonu o faʻamatalaga faʻamatalaga mo apply (O loʻo faʻapea mai le faʻamaumauga edit и patch fai fa'afouga i fa'amatalaga na fa'aaogaina apply, ae i le faatinoga - leai).

Afai e te le fa'aogaina le fa'atonuga apply, e mafai ona faʻaaogaina e pei o edit, ma patch, filifili le poloaiga e sili ona fetaui ma le suiga ua faia. Pe a faʻaopoopo ma suia meatotino BOM, o auala uma e lua e tutusa lelei. Pe a tape mea faʻapitoa poʻo elemene elemene edit amio e pei o se fa'alauiloa e tasi le taimi apply, e aofia ai le siakiina o le faʻamatalaga sa i ai muamua ma pe a uma ona faʻataʻitaʻia, ina ia mafai ona e aveese faʻamaonia meatotino ma elemene elemene mai se punaoa. E te manaʻomia le faʻatulagaina manino o le tau o meatotino i le null i le faʻamatalaga mo patche aveese mai le punaoa. O le aveeseina o se elemene elemene e faʻaaoga ai le faʻapipiʻi faʻapipiʻi e sili atu ona faigata ona e manaʻomia le faʻaogaina o faʻatonuga tuʻufaʻatasia. Va'ai isi auala fa'aleleia o lo'o i lalo mo nisi fa'aoga talafeagai.

Fa'atino auala fa'afou i totonu o le potutusi o tagata o tausia e amio tutusa ma tulafono o lo'o i luga kubectl, e tatau ona seti i talosaga content-type в application/strategic-merge-patch+json. Afai e te manaʻo e aveese meatotino i totonu o se faʻamatalaga, e tatau ona e setiina faʻamaonia a latou tau i le null i se auala tutusa kubectl patch. Afai e te manaʻomia le aveeseina o elemene elemene, e tatau ona e aofia ai faʻatonuga tuʻufaʻatasia i le faʻamatalaga faʻamatalaga pe faʻaaoga se isi auala i faʻafouga.

O isi auala i faʻafouga

E lagolagoina e Kubernetes isi auala fou e lua: JSON merge patch и JSON patch. O le JSON merge patch approach e ave se vaega Kubernetes faʻamatalaga e fai ma faʻaoga ma lagolagoina le tuʻufaʻatasia o mea e tutusa ma le fuafuaga faʻapipiʻi faʻapipiʻi auala. O le eseesega i le va o ia mea e lua e naʻo le lagolagoina o le sui o le array, e aofia ai le faʻapipiʻi pusa i le faʻamatalaga pod. O lona uiga pe a fa'aogaina le JSON merge patch, e tatau ona e tu'uina atu fa'amatalaga atoatoa mo koneteina uma ina ne'i suia so'o se meatotino o so'o se koneteina. O lea la o lenei auala e aoga mo le aveeseina o elemene mai se laina i totonu ole BOM. I luga o le laina faʻatonu e mafai ona e filifilia JSON merge patch faʻaaoga kubectl patch --type=merge. A e galue ma le Kubernetes API, e tatau ona e faʻaogaina le auala talosaga PATCH ma fa'apipi'i content-type в application/merge-patch+json.

O le JSON patch approach, nai lo le tuʻuina atu o se vaega faʻapitoa o se punaoa, faʻaaogaina le tuʻuina atu o suiga e te manaʻo e fai i le punaoa o se faʻasologa, lea e faʻaalia ai e elemene taʻitasi o le faʻasologa o se faʻamatalaga o le suiga o loʻo faia i le punaoa. O lenei faiga o se auala sili atu ona fetuutuunai ma mamana e faʻaalia ai suiga o loʻo faia, ae i le tau o le lisiina o suiga o loʻo faia i se eseʻesega, e le o ni Kubernetes, nai lo le tuʻuina atu o se vaega o punaoa faʻapitoa. IN kubectl e mafai ona e filifilia JSON patch faʻaaoga kubectl patch --type=json. A fa'aogaina le Kubernetes API, o lenei faiga e fa'aoga le auala ole talosaga PATCH ma fa'apipi'i content-type в application/json-patch+json.

Matou te manaʻomia le mautinoa - faʻaaoga sui

I nisi tulaga, e tatau ona e mautinoa e leai se suiga e faia i se punaoa i le va o le taimi e faitau ai le punaoa ma le taimi e faʻafouina ai. I se isi faaupuga, e tatau ona e mautinoa o suiga uma o le ai ai atomika. I lenei tulaga, e faʻafouina punaoa e tatau ona e faʻaogaina replace. Mo se faʻataʻitaʻiga, afai e iai sau ConfigMap ma se faʻailoga e faʻafouina e le tele o punaoa, e tatau ona e mautinoa e lua punaoa e le faʻafouina le fata i le taimi e tasi, ma mafua ai ona leiloa le faʻafouga. Ina ia faʻaalia, mafaufau i se faʻasologa o mea na tutupu e faʻaaoga ai le auala patch:

  • A ma B maua le tulaga oi ai nei o le punaoa mai le API
  • E fa'afou e tagata ta'itasi i le lotoifale le fa'amatalaga e ala i le fa'aopoopoina o le fata i le tasi ma fa'aopoopo le "A" po'o le "B" i le fa'amatalaga "fa'afouina-e"
  • Ma e fa'afou teisi le puna'oa
  • B fa'afou le punaoa

O le i'uga, ua leiloa le fa'afouga A. Ta'aloga mulimuli patch manumalo, o le fata e faʻaopoopoina i le tasi nai lo le lua, ma o le tau o le "faʻafouina-e" faʻamatalaga e faaiʻu i le "B" ae le o iai le "A". Sei o tatou fa'atusatusa le mea o lo'o i luga ma le mea e tupu pe a faia fa'afouga e fa'aaoga ai le auala replace:

  • A ma B maua le tulaga oi ai nei o le punaoa mai le API
  • E fa'afou e tagata ta'itasi i le lotoifale le fa'amatalaga e ala i le fa'aopoopoina o le fata i le tasi ma fa'aopoopo le "A" po'o le "B" i le fa'amatalaga "fa'afouina-e"
  • Ma e fa'afou teisi le puna'oa
  • B taumafai e faʻafou le punaoa, ae o le faʻafouga e teena e le API ona o le punaoa punaoa o loʻo i totonu o faʻamatalaga replace e le fetaui ma le lomiga o lo'o i ai nei o le puna'oa i Kubernetes ona o le fa'aliliuga o le puna'oa na fa'ateleina e ala i le fa'aogaina o le suiga a A.

I le tulaga o loʻo i luga, e tatau ona toe aumai e B le punaoa, fai suiga i le setete fou ma toe taumafai replace. Ole mea lea ole a fa'aopoopoina ai le fata ile lua ma le fa'amatalaga "fa'afouina-e" e aofia ai le "AB" ile pito.

O le faʻataʻitaʻiga o loʻo i luga o loʻo faʻaalia pe a faʻatinoina replace O le punaoa atoa ua suia atoa. Fa'amatalaga fa'aoga mo replace, e le tatau ona fa'a'au'au, po'o ni vaega e pei o totonu apply, ae atoatoa, e aofia ai le faaopoopoga resourceVersion i totonu o faʻamatalaga metadata. Afai e te le'i mafaia resourceVersion po'o le fa'asologa o lo'o e tu'uina atu e le'o iai nei, o le a te'ena le sui. O lea la, o le auala sili e faʻaaoga ai replace - faitau le punaoa, faʻafouina ma sui vave. Fa'aaogaina kubectl, atonu e pei o lenei:

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

E taua le maitauina o tulafono nei e lua, faʻatinoina faʻasolosolo, o le a faʻataunuʻuina ma le manuia, talu ai deployment.yaml e le o iai meatotino .metadata.resourceVersion

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

E foliga mai e feteenai ma mea na taʻua i luga, i.e. "faaopoopo resourceVersion i totonu o metadata faʻamatalaga." E sese le fai atu? Leai, e leai, aua afai kubectl fa'aaliga e te le'i fa'ailoaina resourceVersion, o le a faitau mai le punaoa ma faʻaopoopo i le faʻamatalaga na e faʻamaonia, ona faʻatino lea. replace. Ona o lenei mea e ono lamatia pe afai e te faʻalagolago i le atomicity, o le togafiti faʻataulāitu e galue atoa i le itu kubectl, e le tatau ona e fa'alagolago i ai pe a fa'aogaina faletusi o tagata o lo'o galulue ma le API. I lenei tulaga e tatau ona e faitauina le faʻamatalaga o punaoa o loʻo i ai nei, faʻafouina ma faʻatino PUT talosaga.

E le mafai ona e faia se patch - matou te faia se sui

O nisi taimi e te manaʻomia le faia o ni suiga e le mafai ona taulimaina e le API. I nei tulaga, e mafai ona e fa'amalosia le sui o le puna'oa e ala i le tapeina ma toe faia. E faia lenei mea i le faʻaaogaina kubectl replace --force. O le fa'atinoina o le fa'atonuga e aveese fa'afuase'i ai puna'oa ma toe fa'afo'i mai le fa'amatalaga tu'uina atu. E leai se "malosi sui" pule i le API, ma ina ia mafai ona faia e ala i le API, e tatau ona e faia ni gaioiga se lua. Muamua e tatau ona e tape le punaoa e ala i le setiina gracePeriodSeconds i le zero (0) ma propagationPolicy i le "Lama'a" ona toe faia lea o lenei punaoa ma le faʻamatalaga e manaʻomia.

Lapataiga: O lenei faiga e ono mata'utia ma e ono o'o atu ai i se tulaga e le'i fa'amalamalamaina.

Fa'aoga ile itu ole server

E pei ona taʻua i luga, o loʻo galulue le au atinaʻe Kubernetes i le faʻatinoina o le manatu apply mai kubectl i le Kubernetes API. Fa'atonuga apply avanoa ile Kubernetes 1.18 e ala ile kubectl apply --server-side po'o le API fa'aaoga le metotia PATCH с content-type application/apply-patch+YAML.

Faʻaaliga: O le JSON o loʻo aoga foi le YAML, o lea e mafai ai ona e lafoina le faʻamatalaga e pei o JSON tusa lava pe content-type o le a avea application/apply-patch+yaml.

E ese mai lena manatu kubectl avanoa mo tagata uma e ala ile API, apply i luga o le 'au'aunaga, siaki po'o ai e nafa ma fanua i totonu o fa'amatalaga, ma fa'ataga ai fa'amautu le tele o avanoa mo lona fa'asa'oga e aunoa ma se fete'ena'i. I se isi faaupuga, afai apply i luga o le itu o le server o le a sili atu ona salalau, o le a faʻaalia se fesoʻotaʻiga faʻapitoa mo le puleaina o punaoa mo tagata eseese, mo se faʻataʻitaʻiga, kubectl, Pulumi poʻo Terraform, GitOps, faʻapea foʻi ma tusitusiga tusitusia e faʻaaoga ai faletusi o tagata.

O taunuʻuga

Ou te faʻamoemoe o lenei faʻamatalaga puupuu o auala eseese e faʻafouina ai punaoa i fuifui na fesoasoani ia te oe. E lelei le iloa e le na'o le fa'aoga ma le sui e mafai ona fa'afou se punaoa e fa'aaoga ai le app, fa'asa'o, patch, pe sui. A uma mea uma, i le mataupu faavae, o auala taʻitasi e iai lana lava vaega o le faʻaoga. Mo suiga atomika, sui e sili atu, a le o lea, e tatau ona e faʻaogaina le faʻaogaina o le patch e ala i le faʻaoga. I le mea sili lava, ou te faʻamoemoe e te malamalama e le mafai ona e faʻatuatuaina Google poʻo StackOerflow pe a suʻeina "kubernetes apply vs replace". Le itiiti ifo se'ia suia e lenei tusiga le tali o lo'o iai nei.

Fa'atusatusaga Talafeagai o Kubernetes Fa'aoga, Sui ma Patch

puna: www.habr.com

Faaopoopo i ai se faamatalaga