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.
ana 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 PUT
и PATCH
... Lea update
и replace
faʻaaoga PUT
ma 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, kubectl
o 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 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 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 apply
o 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 patch
e 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: 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 aveaapplication/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.
puna: www.habr.com