Kubernetes ááœáẠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡ááºááááºáá¯ááºááẠááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ ááŸááááº- á¡áá¯á¶ážááŒá¯áááºá áááºážááŒááºááŒááºážá ááŒááºáááºááŒááºážááŸáá·áº á¡á á¬ážááá¯ážááŒááºáž áá áºáá¯áá»ááºážá á®á áá¬ááœá±áá¯ááºááá²á áááºá¡áá»áááºáá¯á¶ážááááºááá¯áá¬áá²á· áááºáááºááŒá®áž ááŸá¯ááºááœá±ážááŸá¯ááœá± ááŸááá±áá«áááºá á¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá
áá»áŸáẠkubectl patch
ááŸáá¯ááºážááŸááºááŸá¯ ááá«áááºáá«á apply
О patch
. á€áá±á¬ááºážáá«ážááœáẠááá°áá®áá±á¬ááœá±ážáá»ááºááŸá¯áá»á¬ážá¡ááŒáẠáá
áºáá¯áá»ááºážá
á®á ááá·áºáá»á±á¬áºáá±á¬á¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááŒáá·áºááŸá¯áá«áááºá
Kubernetes áááºážááŒá Ạ(áááºáá±á¬ááºááŸá¯á á¡áá¯á¶ážáá»ááŸá¯á ááœááºážááŸá¯á á áááºááŒáá·áº) ááááá¶ááá¬á¡ááœááºáž áá áºáá«áá áºáá¶ááœáẠáááºááẠá€á¡áááºážá¡ááŒá áºá áá¯ááºááá¹ááá¡áá»áá¯á·ááᯠááŒá±á¬ááºážáá²áááºá ááá·áºááẠááá¯á·ááá¯áẠáááºááŸá¬ážááẠááá¯á¡ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá¯á¶áá°á¡áá±á¡ááœááºááᯠááá¯ážááẠááá¯á·ááá¯áẠáá»áŸá±á¬á·áá»ááẠááŸááºá á¯áá áºáá¯ááá·áºáá«á
Kubernetes CLI
á¡áááºá áááºááẠCLI ááŸáá
áºááá·áº Kubernetes á¡á
á¯á¡áá±ážáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá±áá«áá áááºááŸáá·áº áááºážááŸá®ážááŒá®ážáá¬ážááŒá
áºáááºá apply
О edit
. á¡áááºážá¡ááœá²á· apply
ááá¯ááºá០á¡áááºážá¡ááŒá
áºáááºááŸááºáá»ááºááᯠáááºááŒá®áž Kubernetes á¡á
á¯á¡áá±ážááá¯á· "upsert" ááŒá¯áá¯ááºáááºá áááŸááá»áŸáẠáááºážááŒá
áºááᯠáááºáá®ážááŒá®áž ááŸááá»áŸáẠáááºážááᯠá¡ááºááááºáá¯ááºáá«á á¡áááºážá¡ááœá²á· edit
API ááŸáá
áºááá·áº á¡áááºážá¡ááŒá
áºáá
áºáá¯ááᯠáááºááŒá®áž á¡áááºážá¡ááŒá
áºáááºááŸááºáá»ááºááᯠá
á¬áá¬ážáááºážááŒááºááŸá¯ááœáẠááœáá·áºáá¬ážááá·áº áá±áááá¯ááºáá
áºáá¯ááá¯á· áá±ážáááºá ááá¯ááºááᯠáááºážááŒááºááŒá®áž ááááºážáááºážááŒá®ážáá±á¬ááºá kubectl
á€ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá¡áááºážá¡ááŒá
áºááá¯á· ááá¯áá
áá¯áẠá¡áá¯á¶ážáá»ááá·áº API ááŸáááá·áº ááŒá¯áá¯ááºáá¬ážáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒááºáááºáá±ážááá¯á·áá«áááºá
á¡áááá·áºááœá±ááᯠáá°ááá¯ááºážáááááŒáá«áá°ážá patch
О replace
. á¡áááºážá¡ááœá²á· patch
command line áá±á«áºááŸá ááŒá±á¬ááºážáá²áá¬ážáá±á¬ á¡ááá¯ááºážááá¯áᬠáá¶á·ááá¯ážáá±ážááá·áº á¡áááºážá¡ááŒá
áºáááºááŸááºáá»ááºá á¡á
áááºá¡ááá¯ááºážááᯠááŒá±á¬ááºážáá²ááá¯ááºá
á±áá«áááºá á¡áááºážá¡ááœá²á· replace
á¡áá°áá°á¡áá¯ááºáá¯ááºáá«áááºá edit
ááá¯á·áá±á¬áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááº- á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºážá¡ááŒá
áºáááºááŸááºáá»ááºá áááºááŸááá¬ážááŸááºážááᯠáááºáá±á«ááºážáá¯ááºáá¯ááºááẠááá¯á¡ááºáááºá kubectl get -o yaml
áááºážááŒááºáá«á ááá¯á·áá±á¬áẠá¡áá¯á¶ážááŒá¯áá«á replace
ááŒá±á¬ááºážáá²áá¬ážáá±á¬ áááºááŸááºáá»ááºáá»á¬ážá¡á á¡áááºážá¡ááŒá
áºáá
áºáá¯ááᯠá¡ááºááááºáá¯ááºáááºá á¡áááºážá¡ááœá²á· replace
áááºááŸá¯ááŒááºážááŸáá·áº á¡áááºážá¡ááŒá
áºááᯠá¡á
á¬ážááá¯ážááŒááºážááŒá¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá
áºá
á¯á¶áá
áºáᬠááŒá
áºáá±á«áºáá«á á¡áá¯ááºáááŒá
áºáá«á
Kubernetes API
áááºážáááºážááœá±ááᯠááẠáááºážááŸá®ážááŒá®ážáá¬áž ááŒá
áºááá¯ááºáá«áááºá CoreV1().Pods().Update()
, replaceNamespacedService
ááá¯á·ááá¯áẠpatch_namespaced_deployment
ááá·áºááŒáœááºááŸáá·áºá¡áá¯ááºáá¯ááºáá»áŸáẠPUT
О PATCH
... áááºááŸá¬áá² update
О replace
á¡áá¯á¶ážááŒá¯ááẠPUT
ááŸáá·áº patch
áááºáá±á¬ááºáá²á¡áá±ážá¡ááœá²ááŒá
áºáá«á
á±á áá¯á¶ážáá«áááºá PATCH
.
ááá¯ááá¯á·áááááŒá¯ááá»áá¯ážáááºááẠkubectl
API ááŸáá
áºááá·áº á¡á
á¯á¡ááœá²á·áá»á¬ážááŸáá·áºáááºáž áá¯ááºáá±á¬ááºáááºá áá
áºáááºážááŒá±á¬ááááºáá±á¬á·, kubectl
á
ᶠAPI á
áœááºážáááºáá»á¬ážá¡ááŒáẠá
ᶠAPI á
áœááºážáááºáá»á¬ážá¡ááŒáẠááá¯ááá¯áá»á
áºáá
áºááŒá®áž áááºáááœááºáá°áá±á¬áá¯á¶á
á¶ááŒáá·áº ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážáá±ážáá±á¬ááºááá¯ááºá
á±ááá·áº Go language á¡ááœáẠáááá¯ááºážááá·áºáá
áºáá»á
áºááá¯ááºáááááºááœáẠáá¯ááºááá¯ážáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºáááááŒá¯ááááŒá®ážáá¬ážááŒá
áºááá¯ááºááá²á·ááá¯á·á áááºážáááºáž apply
ááááºá
á¬ááá¯ááºááœáẠá¡áááºáá±á¬áºááŒáá« áááŸááá²á·áá«á áá±á¬áá±á¬ááẠ(áá±á 2020 áá¯ááŸá
áºá á¡áá®ážá
ááºáá¯á¶áž áá¬áá¬ááŒááºáá°) áá¯áá¹áááá±áá¡á¬ážáá¯á¶áž kubectl apply
, i.e. áááŸááá±á¬á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠáááºáá®ážááŒááºážááŸáá·áº ááŸáááŒá®ážáá¬ážá¡áá¬áá»á¬ážááᯠá¡ááºááááºáá¯ááºááŒááºážá áá¯ááºáááºááœáẠáá¯á¶ážáá¡áá¯ááºáá¯ááºáááºá kubectl
. ááŒáá¯ážáááºážáá±á¬ááºááœááºáá»ááºááŸááááºá apply
API áááºááá¯á·á ááá¯á·áá±á¬áºáááºážááẠbeta ááœááºááŸááá±áá²ááŒá
áºáááºá á¡á±á¬ááºááŸá¬ á¡áá±ážá
áááºáá±ážáá±ážáá«áááºá
áá°áááºážá¡ááá¯ááºáž Patch áá¯ááºáá«á
á¡áá±á¬ááºážáá¯á¶ážáá¯á¶ážáááºá patch
á¡áááºážá¡ááŒá
áºááᯠááœááºážáá¶ááá¯áá«áá á€áááºááŸá¬ Kubernetes API áááááºááœáẠáááá¯ááºážááá·áºá
á¬ááŒáá·áºááá¯ááºááŸá
áºáá¯áá¯á¶áž á¡áá¯ááºáá¯ááºáá¯á¶ááŒá
áºáááºá kubectl
(á¡á¶á·ááŒá
áá¬ááá¯ááºáá«á áááºážááẠclient library á¡ááœáẠwrapper áá
áºáá¯ááŒá
áºáá±á¬ááŒá±á¬áá·áºá á¡áá®ážá
ááºáá¯á¶áž áá¬áá¬ááŒááºáá°).
áá»á°áá¬áá»áá» áá¯ááºáá±á¬ááºáá«á
á¡áááºážá¡á¬ážáá¯á¶áž kubectl
apply
, edit
О patch
áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯ PATCH
HTTP áá±á¬ááºážááá¯áá»ááºáá»á¬ážááœáẠááŸáááŒá®ážáá¬ážáááºážááŒá
áºáá
áºáá¯ááᯠá¡ááºááááºáá¯ááºáá«á áááºááá¯ááá¯á¡áá±ážá
áááºáá±á¬ command áá»á¬ážááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááœááºá¡áá±ážá
áááºáá±á·áá¬áá«áá áááºážááá¯á·á¡á¬ážáá¯á¶ážáááºáá»ááºážáááºááŸá¯ááá¯á¡áá¯á¶ážááŒá¯áá«á patch
á¡ááŒá¬ážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá ááá¬áá»á°áá¬ááŒá±á¬áẠáá±á«ááºážá
ááºážáá±áž áá»ááºážáááºááŸá¯ áá»ááºážáááºááŸá¯ááẠáá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ áááºááŸááºáá»ááºááᯠááŸáááŒá®ážáá¬áž áááºááŸááºáá»ááºáá»á¬ážááŸáá·áº áá±á«ááºážá
ááºážááŒááºážááŒáá·áº "ááŸááºáááºá
á±áááº" ááŒáá¯ážáááºážáááºá ááá¯ááááá»áááºááŸá¬á áááºážááẠá¡áá¬ááá¹áá¯áá»á¬ážááŸáá·áº array ááŸá
áºáá¯áá¯á¶ážááᯠáá±á«ááºážá
ááºááẠááŒáá¯ážá
á¬ážáááºá ááá¯ááá¯áááºááŸá¬ ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠáá±á«ááºážááá·áºááẠááŒá
áºááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá command ááᯠrun áá«á patch
pod container specification ááœááºááŸááá±á¬ áááºáááºážáá»áẠvariable á¡áá
áºáá
áºáá¯ááŒáá·áºá áááºážááá¯á·ááᯠoverwrite áá¯ááºááá·áºá¡á
á¬áž ááŸáááŒá®ážáá¬áž environment variable áá»á¬ážáá²ááá¯á· áááºáááºážáá»áẠvariable ááᯠáá±á«ááºážááá·áºááœá¬ážá
á±áááºá á€áá»ááºážáááºáááºážááᯠá¡áá¯á¶ážááŒá¯á áááºááŸá¬ážáááºá áá±ážáá¬ážáá±á¬ áááºááŸááºáá»ááºááœáẠáá«áá¬áá®áá¬áááºááá¯ážá¡á¬áž null á¡ááŒá
Ạá¡áááºážá¡áá»áẠááá¯ááºážá
á±ááááºá áááºá¡áááºážááœá±áá²á kubectl
á¡ááºááááºáá¯ááºáá¬ááœáẠá¡áá¯á¶ážááŒá¯ááẠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºáá«ááá¬ážá
ááá·áºá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠáááºáá®ážááŒá®áž á
á®áá¶ááá·áºááœá²áá«áá kubectl apply
á¡ááºááááºáá¯ááºáá²á·á¡áá« á¡ááŒá²áááºážáá¯á¶ážáá¬á ááá¯áá±á¬ááºážáá«áááºá kubectl apply
ááá¯á· kubectl
ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠá
á®áá¶ááá·áºááœá²ááá¯ááºááŒá®áž áá±á¬ááºážááá¯áá¬ážáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡ááá®áá±ážááŸááºážá០á¡ááºááºáá
áºáá¯ááá¯á· ááŸááºáááºá
áœá¬ ááŒá±áá¬áá¶ááá¯ááºáááºá á¡á¬ážáá¬áá»áẠá¡ááŒá²áá¯á¶ážáá«á apply
áááºááŸááºáá»ááºáá¯ááºááá¹áááá»á¬ážááŸáá·áº array ááŒááºá
ááºáá»á¬ážááᯠááŸááºážááŸááºážáááºážáááºáž áááºááŸá¬ážááá¯ááºááá·áºá¡áá«ááœáẠáááºážááẠááááºá á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ áááºááŸááºáá»ááºáá
áºáá¯á¡á¬áž ááŒá±áá¬áá¶áá¬ážááŒááºážááŒá
áºáááºá áá«ááᯠáá¯á¶ážááá¯ááºááááºá apply
áá¯á¶ááŸááºáá»á°áá¬ááŒá±á¬áẠáá±á«ááºážá
ááºážááŒááºáž á¡áá¯ááºáááŒá
áºáá±á¬áºáááºáž áá¯ááºááá¹áááá»á¬ážááŸáá·áº array á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºááŸá¬ážáááºá áááºáž edit
О patch
á¡á²áá«ááᯠááŸááºá
á¯ááœááºážáá¶áá«á kubectl apply
áááºážáááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááŒá±áá¬áá¶áááºá¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº Kubernetes API ááŸáááá·áº ááŒá±áá¬áá¶ááŒá®áž ááŒá¯áá¯ááºáá¬ážááá·áº áááºááá·áºááŒá±á¬ááºážáá²ááŸá¯áááá¯á ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá
áºááá·áº ááŒá¯áá¯ááºááẠedit
О patch
áá±á¬ááºáááºááœá² á¡áááá·áºáá»á¬ážááᯠáááŒááºááá¯ááºáá«á apply
, áá«áááŒá
áºáá«ááẠapply
input specification ááœááºááá±á«áºáá«á áááºážááá¯á·ááᯠáááºááŸá¬ážáááºááá¯ááºáá«á apply
(á
á¬áááºážá áá®ááá¯ááá¯áááºá edit
О patch
á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ ááŸááºá
á¯áá»á¬ážááᯠá¡ááºááááºáá¯ááºáá«á apply
áá«áá±ááá·áº áááºááœá±á·ááŸá¬áá±á¬á· ááá¯ááºáá°áž)á
á¡áááá·áºááᯠááá¯á¶ážááẠapply
, á¡ááŒá
áºáá¯á¶ážááá¯ááºáááºá edit
ááŸáá·áº patch
á¡ááŒá±á¬ááºážá¡áá²ááŒá¯áá¯ááºáá¬ááœáẠá¡ááá·áºáá»á±á¬áºáá¯á¶áž command ááá¯ááœá±ážáá»ááºáá«á BOM áá¯ááºááá¹áááá»á¬ážááá¯áá±á«ááºážááá·áºááŒááºážááŸáá·áºááŒá±á¬ááºážáá²áá±á¬á¡áá«á áá»ááºážáááºááŸá¯ááŸá
áºáá¯áá¯á¶ážáááºá¡ááŒááºážáá»ááºážáá°áá®áááºá áááºááŸááºáá»ááºáá¯ááºááá¹áááá»á¬áž ááá¯á·ááá¯áẠarray á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠáá»ááºááá·áºá¡áá« edit
áá
áºááŒáááºáááºáž áá
áºááœáŸááºááŒááºážáá²á·ááá¯á· ááŒá¯áá°áááºá apply
áááºážááŒááºááŒááºážáááŒá¯áá®ááŸáá·áº áááºááá¯á·áááºáá¯á¶ áááºááŸááºáá»ááºááᯠááŒá±áá¬áá¶ááŒááºáž á¡áá«á¡áááºá ááá¯á·ááŒá±á¬áá·áº áááºááẠá¡áááºážá¡ááŒá
áºáá
áºáá¯á០áá¯ááºááá¹áááá»á¬ážááŸáá·áº áááºážáá»ááºážáá¬ážáá±á¬ á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠááŸááºážááŸááºážáááºážáááºáž áááºááŸá¬ážááá¯ááºáááºá áááºááŸááºáá»ááºáá»á¬ážá¡ááœáẠááá¯ááºááá¯ááºááŸá¯áááºááá¯ážááᯠnull á¡ááŒá
ẠááŒááºáá¬ážá
áœá¬ áááºááŸááºááẠááá¯á¡ááºáááºá patch
á¡áááºážá¡ááŒá
áºááŸáááºááŸá¬ážáááºá áá±á«ááºážá
ááºáááºážááœáŸááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº áá»á°áá¬ááŒá±á¬ááºáá±á«ááºážá
ááºááŒááºáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááá·áº array element áá
áºáá¯ááᯠáááºááŸá¬ážááŒááºážááẠááá¯ááá¯ááŸá¯ááºááœá±ážáá«áááºá ááá¯ááá¯áááŸáááá¯ááºáá±á¬ á¡ááŒá¬ážááœá±ážáá»ááºá
áá¬áá»á¬ážá¡ááœáẠá¡á±á¬ááºááœáẠá¡ááŒá¬ážáá±á¬ á¡ááá·áºááŒáŸáá·áºáááºážáááºážáá»á¬ážááᯠááŒáá·áºáá«á
á¡áááºáá±á¬áºááŒáá« ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá·áº á¡áá¬ážáá°ááŒá¯áá°áá±á¬ áááá¯ááºážááá·áºá
á¬ááŒáá·áºááá¯ááºááŸá á¡ááºááááºáááºážáááºážáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠkubectl
áá±á¬ááºážááá¯áá»ááºáá»á¬ážá áááºááŸááºááá·áºáááºá content-type
в application/strategic-merge-patch+json
. áááºááŸááºáá»ááºáá
áºáá¯ááŸá áá¯ááºááá¹áááá»á¬ážááᯠáááºááŸá¬ážááá¯áá«áá á¡áá¬ážáá°áááºážááŒáá·áº áááºážááá¯á·á áááºááá¯ážáá»á¬ážááᯠnull á¡ááŒá
ẠááŒááºáá¬ážá
áœá¬ áááºááŸááºááẠááá¯á¡ááºáá«áááºá kubectl patch
. array á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºááŸá¬ážááẠááá¯á¡ááºáá«áá áááºááẠá¡ááºááááºáááºááŸááºáá»ááºááœáẠáá±á«ááºážá
ááºážááẠááœáŸááºááŒá¬ážáá»ááºáá»á¬áž ááá·áºááœááºážááá·áºááẠááá¯á·ááá¯áẠá¡ááºááááºáá»á¬ážá¡ááœáẠááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬ áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«á
á¡ááºááááºáá»á¬ážá¡ááœáẠá¡ááŒá¬ážáááºážáááºážáá»á¬áž
Kubernetes ááẠá¡ááŒá¬ážáá±á¬ á¡ááºááááºáááºážáááºážááŸá
áºáá¯ááᯠáá¶á·ááá¯ážáááº- kubectl patch --type=merge
. Kubernetes API ááŸáá·áº á¡áá¯ááºáá¯ááºáá±á¬á¡áá«á áááºááẠáá±á¬ááºážááá¯ááŸá¯áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºá PATCH
ááŸáá·áºáááºáááºááŒááºážá content-type
в application/merge-patch+json
.
á¡áááºážá¡ááŒá
áºáá
áºáá¯á áá
áºá
áááºáá
áºááá¯ááºážáááºááŸááºáá»ááºááᯠáá±ážáá±á¬ááºááá·áºá¡á
á¬áž JSON áá¬áá±ážááŸá¯áá»ááºážáááºááŸá¯ááẠá¡áááºážá¡ááŒá
áºá¡ááœáẠáááºááŒá¯áá¯ááºááá¯áá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áááºážá¡áá»ááºážáá
áºáá¯á¡ááŒá
Ạáá±ážáá±á¬ááºáá¬ááœáẠá¡áá¯á¶ážááŒá¯áááºá áááºážááœáẠáááºážáá»ááºážááŸá¯áááŒááºá
ááºáá
áºáá¯á
á®ááẠáááºážááŒá
áºá¡ááœáẠááŒá¯áá¯ááºáá¬ážááá·áºááŒá±á¬ááºážáá²ááŸá¯ááá±á¬áºááŒáá»ááºá¡á¬áž ááá¯ááºá
á¬ážááŒá¯ááá·áº JSON patch áá»ááºážáááºááŸá¯ááŒá
áºáááºá á€áá»ááºážáááºááŸá¯ááẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáá±á¬áºááŒááẠááá¯ááá¯ááŒá±á¬ááºážááœááºááŒááºááœááºááŸáááŒá®áž á¡á
áœááºážáááºáá±á¬áááºážáááºážáá
áºáá¯ááŒá
áºáá±á¬áºáááºážá áá
áºá
áááºáá
áºááá¯ááºáž á¡áááºážá¡ááŒá
áºáááºááŸááºáá»ááºááᯠáá±ážááá¯á·ááŒááºážááẠáá®ážááŒá¬ážá Kubernetes ááá¯ááºáá±á¬ áá±á¬áºáááºááŒáá·áº ááŒá¯áá¯ááºáá¬ážááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá
á¬áááºážááŒá¯á
á¯ááŒááºážááŒáá·áº áá¯ááºáá»á
ááááºááŒáá·áº áá±á¬ááºááœááºáá«áááºá IN kubectl
JSON patch ááᯠá¡áá¯á¶ážááŒá¯á áááºááœá±ážáá»ááºááá¯ááºáááºá kubectl patch --type=json
. Kubernetes API ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á á€áá»ááºážáááºááŸá¯ááẠáá±á¬ááºážááá¯ááŸá¯áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáááºá PATCH
ááŸáá·áºáááºáááºááŒááºážá content-type
в application/json-patch+json
.
áá¯á¶ááŒááºá áááºáá»á áœá¬ á¡á á¬ážááá¯ážá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáá«áááºá
á¡áá»áá¯á·áá±á¬ááá
á¹á
áá»á¬ážááœááºá á¡áááºážá¡ááŒá
áºááá¯áááºááŸá¯ááá·áºá¡áá»áááºááŸáá·áº á¡ááºááááºáá¯ááºááá·áºá¡áá»áááºááŒá¬ážááœáẠá¡áááºážá¡ááŒá
áºáá
áºáá¯ááá¯á· á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŒá¯áá¯ááºáá¬ážááŒááºážáááŸáááŒá±á¬ááºáž áá±áá»á¬á
á±áááºááá¯á¡ááºáá«áááºá áá
áºáááºážááá¯ááá±á¬áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá¡á¬ážáá¯á¶áž ááŒá
áºáááºáá¬ááẠáá±áá»á¬á
á±ááá·áºáááºá á¡áá¯ááŒá°áá¯á¶áž. á€ááá
á¹á
ááœááºá á¡áááºážá¡ááŒá
áºáá»á¬ážááá¯ááœááºážáá¶áááºáááºá¡áá¯á¶ážááŒá¯ááá·áºáááºá replace
. á¥ááá¬á¡á¬ážááŒáá·áºá ááá·áºááœáẠáááºážááŒá
áºáá»á¬ážá
áœá¬ááŒáá·áº á¡ááºááááºáá¯ááºáá¬ážáá±á¬ áá±á¬ááºáá¬áá
áºáá¯áá«ááŸááá±á¬ ConfigMap áá
áºáá¯ááŸááá«áá áááºážááŒá
áºááŸá
áºáá¯ááẠáá±á¬ááºáá¬ááᯠáá
áºáá»áááºáááºážááœáẠááœááºážáá¶ááŒááºážáááŸáááá·áºá¡ááœáẠá¡ááºááááºááᯠáá¯á¶ážááŸá¯á¶ážááœá¬ážá
á±ááẠáá±áá»á¬á
á±ááá·áºáááºá ááá¯ááºááŒáááºá áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒá
áºá¡áá»ááºáá»á¬ážá á¡ááá¯ááºážááᯠá
áááºáá°ážááŒáá·áºáá«á patch
:
- A ááŸáá·áº B ááẠAPI á០á¡áááºážá¡ááŒá áºá áááºááŸáá¡ááŒá±á¡áá±ááᯠááá°áááºá
- áá áºáá¯áá»ááºážá á®á áá±á¬ááºáá¬áá áºáá¯á á®ááᯠááá¯ážááŒá®áž "ááœááºážáá¶áá¬ážáá±á¬" ááŸááºá á¯ááá¯á· "A" ááá¯á·ááá¯áẠ"B" á¡áá®ážáá®ážááá·áºááŒááºážááŒáá·áº á ááºááœááºážááŸá áááºááŸááºáá»ááºááᯠá¡ááºááááºáá¯ááºáááº
- áááºážááẠá¡áááºážá¡ááŒá áºááᯠá¡áááºážááẠááá¯ááŒááºá¡á±á¬áẠupdate áá¯ááºáááºá
- B ááẠá¡áááºážá¡ááŒá áºááᯠá¡ááºááááºáá¯ááºáááºá
ááááºá¡áá±áá²á· update A áá»á±á¬ááºááœá¬ážáá«áááºá áá±á¬ááºáá¯á¶ážáááºáááºááŸá¯ patch
á¡ááá¯ááºááááºá áá±á¬ááºáá¬ááẠááŸá
áºáá¯á¡á
á¬áž áá
áºáá¯ááŒáá·áº ááá¯ážáá¬ááŒá®áž "updated-by" ááŸááºá
á¯ááááºááá¯ážááẠ"B" ááŒáá·áºá¡áá¯á¶ážáááºáᬠ"A" ááá«áááºáá«á áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á á¡ááºááááºáá»á¬áž ááŒá®ážáá±á¬á¡áá«ááœáẠáááºááá¯á·ááŒá
áºáááºááᯠá¡áááºáá±á¬áºááŒáá«ááŸáá·áº ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á· replace
:
- A ááŸáá·áº B ááẠAPI á០á¡áááºážá¡ááŒá áºá áááºááŸáá¡ááŒá±á¡áá±ááᯠááá°áááºá
- áá áºáá¯áá»ááºážá á®á áá±á¬ááºáá¬áá áºáá¯á á®ááᯠááá¯ážááŒá®áž "ááœááºážáá¶áá¬ážáá±á¬" ááŸááºá á¯ááá¯á· "A" ááá¯á·ááá¯áẠ"B" á¡áá®ážáá®ážááá·áºááŒááºážááŒáá·áº á ááºááœááºážááŸá áááºááŸááºáá»ááºááᯠá¡ááºááááºáá¯ááºáááº
- áááºážááẠá¡áááºážá¡ááŒá áºááᯠá¡áááºážááẠááá¯ááŒááºá¡á±á¬áẠupdate áá¯ááºáááºá
- B ááẠá¡áááºážá¡ááŒá
áºááᯠá¡ááºááááºáá¯ááºááẠááŒáá¯ážá
á¬ážáá±á¬áºáááºáž á¡áááºážá¡ááŒá
áºáá¬ážááŸááºážááẠáááºááŸááºáá»ááºááœáẠááŸááá±áá±á¬ááŒá±á¬áá·áº á¡ááºááááºááᯠAPI á០áááºáá»áá²á·áááºá
replace
á¡áááºážá¡ááŒá áºááá¬ážááŸááºážááᯠA áá¡á á¬ážááá¯ážáá¯ááºáá±á¬ááºáá»ááºááŒáá·áº ááá¯ážááŒáŸáá·áºáá¬ážáá±á¬ááŒá±á¬áá·áº Kubernetes ááŸá á¡áááºážá¡ááŒá áºá áááºááŸááá¬ážááŸááºážááŸáá·áº áááá¯ááºáá®áá«á
á¡áááºáá«á¡ááŒá±á¡áá±áá»áá¯ážááœáẠB ááẠá¡áááºážá¡ááŒá
áºááᯠááŒááºáááºááá°áááºá ááŒááºáááºá¡áá
áºááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒá®áž áááºáá¶ááŒáá¯ážá
á¬ážááááºááŒá
áºáááºá replace
. áááºážááẠáá±á¬ááºáá¬á¡á¬áž ááŸá
áºáá¯ááŒáá·áº ááá¯ážá
á±áááºááŒá
áºááŒá®áž á¡áá¯á¶ážááœáẠ"ááœááºážáá¶ááŒááºáááºáá¬ážáá±á¬" ááŸááºá
á¯ááœáẠ"AB" áá«áááºáááºááŒá
áºáááºá
á¡áááºáá±á¬áºááŒáá« á¥ááá¬á á¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·á¡áá«ááŸá¬ ááá¯ááá¯áá¬áá«á replace
ááá¶áá¬á áá
áºáá¯áá¯á¶ážááᯠáá¯á¶ážá á¡á
á¬ážááá¯ážááœá¬ážááŒá®á Specification ááœá±á¡ááœáẠáá¯á¶ážáá«áááºá replace
á áá
áºá
áááºáá
áºááá¯ááºážááŒá
áºááááºá ááá¯á·ááá¯áẠá¡ááá¯ááºážáá»á¬ážáá²á·ááá¯á· áááŒá
áºááá«á apply
á áá«áá±ááá·áº ááŒáá·áºá
áœááºááŸá¯ á¡áá«á¡ááẠááŒá®ážááŒáá·áºá
á¯á¶áá«áááºá resourceVersion
áááºááŸááºáá»áẠmetadata áá²ááá¯á·á áááœáá·áºááá±ážááẠresourceVersion
ááá¯á·ááá¯áẠáááºáá±ážáá±á¬áá¬ážááŸááºážááẠáááºááŸáááá¯ááºáá«á á¡á
á¬ážááá¯ážááŸá¯ááᯠáááºáá»áá«áááºá áá«ááŒá±á¬áá·áº á¡áá±á¬ááºážáá¯á¶ážáááºážáááºážááᯠá¡áá¯á¶ážááŒá¯áá«á replace
- á¡áááºážá¡ááŒá
áºááá¯áááºáá«á á¡ááºááááºáá¯ááºááŒá®ážáá»ááºáá»ááºážá¡á
á¬ážááá¯ážáá«á á¡áá¯á¶ážááŒá¯ááŒááºážá kubectl
á áááºážááẠá€áá²á·ááá¯á·áá±á¬áá¯á¶áá±á«áºááá¯ááºáááº-
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
á¡á±á¬ááºáá±á¬áºááŒáá« command ááŸá
áºáá¯ááᯠáááºááá¯ááºáá¯ááºáá±á¬ááºááŒá®áž á¡á±á¬ááºááŒááºá
áœá¬ áá¯ááºáá±á¬ááºáááºááŒá
áºáá±á¬ááŒá±á¬áá·áºá deployment.yaml
áá
á¹á
ááºážááá«áááºáá«á .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
á€áááºááŸá¬ á¡áááºááœááºááŒá±á¬áá²á·ááá·áºá¡ááá¯ááºáž ááá·áºáá»ááºáá±áá¯á¶ááá±áááºá ááá¯ááá¯áááºááŸá¬á "áááºáá±á¬ááºáž resourceVersion
áááºááŸááºáá»áẠáááºáá¬áá±áá¬áá²ááá¯á·á" ááá¯ááá¯á·ááŒá±á¬ááŒááºážááẠááŸá¬ážááá¬ážá ááá¯ááºáá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á¡áááºá ááá¯ááºáá«á kubectl
áááºááááºááŸááºáá¬ážáá±á¬ ááááá±ážáá»ááºáá»á¬áž resourceVersion
á á¡áááºážá¡ááŒá
áºá០áááºážááá¯áááºááŒá®áž áááºáááºááŸááºáá¬ážáá±á¬ áááºááŸááºáá»ááºááá¯á· áá±á«ááºážááá·áºáᬠáááºážááᯠáá¯ááºáá±á¬ááºááŸáᬠáá¯ááºáá±á¬ááºáááºááŒá
áºáááºá replace
. á¡áá¯ááŒá°áá¬ááºááᯠááŸá®ááá¯á¡á¬ážáá¬ážáá»áŸáẠáááºážááẠá¡áá¹ááá¬ááºááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº ááŸá±á¬áºááá¬ááẠáá±ážáááºááœáẠáá¯á¶ážáá¡áá¯ááºáá¯ááºáááºá kubectl
API ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬ client libraries ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«áááºážááá¯áááºááŸá®ááá¯ááá±ááá·áºáá«á á€ááá
á¹á
ááœáẠáááºááẠáááºááŸá áááºážááŒá
áºáááºááŸááºáá»ááºááᯠáááºáááºá áááºážááᯠá¡ááºááááºáá¯ááºááŒá®áž áá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá PUT
áá±á¬ááºážááá¯áá»ááºááá¯á
áá¬áá±ážááŸá¯ ááá¯ááºááá¯ááºáá°áž - á¡á á¬ážááá¯ážáá¯ááºáááºá
áá
áºáá«áá
áºáá¶ááœáẠáááºááẠAPI á០áááá¯ááºááœááºááá¯ááºáá±á¬ á¡ááŒá±á¬ááºážá¡áá²á¡áá»áá¯á· ááŒá¯áá¯ááºááẠááá¯á¡ááºáááºá á€ááá
á¹á
áá»á¬ážááœááºá áááºááẠáááºážá¡á¬áž áá»ááºáá
áºááŒá®áž ááŒááºáááºáááºáá®ážááŒááºážááŒáá·áº á¡áááºážá¡ááŒá
áºááᯠá¡á
á¬ážááá¯ážááẠá¡áááºážá¡ááŒáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá áá«ááá¯áá¯á¶ážááŒá®áž ááŒá®ážááœá¬ážáááºá kubectl replace --force
. ááœáŸááºááŒá¬ážáá»ááºááᯠáá¯ááºáá±á¬ááºááŒááºážááẠá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠáá»ááºáá»ááºážáááºááŸá¬ážááŒá®áž áááºážááá¯á·ááᯠáá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ áááºááŸááºáá»ááºáá»á¬ážá០ááŒááºáááºáááºáá®ážáááºá API ááœáẠ"force replace" handler áááŸááá«á API ááŸáááá·áº áááºážááá¯áá¯ááºáá±á¬ááºáááºá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºááŸá
áºáá¯áá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá ááááŠážá
áœá¬ áááºááẠáááºážá¡ááœáẠáááºááŸááºáá±ážááŒááºážááŒáá·áº á¡áááºážá¡ááŒá
áºááᯠáá»ááºáá
áºááẠááá¯á¡ááºáááºá gracePeriodSeconds
áá¯á (0) ááŸáá·áº propagationPolicy
"áá±á¬ááºáá¶" ááœáẠááŒá®ážáá±á¬áẠá€á¡áááºážá¡ááŒá
áºááᯠááá¯áá»ááºáá±á¬áááºááŸááºáá»ááºáá»á¬ážááŒáá·áº ááŒááºáááºáááºáá®ážáá«á
ááááá±ážáá»ááº- á€áá»ááºážáááºááŸá¯ááẠá¡áá¹ááá¬ááºááŸáááá¯ááºááŒá®áž áááºááŸááºááá¬ážáá±á¬ á¡ááŒá±á¡áá±ááá¯á· áŠážáááºááœá¬ážááá¯ááºáááºá
áá¬áá¬áááºááœáẠáá»áŸá±á¬ááºáá¬ážáá«á
á¡áááºááœááºáá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºáž Kubernetes developer áá»á¬ážááẠlogic ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá¯ááºáá±á¬ááºáá±áá«áááºá apply
á០kubectl
Kubernetes API ááœáẠáá¯áá¹áááá±á apply
Kubernetes 1.18 ááŸáááá·áº áááŸáááá¯ááºáá«áááºá kubectl apply --server-side
ááá¯á·ááá¯áẠáááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á API ááŸáááá·áº PATCH
Ñ content-type
application/apply-patch+YAML
.
ááŸááºáá»ááº- JSON ááẠYAML áááºáž á¡áá»á¯á¶ážáááºáááºá ááá¯á·ááŒá±á¬áá·áº áááºááẠáááºááŸááºáá»ááºááᯠJSON á¡ááŒá Ạáá±ážááá¯á·ááá¯ááºáááºá
content-type
ááœá á»áááá»á·ááá»application/apply-patch+yaml
.
á¡á²áá®á· áá¯áá¹ááááœá±á¡ááŒáẠkubectl
API ááŸáááá·áº áá°ááá¯ááºážáááá¯ááºáááºá apply
áá¬áá¬áááºááœááºá áááºááŸááºáá»ááºáá»á¬ážááŸá á¡ááœááºáá»á¬ážá¡ááœáẠáááºáá°áá¬áááºááŸááááºááᯠááŒá±áá¬áá¶ááŒá®áž áááºážá áááááá¹ááááºážáá±á¬ áááºážááŒááºááŸá¯á¡ááœáẠáá¯á¶ááŒá¯á¶á
áœá¬áááºáá±á¬ááºááœáá·áºá¡áá»á¬ážá¡ááŒá¬ážááᯠááœáá·áºááŒá¯áá±ážáá«áááºá áá
áºáááºážááá¯áááẠapply
áá¬áá¬áááºááœáẠááá¯ááá¯áá»ááºááŒáá·áºáá¬áááºááŒá
áºááŒá®ážá ááá°áá®áá±á¬ clients áá»á¬ážá¡ááœáẠuniversal secure resource management interface áá±á«áºáá¬áá«áááºá
ááááºáá»á¬ážááá¯
á¡á á¯á¡ááœá²á·áá»á¬ážááŸá á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡ááºááááºáá¯ááºááẠááá°áá®áá±á¬áááºážáááºážáá»á¬ážá á¡ááá¯áá»á¯á¶ážáá¯á¶ážáááºáá»ááºááẠááá·áºá¡ááœáẠá¡áá±á¬ááºá¡áá°ááŒá áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áááºážááẠá¡á á¬ážááá¯ážááŒááºážááᯠá¡áá¯á¶ážáá»áá¯á¶áá¬ááá á¡áá¯á¶ážáá»ááŸá¯á áááºážááŒááºááŸá¯á áá¬áá±ážááŸá¯ ááá¯á·ááá¯áẠá¡á á¬ážááá¯ážááŸá¯ááá¯á·ááᯠá¡áá¯á¶ážááŒá¯á áááºážááŒá áºáá áºáá¯ááᯠá¡ááºááááºáá¯ááºááẠááŒá áºááá¯ááºááŒá±á¬ááºáž ááááŸááááŒááºážááŸá¬ áá±á¬ááºážáá«áááºá ááŒá®ážáá±á¬ááºááŸáááá»áŸááá¯á·, áá°á¡á, áá áºáá¯áá»ááºážá á®ááá¯áá»ááºážáááºááŸá¯áááºážáááá¯ááºááá¯ááºá¡áá¯á¶ážáá»á§áááá¬ááŸááááºá á¡ááºáááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá¡ááœááºá á¡á á¬ážááá¯ážááŒááºážááẠááá¯áá±á¬ááºážáááºá ááá¯á·ááá¯ááºáá«á áááºááẠá¡áá¯á¶ážáá»ááŸá¯ááŸáá áºááá·áº áá»á°áá¬ááŒá±á¬ááº-áá±á«ááºážá ááºážááŸá¯ patch ááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºá á¡áááºážáá¯á¶ážáá±á¬á· "kubernetes Apply vs replace" ááá¯ááŸá¬áá²á·á¡áá« Google ááá¯á·ááá¯áẠStackOerflow ááᯠááá¯á¶ááá¯ááºáá°ážááá¯á· áááºážáá¬ážáááºááá¯á· áá«áá»áŸá±á¬áºááá·áºáá«áááºá á¡áááºážáá¯á¶áž á€áá±á¬ááºážáá«ážááẠáááºááŸáá¡ááŒá±ááᯠá¡á á¬ážááá¯ážááá·áºá¡áá»áááºá¡ááááŒá áºáááºá
source: www.habr.com