Kubernetes ili ndi njira zingapo zosinthira zothandizira: gwiritsani ntchito, sinthani, patch ndikusintha. Pali chisokonezo pa zomwe aliyense amachita komanso nthawi yoti azigwiritsa ntchito. Tiyeni tiganizire.
ngati kubectl patch
, zomwe siziphatikiza kufananiza apply
ΠΈ patch
. Nkhaniyi iwona zosankha zosiyanasiyana, komanso kugwiritsa ntchito moyenera chilichonse.
Panthawi ya moyo wa gwero la Kubernetes (ntchito, kutumiza, kulowetsa, ndi zina zotero), nthawi zina muyenera kusintha, kuwonjezera kapena kuchotsa zina mwazinthu izi. Mwachitsanzo, onjezani cholemba, onjezani kapena kuchepetsa kuchuluka kwa zofananira.
Kubernetes CLI
Ngati mukugwira ntchito kale ndi magulu a Kubernetes kudzera pa CLI, mumawadziwa kale apply
ΠΈ edit
. Gulu apply
amawerenga zofunikira kuchokera pafayilo ndikupanga "upsert" ku gulu la Kubernetes, i.e. imapanga gwero ngati palibe ndikusintha ngati ilipo. Gulu edit
amawerenga gwero kudzera pa API, kenako amalemba zofunikira ku fayilo yapafupi, yomwe imatsegulidwa mu mkonzi wa malemba. Mukamaliza kusintha ndikusunga fayilo, kubectl
idzatumiza zosintha zomwe zasinthidwa kudzera mu API, zomwe zidzagwiritse ntchito bwino kusintha kumeneku kuzinthu.
Sikuti aliyense amadziwa malamulo patch
ΠΈ replace
. Gulu patch
amakulolani kuti musinthe gawo lachidziwitso, ndikungopereka gawo losinthidwa pamzere wolamula. Gulu replace
amagwira ntchito mofanana ndi edit
, koma zonse ziyenera kuchitidwa pamanja: muyenera kutsitsa mtundu waposachedwa wamafotokozedwe azinthu, mwachitsanzo, kugwiritsa ntchito kubectl get -o yaml
, sinthani, ndiye gwiritsani ntchito replace
kukonzanso gwero molingana ndi zomwe zasinthidwa. Gulu replace
sichingagwire ntchito ngati kusintha kulikonse kunachitika pakati pa kuwerenga ndikusintha gwero.
Kubernetes API
Mwinamwake mumadziwa njirazo CoreV1().Pods().Update()
, replaceNamespacedService
kapena patch_namespaced_deployment
, ngati mumagwira ntchito ndi magulu kudzera PUT
ΠΈ PATCH
... Momwemo update
ΠΈ replace
gwiritsani PUT
ndi patch
, ngakhale zitakhala zazing'ono bwanji, zimagwiritsa ntchito PATCH
.
Ndikoyenera kuzindikira zimenezo kubectl
imagwiranso ntchito ndi magulu kudzera pa API. Mwanjira ina, kubectl
ndi wrapper pamwamba pa laibulale kasitomala kwa Go chinenero, amene makamaka amapereka mphamvu kupereka subcommands mu mawonekedwe yaying'ono ndi owerengeka kuwonjezera mphamvu muyezo API. Mwachitsanzo, monga momwe mwaonera kale, njira apply
sanatchulidwe pamwamba pa ndime yapitayi. Panopa (Meyi 2020, pafupifupi. womasulira) logic zonse kubectl apply
,ndi. kupanga zinthu zomwe sizilipo ndikusintha zomwe zilipo, zimagwira ntchito kumbali ya code kubectl
. Khama likuchitika apply
ku mbali ya API, koma ikadali mu beta. Ndilemba mwatsatanetsatane pansipa.
Chigamba mwachisawawa
Zogwiritsidwa ntchito bwino patch
, ngati mukufuna kusintha gwero. Umu ndi momwe malaibulale onse a kasitomala amagwirira ntchito pamwamba pa Kubernetes API ndi kubectl
(zosadabwitsa, chifukwa ndi chomangira laibulale ya kasitomala, pafupifupi. womasulira).
Gwirani ntchito mwanzeru
Magulu onse kubectl
apply
, edit
ΠΈ patch
gwiritsani ntchito njirayo PATCH
mu HTTP zopempha kuti zisinthe zomwe zilipo kale. Ngati mupenda kukhazikitsidwa kwa malamulo mwatsatanetsatane, ndiye kuti onse amagwiritsa ntchito njirayo patch
angagwiritse ntchito njira zina (zambiri pa izi pansipa). Strategic-merge patching njira imayesa "kukonza" pophatikiza zomwe zaperekedwa ndi zomwe zilipo kale. Mwachindunji, amayesa kuphatikiza zinthu zonse ndi magulu, zomwe zikutanthauza kuti kusintha kumakhala kowonjezera. Mwachitsanzo, kuthamanga lamulo patch
ndi kusintha kwatsopano kwa chilengedwe mu ndondomeko ya chidebe cha pod, kumapangitsa kuti chilengedwe chiwonjezedwe kuzinthu zomwe zilipo kale kusiyana ndi kuzilemba. Kuti muchotse kugwiritsa ntchito njirayi, muyenera kukakamiza mtengo wa parameter kuti usiye zomwe zaperekedwa. Ndi ati mwa magulu kubectl
Kodi ndibwino kuti mugwiritse ntchito pokonzanso?
Ngati mupanga ndikuwongolera zinthu zanu pogwiritsa ntchito kubectl apply
, pokonzanso ndi bwino kugwiritsa ntchito nthawi zonse kubectl apply
kuti kubectl
ikhoza kuyang'anira kasinthidwe ndikutsata bwino zosintha zomwe zapemphedwa kuchokera ku pulogalamu kupita ku pulogalamu. Ubwino ntchito nthawi zonse apply
ndikuti imayang'anira zomwe zidagwiritsidwa ntchito m'mbuyomu, ndikupangitsa kuti idziwe nthawi yomwe mafotokozedwe ndi zinthu zingapo zimachotsedwa bwino. Izi zimakuthandizani kuti mugwiritse ntchito apply
kuchotsa katundu ndi zinthu zingapo, pomwe kuphatikizika kwabwino sikungagwire ntchito. Magulu edit
ΠΈ patch
osasintha zolemba zimenezo kubectl apply
amagwiritsa ntchito kutsata zosintha zake, kotero zosintha zilizonse zomwe zimatsatiridwa ndikupangidwa kudzera mu Kubernetes API, koma zopangidwa kudzera mwa malamulo. edit
ΠΈ patch
, zosaoneka ndi malamulo otsatira apply
, ndiko apply
sichizichotsa ngakhale sizikuwoneka muzolowera apply
(Zolemba zimanena kuti edit
ΠΈ patch
sinthani zolemba zomwe zagwiritsidwa ntchito apply
, koma muzochita - ayi).
Ngati simugwiritsa ntchito lamulo apply
, angagwiritsidwe ntchito ngati edit
, ndi patch
, kusankha lamulo lomwe likugwirizana bwino ndi kusintha komwe kukuchitika. Powonjezera ndikusintha katundu wa BOM, njira zonsezi zimakhala zofanana. Mukachotsa mawonekedwe kapena zinthu zingapo edit
imakhala ngati kuyambika kamodzi apply
, kuphatikizirapo kuyang'anira momwe mafotokozedwewo analili asanasinthidwe, kotero mutha kuchotsa momveka bwino katundu ndi masanjidwe azinthu kuchokera kuzinthu. Muyenera kuyika mtengo wamtengowo kuti muchotse zomwe zafotokozedwazo patch
kuzichotsa ku gwero. Kuchotsa zinthu zingapo pogwiritsa ntchito strategic-merge patching ndizovuta kwambiri chifukwa pamafunika kugwiritsa ntchito malangizo ophatikiza. Onani njira zina zokwezera pansipa kuti mupeze njira zina zowonjezera.
Kukhazikitsa njira zosinthira mu library yamakasitomala zomwe zimakhala zofanana ndi zomwe zili pamwambapa kubectl
, ziyenera kukhazikitsidwa pazopempha content-type
Π² application/strategic-merge-patch+json
. Ngati mukufuna kuchotsa katundu mwachindunji, muyenera kuyika zikhalidwe zawo kuti zithenso chimodzimodzi. kubectl patch
. Ngati mukufuna kuchotsa zinthu zingapo, muyenera kuphatikiza malangizo ophatikiza pazosintha kapena kugwiritsa ntchito njira ina yosinthira.
Njira zina zowonjezera zowonjezera
Kubernetes amathandizira njira zina ziwiri zosinthira: kubectl patch --type=merge
. Mukamagwira ntchito ndi Kubernetes API, muyenera kugwiritsa ntchito njira yofunsira PATCH
ndi kukhazikitsa content-type
Π² application/merge-patch+json
.
Njira ya JSON patch, m'malo mopereka chidziwitso chapadera cha gwero, imagwiritsa ntchito kupereka zosintha zomwe mukufuna kupanga ku gwero ngati gulu, momwe gawo lililonse la gululo limayimira kufotokozera kwakusintha komwe kukuchitika. Njirayi ndi njira yowonjezereka komanso yamphamvu yowonetsera kusintha komwe kukuchitika, koma pamtengo wolembera zosintha zomwe zikupangidwa mwanjira yosiyana, osati Kubernetes, m'malo motumiza tsatanetsatane wazinthu. MU kubectl
mutha kusankha chigamba cha JSON pogwiritsa ntchito kubectl patch --type=json
. Mukamagwiritsa ntchito Kubernetes API, njirayi imagwira ntchito pogwiritsa ntchito njira yopempha PATCH
ndi kukhazikitsa content-type
Π² application/json-patch+json
.
Timafunikira chidaliro - gwiritsani ntchito m'malo
Nthawi zina, muyenera kutsimikiza kuti palibe kusintha komwe kumapangidwa kuzinthu pakati pa nthawi yomwe gwero likuwerengedwa komanso pamene likusinthidwa. M'mawu ena, muyenera kuonetsetsa kuti kusintha konse kudzakhala atomiki. Pankhaniyi, muyenera kugwiritsa ntchito zowonjezera zowonjezera replace
. Mwachitsanzo, ngati muli ndi ConfigMap yokhala ndi kauntala yomwe imasinthidwa ndi magwero angapo, muyenera kutsimikiza kuti magwero awiri sasintha kauntala nthawi imodzi, zomwe zimapangitsa kuti zosinthazo ziwonongeke. Kuti muwonetse, gwiritsani ntchito njira yotsatizana patch
:
- A ndi B amapeza momwe zinthu ziliri pano kuchokera ku API
- Iliyonse yakomweko imasinthiratu zomwe zafotokozedwazo powonjezera kauntala ndi imodzi ndikuwonjezera "A" kapena "B" motsatana ndi "zosinthidwa"
- Ndipo imasintha gwero mwachangu
- B amawonjezera gwero
Zotsatira zake, zosintha A zatayika. Opaleshoni yomaliza patch
ikapambana, kauntala imakulitsidwa ndi imodzi m'malo mwa ziwiri, ndipo mtengo wa "zosinthidwa" umatha ndi "B" ndipo mulibe "A". Tiyeni tifanizire zomwe zili pamwambapa ndi zomwe zimachitika pomwe zosintha zachitika pogwiritsa ntchito njirayo replace
:
- A ndi B amapeza momwe zinthu ziliri pano kuchokera ku API
- Iliyonse yakomweko imasinthiratu zomwe zafotokozedwazo powonjezera kauntala ndi imodzi ndikuwonjezera "A" kapena "B" motsatana ndi "zosinthidwa"
- Ndipo imasintha gwero mwachangu
- B amayesa kukonzanso gwero, koma zosinthazo zimakanidwa ndi API chifukwa mtundu wazinthu uli mwatsatanetsatane.
replace
sizikufanana ndi mtundu waposachedwa wa Kubernetes chifukwa mtundu wazinthuzo udawonjezedwa ndi ntchito ya A.
Pankhani yomwe ili pamwambapa, B iyenera kutenganso gwero, sinthani dziko latsopano ndikuyesanso replace
. Izi zipangitsa kuti kauntala ionjezeke ndi ziwiri komanso cholemba "chosinthidwa ndi" kuphatikiza "AB" kumapeto.
Chitsanzo cha pamwambachi chikutanthauza kuti pamene akugwira replace
gwero lonse kwathunthu m'malo. Specification ntchito replace
, zisakhale tsankho, kapena mβmbali monga mwa apply
, koma zonse, kuphatikizapo kuwonjezera resourceVersion
mu metadata yeniyeni. Ngati simunatsegule resourceVersion
kapena mtundu womwe mwaperekayo si waposachedwa, cholowacho chidzakanidwa. Choncho, njira yabwino yogwiritsira ntchito replace
- werengani gwero, sinthani ndikusintha nthawi yomweyo. Kugwiritsa kubectl
, zitha kuwoneka motere:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Ndizofunikira kudziwa kuti malamulo awiri otsatirawa, ochitidwa motsatizana, achita bwino, popeza deployment.yaml
ilibe katundu .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Izi zingawoneke kuti zikutsutsana ndi zomwe zanenedwa pamwambapa, i.e. "kuwonjezera resourceVersion
mu metadata yeniyeni." Kodi ndi kulakwa kunena zimenezo? Ayi, sichoncho, chifukwa ngati kubectl
zidziwitso zomwe simunatchule resourceVersion
, idzawerenga kuchokera pagwero ndikuwonjezera pazomwe mudatchula, kenako ndikuzipanga replace
. Chifukwa izi ndizowopsa ngati mudalira atomiki, matsenga amagwira ntchito kumbali kubectl
, simuyenera kudalira mukamagwiritsa ntchito malaibulale a kasitomala omwe amagwira ntchito ndi API. Pachifukwa ichi muyenera kuwerenga zomwe zilipo, sinthani ndikumaliza PUT
pempho.
Simungathe kuchita chigamba - timasintha
Nthawi zina mumayenera kupanga zosintha zomwe sizingatheke ndi API. Zikatero, mukhoza kukakamiza m'malo mwa gwero pochotsa ndi kulenganso izo. Izi zimachitidwa pogwiritsa ntchito kubectl replace --force
. Kuthamangitsa lamulo nthawi yomweyo kumachotsa zinthuzo ndikuzipanganso kuchokera pazomwe zaperekedwa. Palibe "m'malo mwa mphamvu" mu API, ndipo kuti muchite izi kudzera mu API, muyenera kuchita ntchito ziwiri. Choyamba muyenera kufufuta gwero mwa kukhazikitsa kwa izo gracePeriodSeconds
mpaka zero (0) ndi propagationPolicy
mu "Background" ndiyeno panganinso chida ichi ndi zomwe mukufuna.
Chenjezo: Njira iyi ndi yowopsa ndipo imatha kupangitsa kuti munthu asadziwike.
Ikani pambali ya seva
Monga tafotokozera pamwambapa, opanga Kubernetes akugwira ntchito yokwaniritsa malingaliro apply
kuchokera kubectl
mu Kubernetes API. Zomveka apply
ikupezeka ku Kubernetes 1.18 kudzera kubectl apply --server-side
kapena kudzera pa API pogwiritsa ntchito njira PATCH
Ρ content-type
application/apply-patch+YAML
.
Zindikirani: JSON ndi YAML yovomerezeka, kotero mutha kutumiza zomwe mukufuna monga JSON ngakhale
content-type
kudzakhalaapplication/apply-patch+yaml
.
Kupatula logic imeneyo kubectl
amapezeka kwa aliyense kudzera pa API, apply
kumbali ya seva, imayang'anira yemwe ali ndi udindo pazambiri zomwe zafotokozedwazo, motero zimalola mwayi wopezeka kangapo pakusintha kwake kopanda mikangano. M'mawu ena, ngati apply
Pa mbali ya seva idzafalikira kwambiri, mawonekedwe otetezedwa a chitetezo cha chilengedwe chonse adzawonekera kwa makasitomala osiyanasiyana, mwachitsanzo, kubectl, Pulumi kapena Terraform, GitOps, komanso zolemba zodzilemba zokha pogwiritsa ntchito malaibulale a kasitomala.
Zotsatira
Ndikukhulupirira mwachidule ichi mwachidule cha njira zosiyanasiyana zosinthira zinthu m'magulu chinali chothandiza kwa inu. Ndikwabwino kudziwa kuti sikungogwiritsa ntchito kutsutsana ndi kusintha; ndizotheka kusinthira gwero pogwiritsa ntchito kugwiritsa ntchito, kusintha, chigamba, kapena kusintha. Kupatula apo, njira iliyonse ili ndi gawo lake la ntchito. Pakusintha kwa ma atomiki, m'malo ndibwino; apo ayi, muyenera kugwiritsa ntchito strategic-merge patch pogwiritsa ntchito application. Osachepera, ndikuyembekeza kuti mumvetsetse kuti simungakhulupirire Google kapena StackOerflow mukamasaka "kubernetes apply vs replace". Osachepera mpaka nkhaniyi ilowe m'malo mwa yankho lapano.
Source: www.habr.com