Kubernetes ááĽáśá˝á ááááá áĽá á ááŤáŽá˝ á ááľáĄ á°ááĽáᣠá ááľáᣠááá á áĽá áá°áŤáľá˘ áĽáŤááłááłá¸á áá áĽáá°áá አáĽá ááź áĽáá°áá áááŁá¸á á፠áááŁáľ á áᢠáĽáľá˛ áĽáááá°áá˘
á¨áá kubectl patch
, áá
á áá˝á˝áá á áŤáŤáľáľá apply
и patch
. áá
á˝áá á¨á°ááŤáŠ á ááŤáŽá˝á, áĽáá˛áá á¨áĽáŤááłááąá áľáááá á á ááá áááá¨áłá.
á¨áŠá áááľáľ ááĽáľ (á áááááľáŁ áá°ááŤáľáŁ áááŁáľáŁ ááá°) á¨á áááľ áĄá°áľ áá áľ á ááłááľ áá á¨áá á ááĽáľ á ááłááľ ááĽá¨áśá˝ ááá¨áᣠáá¨á ááá ááľáááľ áŤáľáááááłáᢠáááłáᣠááľáłááť áŤááᣠá¨á°áŁááľá áĽááľ áá¨áአááá ááááąá˘
áŠá áááľáľ CLI
á áľááľáá á CLI á áŠá á¨Kubernetes áľáĽáľáŚá˝ áá áĽá¨á°áŠ á¨ááᣠáĽááľá áŤáááłáᢠapply
и edit
. áĄáľá apply
á¨ááá ááááŽá˝á á¨ááá áŤááŁá áĽá áá° áŠá áááľáľ áááľá°á âááłá°ááŤâ áŤá°áááᣠi.e. á¨áá ááĽáąá áááĽáŤá áĽá áŤá áŤáááááᢠáĄáľá edit
á á¤áá á á áŠá á ááľá áá¨á áŤááŁááŁá¨ááŤá á¨ááĽá¨áľ áááá ááááŤáá áá° á áŤáŁá˘áŤá ááá áá˝ááᣠá¨ááŤá á á˝áá á ááłá˘ ááľáĽ áá¨ááłáᢠáááá áŤáľá°áŤáá áĽá áŤáľááᥠá áá kubectl
á¨á°á°á¨ááľá áááŚá˝ á á¤áá á á áŠá áááś áááŤáᣠáá
á áĽááá
á áááŚá˝ á ááĽá¨áą áá á áĽááá áá°áá áŤáá˘
áľáĽááá ááá á°á á áŤáá
á patch
и replace
. áĄáľá patch
á áľáĽáá ááľáአáá á¨á°ááá áá ááá áĽáť á áá
á¨áĽ á¨ááĽá¨áľ ááááŤáá á á¨áá áĽáá˛ááአáŤáľá˝áááłáᢠáĄáľá replace
áá á°ááłáłá áá°áŤá edit
, ááá áá ááá ááá á áĽá
áá¨ááá á áá áľ: á¨á ááá á¨ááá ááááŽá˝á áľáŞáľ ááá¨áľ áŤáľáááááłá, áááłá, á áá áá. kubectl get -o yaml
ᣠá ááľá áŤáľáááľáŁ á¨á፠áá áá replace
á á°áá¨á¨ ááľáááľ áá°á¨áľ ááĽáľá áááááᢠáĄáľá replace
ááĽá¨áąá á ááá ἠáĽá á áá°áŤáľ ááŤá¨á áááŚá˝ á¨á°á¨á°áą á áá°áŤáá˘
Kubernetes á¤áá á
ááááŁáľ áá´áášá á á°áἠáŤáá áááá CoreV1().Pods().Update()
, replaceNamespacedService
ááá patch_namespaced_deployment
á¨áááľá°á áá á¨ááľá°áŤ á¨áá á á áŠá PUT
и PATCH
... á ááľáĄ update
и replace
áá áá PUT
á patch
, ááá áŤá
á ááá á˘ááá, áá ááá PATCH
.
áá
á áἠááŁá á¨áááŁá kubectl
áĽáá˛áá á á¤áá á á áŠá á¨áľáĽáľáĽ áá áá°áŤáᢠá áá áá, kubectl
áá ááá á á°áá áá á¤á°-áá˝áááľ áá áá á
á፠á˛áá áá
á á¨áá°á áá á¨á¤áá á á˝ááłáá˝ á á°á¨á᪠áááľ áľáááá˝á á á°á áá¨á¨ áĽá ááá ἠá áá˝á á
á˝ á¨áá
á¨áĽ á˝ááłá áá°áŁáᢠáááłá, áá°á á˛á áĽááłáľá°áááľ, áá´á apply
á áá°áá á ááá˝ áá á¨áá á áá°á áá°áᢠá á áá áá (áááŚáľ 2020) á áááľ á°ááá) ááá ááá kubectl apply
ᣠáááľá áĽ.á¤.á . á¨áááá ááĽáśá˝á ááá á áĽá áŤááľá áááá, áá á áá á áŽáą áá áá áá°áŤá kubectl
. áĽá¨áľ áĽá¨á°á°á¨á ááᢠapply
áá° á¤áá á ááᣠáá á ááá á á
áľá-ááááł áá ááᢠá¨áá
á áłá˝ á áááá áĽá˝ááá.
á ááŁáŞ á áá
ááἠáĽá
á áá á¨áá patch
, ááĽá¨áąá áááá á¨ááá. áááąá á¨á°áá á á¤á°-ááááá˝ á Kubernetes á¤áá á áĽá áá á¨áá°áŠáľ á áá
ááááľ ááᢠkubectl
(áá
áá°áá áá á¤á°-áá˝áááľ áá á
á፠áľááá ááá á áŤáľá°áá
á ᣠá áááľ á°ááá).
á áľááľ áľáŤ
ááá áĄáľáá˝ kubectl
apply
, edit
и patch
áá´áá á°á áá PATCH
á á¤á˝á˛á˛á áĽáŤá ááľáĽ áŤááá ááĽáľ áááááᢠá¨áľáĽááá˝á á á°ááŁá á á á áá áááá ááľáĽ á¨ááĄ, ááá á ááŤá¨áĄá áá ááá patch
ááá˝ á áŤááśá˝á áá áá áá˝áá (á¨áá
á áłá˝ á áá
áá á°á¨ááŞ)ᢠá¨áľáľáŤá´áá-áá
á°áľ áá áá á áŤááľ á¨áá¨á áá áááá á¨ááŁáŠ áááá ááá፠áá á ááááľ "áľááá áááľá¨á" ááááŤáᢠá á°áᨠááአáááąáá áĽááá˝ áĽá áľááľáŽá˝ áááŁáá ááááŤá, áá
áááľ áááŚáš á¨áá°áá á ááá፠á áá¸á. áááłá, áľáááá ááľáŹáľ patch
á ááľ áŽáá´ááá áľáá˛ááŹá˝á ááľáĽ áŤáá á á˛áľ á¨á áŤáŁá˘ á°áááá ááᣠá¨á áŤáŁá˘ á°ááááŽá˝ áá° ááŁáŽáš á¨á áŤáŁá˘ á°ááááŽá˝ áĽáá˛á¨áአáŤá°áááᢠáá
á á áŤááľ á áá áá áááľáááľáŁ á áá¨á á áááá ááá፠ááľáĽ á¨áááŞáŤ áĽá´áąá áá° áŁáśááľ ááľáá°áľ á ááĽááľá˘ á¨áĄáľááš ááľáĽ á¨áľáá kubectl
ááááá áá áá á¨á°áťá áá?
á°á á
áá ááĽáśá˝áá á¨áá አáĽá áŤááá አkubectl apply
, á áááá áá áááá áá áá á¨á°áťá áá kubectl apply
á kubectl
áá
á¨áľá ááľá°áłá°á áĽá á¨á°á á¨á áááŚá˝á á¨áá°áá áŞáŤ áá° áá°áá áŞáŤ á áľááá áá¨áłá°á áá˝ááᢠáĽá
ááĽá
áá˝ áá áá áá áá apply
áá°á á˛á á¨á°á°áá á¨áá áááá áááł áá¨áłá°ááᣠáá
á á¨áááá áŁá
áŞáŤáľ áĽá á¨áľááľá á áŤááľ á ááá˝ á˛áááą áĽáá˛áŤáá
áŤáľá˝áááᢠáá
áĽááľáľá áá ááá
áľááá apply
ááĽá¨áśá˝á áĽá á¨áľááľá áááá˝á áááľáááľ, áá°á á á¨áľáľáŤá´áá áá
á°áľ á áá°áŤá. áĄáľáá˝ edit
и patch
ááľáłááťáá˝á á áłááá kubectl apply
áááŚášá ááá¨áłá°á áá áááᣠáľááá
á Kubernetes á¤áá á á áŠá á¨áá°á¨á ááá¸áá áááŚá˝áŁ ááá áá á áľáĽááá˝ á¨á°á°á¨á áááŚá˝ edit
и patch
, ááááĽááľ áľáááá˝ á¨áááłá apply
áá apply
á áá¤áľ áááá ááľáĽ áŁááłáŠá á áŤáľáááłá¸ááᢠapply
(á°ááą áĽáá˛á
áááᢠedit
и patch
áĽá
á áá á ááá ááľáłááťáá˝ áá ááťáťáŤ ááľá¨á apply
, áá á á°ááŁá - á áá°áá).
áľáááá áŤáá°á áá apply
, áĽáá° áĽá
á áá ááá áá˝áá edit
, áĽá patch
áĽá¨áᣠááá ááἠá¨ááľáááá áľáĽáá ááá¨áĽá˘ á¨BOM ááĽá¨áśá˝á á˛á¨áአáĽá á˛ááአáááąá á ááŤá¨áŚá˝ á áááľ á°ááłáłá áá¸áᢠá¨áááá áŁá
áŞáŤáľá ááá á¨áľááľá áááá˝á á˛á°áá edit
áĽáá° á ááľ áá ááľáááŞáŤ áá áŤá apply
ááááŤá á¨ááľá°áŤá¨á á ááľ áĽá á áá áá áĽáá°áááľá áá¨áłá°áá á¨ááŽáŁ áľááá
ááĽá¨áśá˝á áĽá á¨áľááľá áááá˝á á¨ááĽá¨áľ áá á ááá
ááľáááľ áá˝ááᢠá áááአááľáĽ á¨ááĽá¨áľ áááá áá° áŁáśááľ á ááá
ááľááἠáŤáľáááááłá patch
á¨ááĽá¨áą ááľáĽ áááľáááľ. á¨áľáľáŤá´á-áá
á°áľ ááá áá á áá áá á¨áľááľá á áŤáá ááľáááľ á¨á áá ááľáĽáľáĽ áá ááááŤáąá á¨áá
á°áľ áááŞáŤáá˝á áá ááá áá áááᢠáá áá á áá á ááŤáŽá˝ ááá˝ á¨ááťáťáŤ ááááśá˝á áááá¨áąá˘
á¨áá áŤááľ áľáááá˝ áá á°ááłáłá áŁá
᪠áŤáá¸áá á¨á°áá á á¤á°-áá˝áááľ ááľáĽ á¨áááá áá´áá˝á á°ááŁáŤá áááľá¨á kubectl
, á áĽáŤááá˝ ááľáĽ áááἠá áá áľ content-type
в application/strategic-merge-patch+json
. ááĽá¨áśášá á áááá ááľáĽ áááľáááľ á¨ááá áĽá´áśáťá¸áá á á°ááłáłá ááááľ ááľá
á áľááá áááá áŤáľáááááłá kubectl patch
. á¨áľááľá á áŁáá˝á ááľáááľ áŤáľáááááľ á¨áá
á°áľ áááŞáŤáá˝á á áááá áááá ááľáĽ ááŤá°áľ á ááĽááľ ááá áááááá˝ á¨á°áᨠá ááŤá¨áĽ áá ááá˘
áááááá˝ ááá˝ á ááŤá¨áŚá˝
Kubernetes ááá˝ áááľ á¨ááťáťáŤ á ááŤá¨áŚá˝á áá°áááᥠkubectl patch --type=merge
. ᨠKubernetes á¤áá á áá á˛á°áŠ á¨áĽáŤá áá´á áá áá á ááĽááľ PATCH
áĽá ááŤá content-type
в application/merge-patch+json
.
á¨JSON á áá á ááŤá¨áĽ á¨ááĽáľ á¨áá áááá ááá፠á¨ááľá áľ ááá
á ááĽáą áá ááľá¨á á¨ááááá¸áá áááŚá˝ áĽáá° áľááľá á áá
á¨áĽ áá áááᣠá áá
ááľáĽ áĽáŤááłááą á¨áľááľá á áŤá á ááĽáą áá á¨áá°á¨ááá ááἠááá፠áŤáłáŤáᢠáá
á áŤááľ áĽá¨á°á°á¨á áŤááľá áááŚá˝ ááááá
á¨á áá á°áááá áĽá áááá ááááľ ááᣠááá áá áááŚášá áááááá á¨ááŤáľá¨ááá á¨áá á¨ááĽáľ áááá ááá፠á¨ááá ááá
á á°áᨠá¨áŠá áááľáľ á
áá¸áľ á áá°ááᢠááľáĽ kubectl
á áá áá JSON patch ááá¨áĽ áá˝ááᢠkubectl patch --type=json
. á¨áŠá áááľáľ á¤áá áá á˛á áá áá
á áŤááľ á¨áĽáŤááá áá´ á áá áá áá°áŤá PATCH
áĽá ááŤá content-type
в application/json-patch+json
.
á áŤáľ áá°ááá áŤáľááááá - ááľá áá áá
á á ááłááľ áááłáá˝áŁ ááĽáą á ááá áĽá áľ áá áĽá á ááááá áľ áá ááŤá¨á ááá áááŚá˝ áĽááłáá°á°á¨á áĽááá á ááá á ááĽááľá˘ á áá á áááá ááá áááŚá˝ áĽáá°ááá áá¨ááἠá ááĽááľ á áśáá. á áá
á ááŁá, áá áá áŤááĽááľá ááĽáśá˝ ááááá replace
. áááłáᣠConfigMap (ConfigMap) áŤáá ááŁáŞ áŤáá á áĽá áááŽá˝ á¨áááá á¨ááᣠáááľ áááŽá˝ á á°ááłáłá áá ááŁáŞáá áĽáá°ááŤááá áĽááá á ááá á ááĽááľáŁ áá
á áááá áĽáá˛á á áŤá°ááááᢠáááłá¨áľáŁ á ááŤá¨áĄá á áá áá á¨ááľá°áśá˝á á
á°á á°á¨á°á á áľáĽ patch
:
- A áĽá B á¨ááĽá¨áąá áá áłá áááł á¨á¤áá á áŤááá
- áĽáŤááłááą á°á ááŁáŞáá á á ááľ á áá¨áá áĽá áĽáá˛áá á á á°á á°á¨á°á "A" ááá "B" á "á¨á°áťáťáá" ááľáłááť áá á áá¨áá áááá ááááŤáá áŤáááá.
- áĽá ááĽáąá á áľááš á ááĽááľ áŤááááá˘
- B ááĽá¨áąá áŤáťá˝áá
á áá¤áąá, A ááá á ááˇá. á¨áá¨á¨áťá ááś áĽáá patch
áŤá¸áááᣠááŁáŞá á áááľ áááł á á ááľ áá¨ááŤáᣠáĽá á¨"á¨ááá" ááľáłááť áá á "B" áŤá áá áĽá "á" á ááŤááᢠá ááŤá¨áĄá á áá áá ááááá˝ á˛á°á¨á á¨ááá á¨á áá áĽáááłáľá replace
:
- A áĽá B á¨ááĽá¨áąá áá áłá áááł á¨á¤áá á áŤááá
- áĽáŤááłááą á°á ááŁáŞáá á á ááľ á áá¨áá áĽá áĽáá˛áá á á á°á á°á¨á°á "A" ááá "B" á "á¨á°áťáťáá" ááľáłááť áá á áá¨áá áááá ááááŤáá áŤáááá.
- áĽá ááĽáąá á áľááš á ááĽááľ áŤááááá˘
- B ááĽá¨áąá ááááá ááááŤáᣠááá áá áááá á á¤áá á ááľá
á°á°ááá ááááŤáąá á¨ááĽá¨áľ áľáŞáą á áááአááľáĽ ááá˘
replace
á Kubernetes ááľáĽ áŤáá á¨ááĽá¨áą áľáŞáľ áá á ááááľá ááááŤáąá á¨ááĽá¨áą áĽáľá á A ááľá ááá á°á¨ááŻáá˘
á¨áá áŁáá áááł B ááĽá¨áąá áĽáá°áá áááŁáľáŁ á á á˛áą áááľ áá áááŚá˝á ááľá¨á áĽá áĽáá°áá ááá¨á á áá áľá˘ replace
. áá
ááŁáŞáá á áááľ áĽáá˛á¨áá áĽá "á¨á°áťáťáá" ááľáłááť "AB" áá¨á¨áť áá áĽáá˛á¨áá áŤá°ááááá˘
á¨áá áŤáá ááłá á˛á°áá á áŤáłáŤá replace
á á
ááá ááĽáľ áá á áá á°á°ááˇáᢠáĽá
á áá á¨ááá áááá ááá፠replace
ᣠá¨áá ááá á¨áá áľá ᣠááá á áááá˝ ááľáĽ áĽáá° ááľáĽ apply
, ááá áá á¨á°áá, áá¨ááá á¨áᎠresourceVersion
áá° áááá á˛á áááĽá˘ áŤáááá
resourceVersion
ááá áŤáá¨áĄáľ áĽáľá á¨á áá á áá°ááᣠáá°áŤáą ááľá
ááááᢠáľááá
ááá áá á áŁá áĽáŠá á ááŤá¨áĽ ááᢠreplace
- ááĽáąá áŤááĽáĄ, áŤááááľ áĽá áá˛áŤáá áá°áŠ. á áá áá kubectl
áá
á áááľá áá˝áááĄ-
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
á á°á¨áłáłá á¨áá¨ááááľ á¨áá¨á°ááľ áááľ áľáááá˝ á á°áłáŤ áááł áĽáá°áá¨ááá áἠááŁá áááŁá deployment.yaml
ááĽá¨áľ á ááŤááᢠ.metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
áá
á¨áá á¨á°ááá¸á áá á¨ááá¨á áááľááᣠáááľá " á áá¨á resourceVersion
áá° áľáá˛ááŹá˝á ááłáłáłá˘" áá
á áááľ áľá
á°áľ áá? á áá°ááᣠá áá°ááᣠááááŤáąá á¨áá kubectl
áĽááľá áŤáááášáľá áŤáľá°ááá resourceVersion
ᣠá¨áá¨áá áá áŤááĽá áá áĽá á ááá˝á¨á áááá ááľáĽ áŤááá áĽá á¨á፠á áá áĽáť áŤáľáá˝ááá replace
. á á áśáá áá á¨á°áአáá
á á°áá ááá áľááá˝á, á áľááą áá á áá á áá á áŠá áá°áŤá kubectl
á¨á¤áá á áá á¨áá°áŠ á¨á°áá á á¤á°-ááááá˝á á˛á áá á áĽáą áá áá°ááá á¨ááĽááľáᢠá áá
á ááŁá á¨á ááá á¨ááĽá¨áľ áááá ááá፠ááá áĽáŁ áááá áĽá á¨á፠ááľáá¸á ááááĽááłá PUT
áĽáŤá
áááľá°á ááľá¨á á áá˝áá - ááľá áĽáá°áŤáá
á ááłááľ áá á á¤áá á ááŤá á¨ááá˝á á ááłááľ áááŚá˝á ááľá¨á áŤáľáááááłáᢠá áĽááá
á ááŁááá˝ ááĽá¨áąá á áá°á¨á áĽá áĽáá°áá á ááá á áĽáá˛á°áŤ ááľáá°áľ áá˝áá. áá
á¨áá¨áááá á áá áá ááᢠkubectl replace --force
. áľáááá ááľáŹáľ áá˛áŤáá ááĽáśášá áŤáľáááłá áĽá á¨á፠á¨áá¨á á áááá ááľáĽ áĽáá°áá áááĽáŤáᢠá á¤áá á ááľáĽ "á¨ááá ááľá" á°ááŁáŁáŞ á¨áá, áĽá á á¤áá á á áŠá áá
áá áááľá¨á, áááľ áľáŤáá˝á áá¨ááá áŤáľáááááłá. á ááááŞáŤ ááĽáą á áááá á ááĽáąá áá°á¨á áŤáľáááááłá gracePeriodSeconds
áá° áᎠ(0) áĽá propagationPolicy
á "áłáŤ" ááľáĽ áĽá á¨á፠á ááááá ááľáááľ áá
áá áááá፠áĽáá°áá ááá áŠ.
ááľá ááááŤáĄ áá á áŤááľ á á°áá ááá áľááá˝á áá° áŤáá°ááḠáááł ááŤá፠áá˝ááá˘
á á áááአá áŠá áŤááááą
á¨áá áĽáá°á°á áá°á á¨áŠá áááľáľ ááá˘áá˝ á ááááŽáá á áá°áá á áá áá¸á apply
ᨠkubectl
á Kubernetes API. á ááááŽáá˝ apply
Kubernetes ááľáĽ áááá 1.18 á áŠá kubectl apply --server-side
ááá áá´áá á áá áá á á¤áá á á áŠá PATCH
Ń content-type
application/apply-patch+YAML
.
ááľáłááťáĄ JSON áĽáá˛á YAML á¨áá°áŤ ááᣠáľááá ááááŤáá áĽáá° JSON ááá áá˝áá ááá áĽááłá
content-type
ááááapplication/apply-patch+yaml
.
á¨á፠ááá á á°á¨á᪠kubectl
á á¤áá á á áŠá áááá á°á áááá ᣠapply
á á áááአá áŠá á áľááľááŹá˝á ááľáĽ áááľ ááľáŽá˝ á°á áŤáá áá áĽáá°áá áá¨áłá°áá ᣠáľáááá á¨áááľ áá á¨áá á ááľááľ á°á
áááą á¨á°á á á á ááŤáł ááłá¨áťáá˝á ááá
áłáᢠá áá á áááá, á¨áá apply
á á áááአá áŠá á¨á áá á¨á°áľáá áááá ᣠáááá°áá á°á
áááą á¨á°á á á á¨áá¨á á áŤáŤá á áááá˝ áá°ááŤáŠ á°áá áá˝ ááłáŤá ᣠáááłá ᣠkubectl ᣠPulumi ááá Terraform ᣠGitOps ᣠáĽáá˛áá á¨á°áá á á¤á°-áá˝áááľá á áá áá á áŤáľ á¨á°áá áľááŞááśá˝á˘
áá¤áśá˝
á áááľá°á ááľáĽ áŤá ááĽáśá˝á á¨áááá á¨á°ááŤáŠ ááááśá˝ á áá ááá፠ááĽááľá á áá áĽáá°áá ᨠá°áľá á á°ááááᢠá áá°áŤáľ áĽáť á¨áá°áá á áĽááłááá ááá áĽáŠ ááᣠá áááŹá˝áᣠá ááľáᣠá ááᣠááá ááľáá á áá áá áŞáśááľ áááá ááťááᢠá¨ááá á áá, á ááá á°á¨á, áĽáŤááłááą á ááŤá¨áĽ á¨áŤáą á¨áá á¨áááá¨áť áŚáł á áá. áá áśáá áááŚá˝áŁ áá°áŤáľ á°ááŤá ááᣠáŤáá áááŤáŁ á áááá¨áľ áľáľáŤá´á áŤá-ááááľ áááľá°á áá áá á ááŚáľá˘ á˘áŤááľ âkubernetes apply vs replaceâá á˛ááá áááá ááá StackOerflowá ááá áĽáá°ááľá˝á áĽááľáľá¨áą áĽá áĽáááᢠá˘áŤááľ áá á˝áá á¨á ááá áááľ áĽáľáŞá°áŤ áľá¨áľá˘
ááá: hab.com