Te Whakataurite Tika mo nga Kubernetes Hoatu, Whakakapi me te Papaki

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.

Te Whakataurite Tika mo nga Kubernetes Hoatu, Whakakapi me te Papaki

ki te rapu i runga i a Google kei te waahi te kupu "kubernetes apply vs replace". whakautu ki a StackOverflow, kaore i te tika. I te wa e rapu ana "kubernetes apply vs patch" te hononga tuatahi ko te tuhinga mo 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 whare pukapuka kiritaki mo Kubernetes API te whakamahi i etahi reo hotaka. Ka whakahaerehia e te whare pukapuka enei tikanga ma nga tono HTTP ma te whakamahi i nga tikanga PUT и PATCH... Kei hea update и replace whakamahi PUTa 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ā, kubectlhe 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 i runga i te whakawhiti arorau 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 papaki rautaki-hanumi ki te whakahou rauemi, ahakoa te whakahau 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 applyki 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 patchki 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: JSON hanumi papaki и JSON papaki. Ko te huarahi papaki hanumi JSON ka tango i tetahi waahanga Kubernetes hei whakaurunga me te tautoko i te hanumi ahanoa rite ki te huarahi whakahiato-rautaki. Ko te rereketanga i waenga i nga mea e rua ko te tautoko anake i te whakakapinga huānga, tae atu ki te huinga ipu kei roto i te whakatakotoranga pod. Ko te tikanga, ina whakamahi ana koe i te papaki hanumi JSON, me whakarato koe i nga whakaritenga katoa mo nga ipu katoa mena ka huri nga taonga o tetahi ipu. Na he pai tenei huarahi mo te tango i nga huānga mai i te huinga i roto i te BOM. I runga i te raina whakahau ka taea e koe te kowhiri i te papaki hanumi JSON ma te whakamahi 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 waiho application/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.

Te Whakataurite Tika mo nga Kubernetes Hoatu, Whakakapi me te Papaki

Source: will.com

Tāpiri i te kōrero