He maha nga whiringa a Kubernetes mo te whakahou i nga rauemi: tono, whakatika, papaki me te whakakapi. He rangirua mo nga mahi a ia tangata me te wa hei whakamahi. Kia mohio tatou.
ki te kubectl patch
, kaore e uru ki te whakataurite apply
и patch
. Ka tirohia e tenei tuhinga nga whiringa rereke, me te whakamahi tika o ia waahanga.
I roto i te huringa ora o te rauemi Kubernetes (ratonga, horahanga, whakaurunga, aha atu.), i etahi wa ka hiahia koe ki te whakarereke, ki te taapiri, ki te tango ranei i etahi ahuatanga o tenei rauemi. Hei tauira, taapirihia he tuhipoka, whakanuia, whakahekehia ranei te maha o nga tauira.
Kubernetes CLI
Mēnā kei te mahi kē koe me ngā kāhui Kubernetes mā te CLI, kua mōhio kē koe apply
и edit
. Kapa apply
ka panui i te whakatakotoranga rauemi mai i te konae ka hanga he "upsert" ki te kahui Kubernetes, i.e. ka waihanga i te rauemi mena karekau, ka whakahou mena kei te noho. Kapa edit
ka panui i tetahi rauemi ma te API, katahi ka tuhi i te tohu rauemi ki tetahi konae rohe, ka whakatuwherahia ki te ētita tuhinga. I muri i to whakatika me te tiaki i te konae, kubectl
ka tukuna atu nga huringa i mahia ma te API, ka ata whakamahi i enei huringa ki te rauemi.
Kaore nga tangata katoa e mohio ki nga whakahau patch
и replace
. Kapa patch
ka taea e koe te huri i tetahi waahanga o te whakatakotoranga rauemi, ko te waahanga kua whakarereke noa i te raina whakahau. Kapa replace
mahi rite tonu edit
, engari me mahi a ringa nga mea katoa: me tango e koe te putanga o naianei o te whakatakotoranga rauemi, hei tauira, ma te whakamahi kubectl get -o yaml
, whakatikahia, katahi ka whakamahia replace
ki te whakahou i tetahi rauemi i runga i te waahanga kua whakarereketia. Kapa replace
e kore e mahi mena ka puta he huringa i waenga i te panui me te whakakapi i te rauemi.
Kubernetes API
Kua mohio pea koe ki nga tikanga CoreV1().Pods().Update()
, replaceNamespacedService
ranei patch_namespaced_deployment
, ki te mahi koe me nga tautau ma PUT
и PATCH
... Kei hea update
и replace
whakamahi PUT
a patch
, ahakoa he aha te mea iti, whakamahia PATCH
.
He mea pai kia kite i taua kubectl
ka mahi tahi me nga tautau ma te API. Arā, kubectl
he takai kei runga ake o te whare pukapuka kiritaki mo te reo Haere, e whakarato ana i te kaha ki te whakarato i nga whakahau iti i roto i te ahua kiato me te panui hei taapiri atu ki nga kaha API paerewa. Hei tauira, kua kite pea koe, ko te tikanga apply
kaore i whakahuahia i runga ake i te waahanga o mua. I tenei wa (Mei 2020, āhua. kaiwhakamaori) arorau katoa kubectl apply
, i.e. te hanga rauemi kore-kore me te whakahou i nga mea o mua, ka mahi katoa i te taha waehere kubectl
. Kei te mahia nga mahi apply
ki te taha API, engari kei te beta tonu. Ka tuhia e au etahi atu korero ki raro nei.
Papaki ma te taunoa
Pai rawa te whakamahi patch
, ki te hiahia koe ki te whakahou i te rauemi. Koinei te mahi a nga whare pukapuka kiritaki e rua ki runga ake o te Kubernetes API me kubectl
(kaore i te miharo, na te mea he takai mo te whare pukapuka kiritaki, āhua. kaiwhakamaori).
Mahi rautaki
Nga kapa katoa kubectl
apply
, edit
и patch
whakamahia te tikanga PATCH
i roto i nga tono HTTP ki te whakahou i tetahi rauemi o mua. Mena ka rukuhia e koe te whakatinanatanga o nga whakahau i roto i nga korero taipitopito, ka whakamahi katoa ratou i te huarahi patch
Ka taea e koe te whakamahi i etahi atu huarahi (he korero kei raro nei). Ko te huarahi whakahiato-rautaki e ngana ana ki te "whakatika" ma te whakakotahi i te tohu kua tukuna me te whakatakotoranga o naianei. He mea nui ake, ka ngana ki te whakakotahi i nga mea e rua me nga huinga, ko te tikanga he taapiri nga huringa. Hei tauira, whakahaere i te whakahau patch
me te taurangi taiao hou i roto i te whakatakotoranga ipu ipu, ka taapirihia taua taurangi taiao ki nga taurangi taiao o naianei, kaua ki te tuhirua. Hei tango ma te whakamahi i tenei huarahi, me kaha te uara tawhā ki te null i roto i te whakatakotoranga kua whakaratohia. Ko wai o nga kapa kubectl
He pai ake te whakamahi mo te whakahou?
Ki te hanga koe me te whakahaere i o rauemi ma te whakamahi kubectl apply
, i te wa e whakahou ana he pai ake te whakamahi i nga wa katoa kubectl apply
ki kubectl
ka taea te whakahaere whirihoranga me te whai tika i nga huringa i tonoa mai i te tono ki te tono. He painga ki te whakamahi i nga wa katoa apply
Ko te mea ka mau tonu i te whakatakotoranga o mua, kia mohio ai ki te wa e tangohia tikatia ai nga taonga whakangao me nga huānga huinga. Ma tenei ka taea e koe te whakamahi apply
ki te tango i nga taonga me nga huānga huānga, i te mea ka kore te hanumi rautaki noa e mahi. Nga kapa edit
и patch
kaua e whakahou i nga tuhipoka e kubectl apply
whakamahia ana ki te whai i ona huringa, no reira ko nga huringa ka aruhia, ka mahia ma te Kubernetes API, engari ma nga whakahau edit
и patch
, e kore e kitea e nga whakahau o muri mai apply
, ko apply
e kore e tango ahakoa karekau e puta ki te whakatakotoranga whakauru mo apply
(E kii ana nga tuhinga edit
и patch
hanga whakahounga ki nga tuhipoka i whakamahia apply
, engari i roto i te mahi - kaore).
Ki te kore koe e whakamahi i te whakahau apply
, ka taea te whakamahi hei edit
, a patch
, te whiriwhiri i te whakahau e pai ana ki te whakarereketanga e mahia ana. I te taapiri me te whakarereke i nga ahuatanga BOM, he rite tonu nga huarahi e rua. I te wa e muku ana i nga tohu tohu me nga huānga huānga edit
he rite ki te whakarewatanga kotahi apply
, tae atu ki te aroturuki i te ahua o te whakatakotoranga i mua me muri i te whakatikanga, kia taea ai e koe te tango i nga rawa me nga huānga huānga mai i tetahi rauemi. Me tino tautuhia e koe te uara taonga ki te kore i roto i te whakaritenga mo patch
ki te tango mai i te rauemi. He uaua ake te tango i tetahi huānga huānga ma te whakahiato rautaki-hanumi na te mea me whakamahi nga tohutohu hanumi. Tirohia etahi atu huarahi whakamohoatanga i raro nei mo etahi atu huarahi ka taea.
Hei whakatinana i nga tikanga whakahou i roto i te whare pukapuka kiritaki e rite ana te mahi ki nga whakahau i runga ake nei kubectl
, me whakatakoto i roto i nga tono content-type
в application/strategic-merge-patch+json
. Mena kei te pirangi koe ki te tango i nga taonga i roto i tetahi whakaritenga, me ata whakarite e koe o raatau uara ki te kore i te ahua rite. kubectl patch
. Mena ka hiahia koe ki te tango i nga huānga huānga, me whakauru koe i nga tohutohu hanumi i roto i te whakaritenga whakahou, me whakamahi ranei i tetahi huarahi rereke ki nga whakahou.
Ko etahi atu huarahi ki te whakahou
Ka tautokohia e Kubernetes etahi atu huarahi whakahou e rua: kubectl patch --type=merge
. I te mahi tahi me te Kubernetes API, me whakamahi koe i te tikanga tono PATCH
me te whakauru content-type
в application/merge-patch+json
.
Ko te huarahi papaki JSON, kaua ki te whakarato i tetahi waahanga waahanga o te rauemi, ka whakamahi i te whakarato i nga huringa e hiahia ana koe ki te hanga i te rauemi hei huānga, kei roto i ia huānga o te huānga he whakaahuatanga mo te huringa ka mahia ki te rauemi. Ko tenei huarahi he huarahi ngawari ake, he huarahi kaha ki te whakaatu i nga huringa ka mahia, engari i te utu mo te whakaraarangi i nga huringa ka mahia i roto i te whakatakotoranga motuhake, ehara i te Kubernetes, kaua ki te tuku i tetahi waahanga rauemi. IN kubectl
ka taea e koe te kowhiri i te papaki JSON ma te whakamahi kubectl patch --type=json
. Ina whakamahi i te Kubernetes API, ka mahi tenei huarahi ma te whakamahi i te tikanga tono PATCH
me te whakauru content-type
в application/json-patch+json
.
Me maia tatou - whakamahia te whakakapi
I etahi wa, me tino mohio koe kaore he whakarereketanga ki tetahi rauemi i waenga i te wa e panuihia ana te rauemi me te wa e whakahouhia ana. I etahi atu kupu, me whakarite e koe nga huringa katoa ngota. I tenei keehi, ki te whakahou i nga rauemi me whakamahi koe replace
. Hei tauira, ki te whai koe i tetahi ConfigMap me te porotiti kua whakahoutia e nga puna maha, me tino mohio koe kaore nga puna e rua e whakahou i te porotiti i te wa kotahi, ka ngaro te whakahou. Hei whakaatu, whakaarohia he raupapa o nga huihuinga ma te whakamahi i te huarahi patch
:
- Ka whiwhi a A me B i te ahuatanga o naianei o te rauemi mai i te API
- Ka whakahōuhia e ia tangata te whakaritenga ma te whakanui ake i te porotiti ma te kotahi me te taapiri "A" ranei "B" ki te tuhipoka "whakahou-a"
- A he tere ake te whakahou i te rauemi
- Ka whakahouhia e B te rauemi
Ko te mutunga, kua ngaro te whakahou A. Te mahi whakamutunga patch
ka toa, ka whakanuia te porotiti ma te kotahi, kaua ki te rua, ka mutu te uara o te tuhipoka "whakahou-a" ki te "B" kaore he "A". Me whakatairitehia nga korero o runga ake nei me nga mea ka puta ina oti nga whakahou ma te whakamahi i te huarahi replace
:
- Ka whiwhi a A me B i te ahuatanga o naianei o te rauemi mai i te API
- Ka whakahōuhia e ia tangata te whakaritenga ma te whakanui ake i te porotiti ma te kotahi me te taapiri "A" ranei "B" ki te tuhipoka "whakahou-a"
- A he tere ake te whakahou i te rauemi
- Ka ngana a B ki te whakahou i te rauemi, engari ka paopaohia te whakahou e te API na te mea kei roto te putanga rauemi i te whakaritenga.
replace
kaore e taurite ki te putanga o naianei o te rauemi i Kubernetes na te mea i whakanuia te putanga o te rauemi na te mahi whakakapi a A.
I runga ake nei, me tiki ano a B i te rauemi, me whakarereke ki te ahua hou ka ngana ano replace
. Ma tenei ka piki ake te porotiti kia rua me te tuhipoka "whakahou-e" ki te whakauru "AB" ki te mutunga.
Ko te tauira i runga ake nei e whakaatu ana i te wa e mahia ana replace
Kua whakakapi katoa te rauemi. Whakatakotoranga whakamahia mo replace
, kia kaua e wehewehe, kia rite ranei ki nga waahanga apply
, engari kua oti, tae atu ki te taapiri resourceVersion
ki roto i nga korero metadata. Mena kaore koe i whakahohe resourceVersion
ko te putanga ka tukuna e koe ehara i te mea o naianei, ka whakakorehia te whakakapinga. Na ko te huarahi tino pai ki te whakamahi replace
– panuihia te rauemi, whakahou me te whakakapi tonu. Te whakamahi kubectl
, penei pea te ahua:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
He mea tika kia mohio ko nga whakahau e rua e whai ake nei, ka mahia i runga i te raupapa, ka tutuki pai, i te mea deployment.yaml
karekau he rawa .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Ko te ahua nei kei te whakahee i nga korero i runga ake nei, i.e. " te taapiri resourceVersion
ki te metadata whakahuahua." He he te kii pera? Kao, kaore, na te mea mena kubectl
panui kaore koe i whakapūtā resourceVersion
, ka panuihia mai i te rauemi ka taapiri atu ki te tohu i tohua e koe, katahi ka mahia replace
. Na te mea he kino tenei mena ka whakawhirinaki koe ki te atomicity, ka mahi katoa te makutu ki te taha kubectl
, kaua koe e whakawhirinaki ki runga i te wa e whakamahi ana i nga whare pukapuka kiritaki e mahi tahi ana me te API. I tenei keehi me panui koe i te tuhinga rauemi o naianei, whakahouhia ka mahia PUT
tono.
Kaore e taea e koe te mahi papaki - ka whakakapihia e matou
I etahi wa ka hiahia koe ki te whakarereke i nga huringa kaore e taea e te API te whakahaere. I enei ahuatanga, ka taea e koe te kaha ki te whakakapi i te rauemi ma te whakakore me te hanga ano. Ka mahia tenei ma te whakamahi kubectl replace --force
. Ko te whakahaere i te whakahau ka tango tonu i nga rauemi katahi ka hanga ano mai i te whakaritenga kua tukuna. Karekau he kaihautu "whakakapi kaha" i roto i te API, a, kia mahia ma te API, me mahi e koe nga mahi e rua. Tuatahi me muku koe i te rauemi ma te tautuhi gracePeriodSeconds
ki te kore (0) me propagationPolicy
i roto i te "Pamuri" katahi ka hanga ano i tenei rauemi me te tohu e hiahiatia ana.
Whakatupato: He kino tenei huarahi, a tera pea ka puta he ahua kore taupatupatu.
Tonoa ki te taha tūmau
Ka rite ki te korero i runga ake nei, kei te mahi nga kaihanga Kubernetes ki te whakatinana i te arorau apply
Tuhinga ka whai mai kubectl
i roto i te Kubernetes API. arorau apply
e wātea ana i Kubernetes 1.18 mā kubectl apply --server-side
ma te API ranei ma te whakamahi i te tikanga PATCH
с content-type
application/apply-patch+YAML
.
Tuhipoka: He YAML whaimana ano a JSON, na ka taea e koe te tuku korero hei JSON ahakoa
content-type
ka waihoapplication/apply-patch+yaml
.
Haunga tera arorau kubectl
ka waatea ki te katoa ma te API, apply
i runga i te taha o te tūmau, ka aroturuki ko wai te kawenga mo nga mara i roto i te waahanga, na reira ka taea te uru atu ki te maha o nga waahanga mo tana whakatika-kore. I etahi atu kupu, mena apply
i runga i te taha tūmau ka nui ake te horapa, ka puta mai he atanga whakahaere rauemi haumaru mo nga kaihoko rereke, hei tauira, kubectl, Pulumi, Terraform ranei, GitOps, me nga tuhinga tuhi whaiaro ma te whakamahi i nga whare pukapuka kiritaki.
Ngā putanga
Te ti'aturi nei au i awhina tenei tirohanga poto mo nga huarahi rereke ki te whakahou i nga rauemi i roto i nga tautau. He pai ki te mohio ehara i te mea ka tono noa ki te whakakapi; ka taea te whakahou i tetahi rauemi ma te whakamahi i te tono, te whakatika, te papaki, te whakakapi ranei. I muri i nga mea katoa, i roto i te kaupapa, kei ia huarahi tana ake waahanga tono. Mo nga huringa ngota, he pai ake te whakakapi; ki te kore, me whakamahi koe i te papaki hanumi-rautaki ma te tono. I te iti rawa, e tumanako ana ahau kia mohio koe kaore e taea e koe te whakawhirinaki ki a Google, StackOerflow ranei i te wa e rapu ana "kubernetes tono vs whakakapi". I te iti rawa kia whakakapia e tenei tuhinga te whakautu o naianei.
Source: will.com