He nui nā koho no Kubernetes no ka hoʻonui ʻana i nā kumuwaiwai: hoʻopili, hoʻoponopono, paʻi a hoʻololi. Aia ka huikau e pili ana i ka hana a kēlā me kēia a me ka wā e hoʻohana ai. E noʻonoʻo kākou.
ina kubectl patch
, ʻaʻole i komo ka hoʻohālikelike apply
и patch
. E nānā kēiaʻatikala i nā koho likeʻole, a me ka hoʻohana ponoʻana o kēlā me kēia.
I ka wā o ke ola o kahi kumu waiwai Kubernetes (lawelawe, hoʻolaha, komo, a me nā mea ʻē aʻe), i kekahi manawa pono ʻoe e hoʻololi, hoʻohui a wehe paha i kekahi mau waiwai o kēia kumuwaiwai. No ka laʻana, hoʻohui i kahi leka, hoʻonui a hoʻemi paha i ka helu o nā replicas.
Kubernetes CLI
Inā ʻoe e hana nei me nā pūʻulu Kubernetes ma o ka CLI, ua kamaʻāina ʻoe apply
и edit
. Hui apply
Heluhelu ʻo ia i ka ʻōlelo kikoʻī waiwai mai ka faila a hana i kahi "upsert" i ka hui Kubernetes, ʻo ia hoʻi. hana i ka punawai inā ʻaʻole i loaʻa a hōʻano hou inā loaʻa. Hui edit
Heluhelu i kahi kumuwaiwai ma o ka API, a laila kākau i ka ʻōlelo kikoʻī i kahi faila kūloko, a laila wehe ʻia i kahi hoʻoponopono kikokikona. Ma hope o kou hoʻoponopono ʻana a mālama i ka faila, kubectl
e hoʻouna i nā hoʻololi i hana ʻia ma o ka API, nāna e hoʻopili pono i kēia mau hoʻololi i ka kumuwaiwai.
ʻAʻole ʻike nā kānaka a pau i nā kauoha patch
и replace
. Hui patch
hiki iā ʻoe ke hoʻololi i kahi ʻāpana o kahi kikoʻī waiwai, hāʻawi wale i ka ʻāpana i hoʻololi ʻia ma ka laina kauoha. Hui replace
hana like me edit
, akā pono nā mea a pau e hana me ka lima: pono ʻoe e hoʻoiho i ka mana o kēia manawa o ka kikoʻī waiwai, no ka laʻana, me ka hoʻohana kubectl get -o yaml
, hoʻoponopono, a laila hoʻohana replace
e hoʻohou i kahi kumuwaiwai e like me kahi kikoʻī i hoʻololi ʻia. Hui replace
ʻaʻole e holo inā loaʻa kekahi hoʻololi ma waena o ka heluhelu ʻana a me ka hoʻololi ʻana i ka punawai.
API Kubernetes
Ua kamaʻāina paha ʻoe i nā ʻano hana CoreV1().Pods().Update()
, replaceNamespacedService
ai ole ia, patch_namespaced_deployment
, inā ʻoe e hana pū me nā pūʻulu ma o PUT
и PATCH
... Ma hea lā update
и replace
hoʻohana PUT
a me ka patch
, ʻaʻohe mea liʻiliʻi paha, hoʻohana PATCH
.
He mea kūpono eʻike i kēlā kubectl
hana pū me nā pūʻulu ma o API. ʻO ia hoʻi, kubectl
he wīwī ma luna o ka waihona mea kūʻai aku no ka ʻōlelo Go, kahi e hāʻawi nui ai i ka hiki ke hāʻawi i nā subcommands ma kahi ʻano paʻa a hiki ke heluhelu ʻia me ka hoʻohui ʻana i nā mana API maʻamau. No ka laʻana, e like me kāu i ʻike mua ai, ke ʻano apply
ʻaʻole i ʻōlelo ʻia ma luna ma ka paukū mua. I kēia manawa (Mei 2020, kokoke. mea unuhi) nā loina a pau kubectl apply
, i.e. ka hana ʻana i nā kumu waiwai ʻole a me ka hoʻonui ʻana i nā mea i loaʻa, hana holoʻokoʻa ma ka ʻaoʻao code kubectl
. Ke hooikaika nei apply
i ka ʻaoʻao API, akā aia nō i ka beta. E kākau au i nā kikoʻī hou aku ma lalo nei.
Pākuʻi ma ka paʻamau
Hoʻohana maikaʻi ʻia patch
, inā makemake ʻoe e hōʻano hou i ka punawai. Pēlā e hana ai nā hale waihona puke ʻelua ma luna o ka Kubernetes API a kubectl
(ʻaʻole he mea kupanaha, no ka mea, he wahī ia no ka waihona mea kūʻai aku, kokoke. mea unuhi).
E hana ma ka hoʻolālā
Nā hui a pau kubectl
apply
, edit
и patch
hoʻohana i ke ʻano PATCH
i nā noi HTTP e hoʻohou i kahi kumuwaiwai i loaʻa. Inā ʻoe e ʻimi i ka hoʻokō ʻana i nā kauoha i nā kikoʻī hou aku, a laila hoʻohana lākou a pau i ke ala patch
hiki ke hoʻohana i nā ala ʻē aʻe (e pili ana i kēia ma lalo). Ke ho'āʻo nei ka hoʻolālā hoʻohui hoʻohui i ka "hoʻoponopono" ma ka hoʻohui ʻana i ka kikoʻī i hāʻawi ʻia me ka kikoʻī e kū nei. ʻOi aku ka kikoʻī, hoʻāʻo ʻo ia e hoʻohui i nā mea ʻelua a me nā arrays, ʻo ia hoʻi nā loli i hoʻohui ʻia. No ka laʻana, e holo ana i ke kauoha patch
me kahi loli kaiapuni hou i ka kikoʻī pahu pahu, e hoʻohui ʻia kēlā ʻano hoʻololi kaiapuni i nā loli kaiapuni e kū nei ma mua o ke kākau ʻana iā lākou. No ka wehe ʻana i ka hoʻohana ʻana i kēia ala, pono ʻoe e hoʻoikaika i ka waiwai parameter i ka null i ka kikoʻī i hāʻawi ʻia. ʻO wai o nā hui kubectl
ʻOi aku ka maikaʻi o ka hoʻohana ʻana no ka hoʻonui ʻana?
Inā ʻoe e hana a mālama i kāu mau kumuwaiwai me ka hoʻohana ʻana kubectl apply
, i ka wā e hoʻonui ai ʻoi aku ka maikaʻi o ka hoʻohana mau ʻana kubectl apply
no laila kubectl
hiki ke hoʻokele i ka hoʻonohonoho ʻana a nānā pono i nā hoʻololi i noi ʻia mai kahi noi i kahi noi. Hoʻohana mau ka pōmaikaʻi apply
ʻo ia ka mālama ʻana i kahi kikoʻī i noi mua ʻia, e ʻae iā ia e ʻike i ka wā e wehe ʻia ai nā waiwai kikoʻī a me nā mea hoʻonohonoho. ʻAe kēia iā ʻoe e hoʻohana apply
e hoʻoneʻe i nā waiwai a me nā mea hoʻonohonoho, ʻoiai ʻaʻole e holo ka hui hoʻolālā maʻamau. Nā hui edit
и patch
mai hōʻano hou i nā memo i kēlā kubectl apply
hoʻohana e hahai i kāna mau hoʻololi, no laila ke nānā ʻia a hana ʻia ma o ka Kubernetes API, akā hana ʻia ma o nā kauoha. edit
и patch
, ʻike ʻole ʻia e nā kauoha ma hope apply
,ʻo ia hoʻi apply
ʻaʻole ia e wehe iā lākou inā ʻaʻole lākou i ʻike ʻia ma ka kikoʻī kikoʻī no apply
(Ua ʻōlelo ka palapala edit
и patch
hana hou i nā memo i hoʻohana ʻia apply
, akā ma ka hana - ʻaʻole).
Inā ʻaʻole ʻoe e hoʻohana i ke kauoha apply
, hiki ke hoʻohana e like me edit
, a patch
, ke koho ʻana i ke kauoha i kūpono i ka hoʻololi e hana ʻia nei. I ka hoʻohui ʻana a me ka hoʻololi ʻana i nā waiwai BOM, ʻano like nā ala ʻelua. I ka holoi ʻana i nā waiwai kikoʻī a i ʻole nā mea hoʻonohonoho edit
hana e like me ka hoʻomaka hoʻokahi manawa apply
, me ka mālama ʻana i ke ʻano o ka kikoʻī ma mua a ma hope o ka hoʻoponopono ʻia ʻana, no laila hiki iā ʻoe ke wehe pono i nā waiwai a me nā mea hoʻonohonoho mai kahi kumuwaiwai. Pono ʻoe e hoʻonohonoho pono i ka waiwai waiwai i ka null i ka kikoʻī no patch
e hoʻoneʻe iā ia mai ka punawai. ʻOi aku ka paʻakikī o ka wehe ʻana i kahi mea hoʻohana me ka hoʻohana ʻana i ka hoʻopili ʻana i ka hoʻohui ʻana no ka mea pono ia i ka hoʻohana ʻana i nā kuhikuhi merge. E ʻike i nā ala hoʻonui ʻē aʻe ma lalo nei no nā koho ʻē aʻe.
E hoʻokō i nā ʻano hana hou i ka waihona mea kūʻai aku e hana like me nā kauoha i luna kubectl
, pono e hoonoho i na noi content-type
в application/strategic-merge-patch+json
. Inā makemake ʻoe e wehe i nā waiwai i kahi kikoʻī, pono ʻoe e hoʻonohonoho pono i kā lākou mau waiwai i ka null ma ke ʻano like. kubectl patch
. Inā pono ʻoe e wehe i nā mea hoʻonohonoho, pono ʻoe e hoʻokomo i nā kuhikuhi hoʻohui i ka kikoʻī hou a i ʻole e hoʻohana i kahi ala ʻē aʻe i nā mea hou.
ʻO nā ala ʻē aʻe e hoʻonui ai
Kākoʻo ʻo Kubernetes i ʻelua mau ala hou: kubectl patch --type=merge
. Ke hana pū me ka Kubernetes API, pono ʻoe e hoʻohana i ke ʻano noi PATCH
a me ka hoʻokomo content-type
в application/merge-patch+json
.
Hoʻohana ka JSON patch approach, ma mua o ka hāʻawi ʻana i kahi kikoʻī ʻāpana o kahi kumuwaiwai, hoʻohana i ka hāʻawi ʻana i nā hoʻololi āu e makemake ai e hana i ka punawai ma ke ʻano he array, kahi i hōʻike ʻia ai kēlā me kēia ʻāpana o ka array i kahi wehewehe o ka hoʻololi i hana ʻia i ka punawai. He ala ʻoi aku ka maʻalahi a me ka ikaika o kēia ala e hōʻike ai i nā loli i hana ʻia, akā ma ke kumukūʻai o ka papa inoa ʻana i nā hoʻololi i hana ʻia ma kahi ʻano kūʻokoʻa, non-Kubernetes, ma mua o ka hoʻouna ʻana i kahi kikoʻī kumu waiwai. IN kubectl
hiki iā ʻoe ke koho iā JSON patch me ka hoʻohana kubectl patch --type=json
. Ke hoʻohana nei i ka Kubernetes API, hana kēia ala me ke ʻano noi PATCH
a me ka hoʻokomo content-type
в application/json-patch+json
.
Pono mākou i ka hilinaʻi - hoʻohana i ka hoʻololi
I kekahi mau hihia, pono ʻoe e hōʻoia ʻaʻole i hoʻololi ʻia kahi kumuwaiwai ma waena o ka manawa i heluhelu ʻia ai ka punawai a me ka wā e hoʻonui ʻia ai. I nā huaʻōlelo ʻē aʻe, pono ʻoe e hōʻoia i nā loli a pau atomika. I kēia hihia, pono ʻoe e hoʻohana e hoʻonui i nā kumuwaiwai replace
. No ka laʻana, inā loaʻa iā ʻoe kahi ConfigMap me kahi counter i hōʻano hou ʻia e nā kumu he nui, pono ʻoe e hōʻoia ʻaʻole e hoʻonui ʻia nā kumu ʻelua i ka counter i ka manawa like, e nalowale ai ka mea hou. No ka hōʻike ʻana, e noʻonoʻo i kahi kaʻina o nā hanana e hoʻohana ana i ke ala patch
:
- Loaʻa iā A a me B ke kūlana o kēia manawa o ka waiwai mai ka API
- Hoʻohou kēlā me kēia kūloko i ka kikoʻī ma ka hoʻonui ʻana i ka counter e hoʻokahi a me ka hoʻohui ʻana iā "A" a i ʻole "B" i kēlā me kēia me ka "updated-by" memo.
- A hoʻonui iki i ka punawai
- Hoʻohou ʻo B i ka punawai
ʻO ka hopena, ua nalowale ka hōʻano hou A. Hana hope patch
lanakila, hoʻonui ʻia ka counter e hoʻokahi ma mua o ʻelua, a pau ka waiwai o ka memo "updated-by" me "B" a ʻaʻohe "A". E hoʻohālikelike kākou i ka mea i luna me ka mea e hana ʻia ke hana ʻia nā mea hou me ka hoʻohana ʻana i ke ala replace
:
- Loaʻa iā A a me B ke kūlana o kēia manawa o ka waiwai mai ka API
- Hoʻohou kēlā me kēia kūloko i ka kikoʻī ma ka hoʻonui ʻana i ka counter e hoʻokahi a me ka hoʻohui ʻana iā "A" a i ʻole "B" i kēlā me kēia me ka "updated-by" memo.
- A hoʻonui iki i ka punawai
- Hoʻāʻo ʻo B e hōʻano hou i ka punawai, akā hōʻole ʻia ka mea hou e ka API no ka mea aia ka mana kumu i ka kikoʻī.
replace
'a'ole i kūlike me ka mana o kēia manawa o ka punawai ma Kubernetes no ka mea, ua ho'onui 'ia ka mana o ka punawai e ka hana pani a A.
Ma ka hihia i luna, pono ʻo B e kiʻi hou i ka kumuwaiwai, e hoʻololi i ka mokuʻāina hou a hoʻāʻo hou replace
. E hoʻonui kēia i ka counter e ʻelua a me ka memo "updated-by" e hoʻokomo i ka "AB" ma ka hopena.
Hōʻike ka laʻana i luna i ka wā e hoʻokō ai replace
Hoʻololi piha ʻia ka waiwai holoʻokoʻa. Hoʻohana ʻia no replace
, ʻaʻole pono he hapa, a i ʻole ma nā ʻāpana e like me ka apply
, akā piha, me ka hoʻohui resourceVersion
i loko o ka metadata kikoʻī. Inā ʻaʻole ʻoe i hoʻā resourceVersion
a i ʻole ka mana āu e hāʻawi ai i kēia manawa, e hōʻole ʻia ka mea pani. No laila ke ala maikaʻi loa e hoʻohana ai replace
- heluhelu i ka punawai, hoʻohou a hoʻololi koke. Ke hoʻohana nei kubectl
, penei paha ke ano:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Pono e hoʻomaopopo i kēia mau kauoha ʻelua, i hoʻokō ʻia ma ke kaʻina hana, e hoʻokō pono ana, ʻoiai deployment.yaml
aole waiwai .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Me he mea lā ua kūʻē kēia i ka mea i ʻōlelo ʻia ma luna, ʻo ia hoʻi. "hoʻohui resourceVersion
i loko o ka metadata kikoʻī." He hewa paha ka ʻōlelo ʻana pēlā? ʻAʻole, ʻaʻole ia, no ka mea inā kubectl
nā hoʻolaha āu i kuhikuhi ʻole ai resourceVersion
, e heluhelu ia mai ka punawai a hoʻohui i ka kikoʻī āu i kuhikuhi ai, a laila hoʻokō wale ia. replace
. No ka mea hiki ke pilikia kēia inā hilinaʻi ʻoe i ka atomicity, hana holoʻokoʻa ka hana kilokilo ma ka ʻaoʻao kubectl
, ʻaʻole pono ʻoe e hilinaʻi iā ia i ka wā e hoʻohana ai i nā hale waihona puke mea kūʻai aku e hana pū me ka API. I kēia hihia, pono ʻoe e heluhelu i ka ʻōlelo kikoʻī o kēia manawa, hoʻololi a hoʻokō PUT
noi.
ʻAʻole hiki iā ʻoe ke hana i kahi pāpale - hana mākou i kahi pani
I kekahi manawa pono ʻoe e hana i kekahi mau loli i hiki ʻole ke mālama ʻia e ka API. I kēia mau hihia, hiki iā ʻoe ke hoʻoikaika i ka hoʻololi ʻana i ka kumuwaiwai ma ka holoi ʻana a hana hou iā ia. Hana ʻia kēia me ka hoʻohana ʻana kubectl replace --force
. ʻO ka holo ʻana i ke kauoha e wehe koke i nā kumuwaiwai a laila hana hou iā lākou mai ka kikoʻī i hāʻawi ʻia. ʻAʻohe mea "hoʻololi ikaika" i ka API, a i mea e hana ai ma o ka API, pono ʻoe e hana i ʻelua hana. Pono mua ʻoe e holoi i ka punawai ma ka hoʻonohonoho ʻana iā ia gracePeriodSeconds
i ka zero (0) a propagationPolicy
ma "Background" a laila e hana hou i kēia kumuwaiwai me ka kikoʻī i makemake ʻia.
'Ōlelo Aʻo: He pilikia kēia ala a hiki ke alakaʻi i kahi kūlana i wehewehe ʻole ʻia.
E noi ma ka ʻaoʻao kikowaena
E like me ka mea i ʻōlelo ʻia ma luna, ke hana nei nā mea hoʻomohala Kubernetes i ka hoʻokō ʻana i ka loiloi apply
mai kubectl
i ka Kubernetes API. Lokoka apply
loaʻa ma Kubernetes 1.18 ma o kubectl apply --server-side
a i ʻole ma o ka API e hoʻohana ana i ke ʻano PATCH
с content-type
application/apply-patch+YAML
.
'Ōlelo Aʻo: He YAML kūpono ʻo JSON, no laila hiki iā ʻoe ke hoʻouna i ka kikoʻī e like me JSON inā paha
content-type
e eapplication/apply-patch+yaml
.
Ma waho aʻe o kēlā loiloi kubectl
loaʻa i nā mea a pau ma o ka API, apply
ma ka ʻaoʻao kikowaena, mālama i ka mea nona ke kuleana no nā māla i ka kikoʻī, pēlā e ʻae ai i ka hoʻopaʻa ʻana i nā mea he nui no kāna hoʻoponopono hakakā ʻole. ʻO ia hoʻi, inā apply
ma ka ʻaoʻao kikowaena e hoʻolaha nui ʻia, e ʻike ʻia kahi kikowaena hoʻokele waiwai palekana honua no nā mea kūʻai aku like ʻole, no ka laʻana, kubectl, Pulumi a i ʻole Terraform, GitOps, a me nā palapala kākau ponoʻī e hoʻohana ana i nā hale waihona puke.
Nā hopena
Manaʻo wau ua kōkua kēia ʻike pōkole o nā ʻano like ʻole e hoʻonui ai i nā kumuwaiwai i nā pūʻulu. Maikaʻi ka ʻike ʻana ʻaʻole pili wale ia me ka hoʻololi; hiki ke hoʻonui i kahi kumuwaiwai me ka hoʻohana ʻana i ka noi, hoʻoponopono, patch, a i ʻole ke pani. Ma hope o nā mea a pau, ma ke kumu, aia kēlā me kēia ala i kāna wahi ponoʻī o ka noi. No nā hoʻololi atomika, ʻoi aku ka maikaʻi o ka hoʻololi ʻana; inā ʻaʻole, pono ʻoe e hoʻohana i ka papa hoʻohui hoʻolālā ma o ka noi. Ma ka liʻiliʻi loa, manaʻo wau e hoʻomaopopo ʻoe ʻaʻole hiki iā ʻoe ke hilinaʻi iā Google a i ʻole StackOerflow ke ʻimi nei i "kubernetes apply vs replace". Ma ka liʻiliʻi a hiki i kēia ʻatikala ke pani i ka pane o kēia manawa.
Source: www.habr.com