Kubernetes ine akati wandei sarudzo dzekuvandudza zviwanikwa: shandisa, gadzirisa, chigamba uye tsiva. Pane kuvhiringika pamusoro pezvinoitwa neimwe neimwe uye nguva yekuzvishandisa. Ngatizvionei.
kana kubectl patch
, iyo isingabatanidzi kuenzanisa apply
ΠΈ patch
. Ichi chinyorwa chichatarisa pane zvakasiyana-siyana zvingasarudzwa, pamwe nekushandiswa kwakakodzera kweumwe neumwe.
Munguva yehupenyu hweKubernetes sosi (sevhisi, kuendesa, ingress, nezvimwewo), dzimwe nguva unofanirwa kuchinja, kuwedzera kana kubvisa zvimwe zvivakwa zvechishandiso ichi. Semuenzaniso, wedzera chinyorwa, wedzera kana kuderedza nhamba yezvinyorwa.
Kubernetes CLI
Kana iwe uchitoshanda neKubernetes masumbu kuburikidza neCLI, iwe watojaira apply
ΠΈ edit
. Team apply
inoverenga iyo sisitimu yakatarwa kubva kufaira uye inoita "kusimudza" kune Kubernetes cluster, i.e. inogadzira iyo sosi kana isipo uye inovandudza kana iripo. Team edit
inoverenga sosi kuburikidza neiyo API, yobva yanyora iyo sisitimu yakatarwa kune yemunharaunda faira, iyo inozovhurwa mune zvinyorwa zvinyorwa. Mushure mekugadzirisa uye kuchengetedza faira, kubectl
ichatumira shanduko dzakaitwa kumashure kuburikidza neAPI, iyo inonyatso shandisa shanduko idzi kune sosi.
Havasi vese vanoziva mirairo patch
ΠΈ replace
. Team patch
inokubvumira kuti uchinje chikamu chezvinyorwa zvekushandisa, zvichipa chete chikamu chakashandurwa pamutsara wemirairo. Team replace
inoshanda zvakafanana ne edit
, asi zvese zvinoda kuitwa nemaoko: iwe unofanirwa kudhawunirodha yazvino vhezheni yezvinyorwa zvekushandisa, semuenzaniso, kushandisa. kubectl get -o yaml
, gadzirisa, wozoshandisa replace
kugadzirisa chitubu zvinoenderana neyakashandurwa yakatarwa. Team replace
haishande kana paine shanduko yakaitika pakati pekuverenga nekutsiva iyo sosi.
Purogiramu inonzi Kubernetes
Iwe unogona kunge uchiziva nzira dzacho CoreV1().Pods().Update()
, replaceNamespacedService
kana patch_namespaced_deployment
, kana ukashanda nemasumbu kuburikidza PUT
ΠΈ PATCH
... Mariri update
ΠΈ replace
shandisa PUT
uye patch
, pasinei nokuti zvingava zviduku sei, inoshandisa PATCH
.
Izvo zvinofanirwa kucherechedzwa kuti kubectl
inoshandawo nemasumbu kuburikidza neAPI. Nemamwe mashoko, kubectl
chiputiriso pamusoro peraibhurari yemutengi yemutauro weGo, iyo inopa zvakanyanya kugona kupa subcommands mune yakawedzera compact uye inoverengeka fomu mukuwedzera kune yakajairwa API kugona. Somuenzaniso, sezvaungave watoona, nzira yacho apply
haina kutaurwa pamusoro apa mundima yapfuura. Parizvino (Chivabvu 2020, approx. mushanduri) zvese zvine musoro kubectl apply
, i.e. kugadzira zviwanikwa zvisipo uye kuvandudza zviripo, zvinoshanda zvachose padivi rekodhi kubectl
. Nhamburiko dziri kuitwa apply
kudivi reAPI, asi ichiri mubeta. Ndichanyora zvakadzama pazasi.
Patch by default
Yakanyanya kushandiswa patch
, kana iwe uchida kugadzirisa iyo sosi. Aya ndiwo mashandiro anoita ma library emutengi pamusoro peKubernetes API uye kubectl
(hazvishamise, sezvo iri wrapper ye library library, approx. mushanduri).
Shanda zvine hungwaru
Zvikwata zvese kubectl
apply
, edit
ΠΈ patch
shandisa nzira PATCH
muHTTP inokumbira kugadzirisa iripo sosi. Kana iwe ukapinda mukuitwa kwemirairo mune zvakadzama, saka vese vanoshandisa nzira patch
inogona kushandisa dzimwe nzira (zvimwe pane izvi pazasi). Iyo Strategic-merge patching nzira inoedza "kuigadzirisa" nekubatanidza iyo yakapihwa yakatarwa neiyo iripo yakatarwa. Kunyanya, inoedza kubatanidza zvese zvinhu uye arrays, zvinoreva kuti shanduko dzinowanzo kuve dzekuwedzera. Semuenzaniso, kumhanya murairo patch
ine nharaunda itsva inoshanduka mune yepod mudziyo kutsanangurwa, inoita kuti iyo nharaunda shanduko iwedzerwe kune iripo yemamiriro ekunze akasiyana pane kuinyora pamusoro. Kuti ubvise uchishandisa nzira iyi, iwe unofanirwa kumanikidza iyo parameter kukosha kudzima mune yakapihwa yakatarwa. Ndeupi wezvikwata kubectl
Zviri nani kushandisa kugadzirisa?
Kana iwe ukagadzira uye kugadzirisa zviwanikwa zvako uchishandisa kubectl apply
, kana uchivandudza zviri nani kushandisa nguva dzose kubectl apply
kuti kubectl
inogona kugadzirisa kurongeka uye kunyatsotevera shanduko dzakakumbirwa kubva kune application kuenda kune application. Kubatsira nguva dzose kushandisa apply
ndeyekuti inochengeta iyo yakamboshandiswa yakatarwa, ichibvumira kuti izive kana zvimiro zvemaitiro uye array zvinhu zvinobviswa zvakajeka. Izvi zvinokubvumira kushandisa apply
kubvisa zvivakwa uye array zvinhu, nepo yakajairwa nzira yekubatanidza haishande. Zvikwata edit
ΠΈ patch
usagadzirise zvinyorwa izvozvo kubectl apply
inoshandisa kuronda shanduko dzayo, saka chero shanduko inotevedzwa uye kuitwa kuburikidza neKubernetes API, asi inoitwa kuburikidza nemirairo. edit
ΠΈ patch
, zvisingaoneki kumirairo inotevera apply
, ndizvo apply
haibvisi iwo kunyangwe asina kuoneka mune yekuisa yakatarwa apply
(Mapepa anoti edit
ΠΈ patch
ita zvigadziriso kune zvinyorwa zvakashandiswa apply
, asi mukuita - kwete).
Kana iwe usingashandisi murairo apply
, inogona kushandiswa se edit
, uye patch
, kusarudza murairo unonyatsokodzera shanduko iri kuitwa. Kana uchiwedzera nekuchinja maBOM zvivakwa, nzira dzese dzakafanana. Paunenge uchidzima zvimiro zvezvirevo kana array elements edit
inoita senge yakatangwa kamwe chete apply
, kusanganisira kucherekedza kuti zvakange zvakaita sei zvisati zvaitika uye mushure mekunge zvagadziridzwa, saka unogona kubvisa zvakajeka zvivakwa uye hurongwa hwezvinhu kubva kune sosi. Iwe unofanirwa kuseta zvakajeka kukosha kwepfuma kuti uite zvisina basa mune yakatarwa patch
kuibvisa kubva pachishandiswa. Kubvisa array element uchishandisa strategic-merge patching zvakanyanya kuoma nekuti zvinoda kushandiswa kwekubatanidza mirairo. Ona dzimwe nzira dzekusimudzira pazasi kuti uwane dzimwe nzira dzinoshanda.
Kushandisa nzira dzekuvandudza muraibhurari yevatengi vanoita zvakafanana nemirairo iri pamusoro kubectl
, inofanira kuiswa muzvikumbiro content-type
Π² application/strategic-merge-patch+json
. Kana iwe uchida kubvisa zvivakwa mune yakatarwa, iwe unofanirwa kuseta zvakajeka hunhu hwavo kuti huite zvisina basa nenzira yakafanana. kubectl patch
. Kana iwe uchida kubvisa array zvinhu, iwe unofanirwa kusanganisira kubatanidza dhairekitori mune yekuvandudza yakatarwa kana kushandisa imwe nzira yekuvandudza.
Dzimwe nzira dzekuvandudza
Kubernetes inotsigira dzimwe nzira mbiri dzekuvandudza: kubectl patch --type=merge
. Paunenge uchishanda neKubernetes API, unofanirwa kushandisa nzira yekukumbira PATCH
uye kuiswa content-type
Π² application/merge-patch+json
.
Iyo JSON chigamba maitiro, pane kupa chidimbu chirevo chechishandiso, inoshandisa kupa shanduko yaunoda kuita kune iyo sosi seyakarongwa, umo chimwe nechimwe chechikamu chinomiririra tsananguro yekuchinja kuri kuitwa kune sosi. Iyi nzira inzira inoshanduka uye ine simba yekuratidza shanduko dziri kuitwa, asi pamutengo wekunyora shanduko dziri kuitwa mune yakaparadzana, isiri Kubernetes fomati, pane kutumira chikamu chezviwanikwa. IN kubectl
unogona kusarudza JSON chigamba uchishandisa kubectl patch --type=json
. Paunenge uchishandisa Kubernetes API, nzira iyi inoshanda uchishandisa nzira yekukumbira PATCH
uye kuiswa content-type
Π² application/json-patch+json
.
Tinoda chivimbo - shandisa kutsiva
Mune zvimwe zviitiko, iwe unofanirwa kuve nechokwadi chekuti hapana shanduko inoitwa kune sosi pakati penguva iyo sosi inoverengwa uye kana ichivandudzwa. Mune mamwe mazwi, iwe unofanirwa kuve nechokwadi chekuti shanduko dzese dzichave atomic. Muchiitiko ichi, kugadzirisa zviwanikwa zvaunofanira kushandisa replace
. Semuyenzaniso, kana uine ConfigMap ine counter inovandudzwa neakawanda masosi, unofanira kuva nechokwadi chekuti zvinyorwa zviviri hazvigadzirise counter panguva imwe chete, zvichiita kuti update irasikike. Kuratidza, fungidzira kutevedzana kwezviitiko uchishandisa nzira patch
:
- A uye B vanowana mamiriro azvino echishandiso kubva kuAPI
- Imwe neimwe munharaunda inogadzirisa iyo yakatarwa nekuwedzera iyo counter neimwe uye nekuwedzera "A" kana "B" zvakateerana kune "yakagadziridzwa-ne" noti.
- Uye inogadziridza sosi nekukurumidza zvishoma
- B inovandudza chiwanikwa
Nekuda kweizvozvo, update A inorasika. Kushanda kwekupedzisira patch
inokunda, iyo counter inokwidziridzwa neimwe pachinzvimbo chembiri, uye kukosha kwe "yakagadziridzwa-ne" noti inopera ne "B" uye haina "A". Ngatienzanise zviri pamusoro nezvinoitika kana zvigadziriso zvichiitwa uchishandisa nzira replace
:
- A uye B vanowana mamiriro azvino echishandiso kubva kuAPI
- Imwe neimwe munharaunda inogadzirisa iyo yakatarwa nekuwedzera iyo counter neimwe uye nekuwedzera "A" kana "B" zvakateerana kune "yakagadziridzwa-ne" noti.
- Uye inogadziridza sosi nekukurumidza zvishoma
- B inoedza kugadzirisa sosi, asi iyo yekuvandudza inorambwa neAPI nekuti iyo vhezheni yezviwanikwa iri mune zvakatemwa.
replace
haienderane neyazvino vhezheni yechishandiso muKubernetes nekuti vhezheni yechishandiso yakawedzerwa neA's kutsiva kushanda.
Muchiitiko chiri pamusoro apa, B ichafanirwa kutora zvakare sosi, ita shanduko kune itsva nyika uye edza zvakare replace
. Izvi zvichaita kuti counter iwedzerwe nembiri uye "yakagadziridzwa-ne" noti kuti ibatanidze "AB" kumagumo.
Muenzaniso uri pamusoro unoreva kuti kana uchiitwa replace
Iyo yese sosi inotsiviwa zvachose. Specification inoshandiswa replace
, hazvifaniri kutsaura, kana muzvikamu sezvazviri apply
, asi zvakakwana, kusanganisira kuwedzera resourceVersion
mune iyo yakatarwa metadata. Kana usati wagonesa resourceVersion
kana shanduro yaunopa haisi yemazuva ano, inotsiva icharambwa. Saka nzira yakanakisa yekushandisa ndeye replace
- verenga sosi, igadzirise uye idzore ipapo ipapo. Kushandisa kubectl
, zvinogona kutaridzika seizvi:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Zvakakosha kuziva kuti mirairo miviri inotevera, yakaitwa sequentially, ichaita zvinobudirira, sezvo deployment.yaml
haina zvinhu .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Izvi zvingaita sezvinopesana nezvakataurwa pamusoro apa, i.e. "kuwedzera resourceVersion
kupinda metadata yakatarwa." Zvakaipa here kutaura izvozvo? Kwete, hazvina kudaro, nokuti kana kubectl
zviziviso zvausina kududza resourceVersion
, inozoiverenga kubva kune sosi uye woiwedzera kune iyo yakatarwa yawakatsanangura, uye chete wozozviita replace
. Nekuti izvi zvinogona kuve nengozi kana ukavimba neatomicity, mashiripiti anoshanda zvachose padivi kubectl
, haufanirwe kuvimba nazvo kana uchishandisa maraibhurari evatengi anoshanda neAPI. Mune ino kesi iwe uchafanirwa kuverenga iyo yazvino sosi yakatarwa, igadzirise uye wobva waita PUT
chikumbiro.
Iwe haugone kuita chigamba - isu tinotsiva
Dzimwe nguva unofanirwa kuita shanduko dzisingagone kubatwa neAPI. Muzviitiko izvi, unogona kumanikidza kutsiva iyo sosi nekudzima nekuigadzira zvakare. Izvi zvinoitwa kushandisa kubectl replace --force
. Kumhanya murairo pakarepo kunobvisa zviwanikwa uye wozozvigadzirisa kubva pane zvakapihwa. Iko hakuna "simba kutsiva" mubati muAPI, uye kuti uzviite kuburikidza neAPI, unofanirwa kuita maviri maoparesheni. Kutanga iwe unofanirwa kudzima sosi nekuigadzirira gracePeriodSeconds
kusvika zero (0) uye propagationPolicy
mu "Background" uye wobva wagadzira zvakare chitubu ichi nezvinodiwa.
Yambiro: Iyi nzira ine njodzi uye inogona kutungamira kune isina kutsanangurwa.
Isa padivi reseva
Sezvambotaurwa pamusoro, Vagadziri veKubernetes vari kushanda pakuita pfungwa apply
kubva kubectl
muKubernetes API. Logics apply
inowanikwa muKubernetes 1.18 kuburikidza kubectl apply --server-side
kana kuburikidza neAPI uchishandisa nzira PATCH
Ρ content-type
application/apply-patch+YAML
.
Ongorora: JSON zvakare inoshanda YAML, saka unogona kutumira iyo yakatarwa seJSON kunyangwe kana
content-type
vachavaapplication/apply-patch+yaml
.
Besides that logic kubectl
inowanikwa kune wese munhu kuburikidza neAPI, apply
padivi pesevha, inochengetedza kuti ndiani ane mhosva yeminda mune yakatarwa, nekudaro ichibvumira yakachengeteka yakawanda kuwana kwayo yekusapindirana kwekugadzirisa. Mune mamwe mazwi, kana apply
padivi pesevha ichawedzera kupararira, yakachengeteka yepasirese yakachengeteka manejimendi manejimendi ichaonekwa kune vakasiyana vatengi, semuenzaniso, kubectl, Pulumi kana Terraform, GitOps, pamwe chete nekuzvinyora-zvinyorwa uchishandisa maraibhurari evatengi.
Migumisiro
Ndinovimba iyi pfupiso pfupi yenzira dzakasiyana dzekuvandudza zviwanikwa mumasumbu zvakabatsira kwauri. Zvakanaka kuziva kuti haisi kungoisa maringe nekutsiva; zvinogoneka kuvandudza sosi uchishandisa application, edit, chigamba, kana kutsiva. Mushure mezvose, musimboti, nzira yega yega ine nzvimbo yayo yekushandisa. Kune shanduko yeatomu, kutsiva kunodiwa; kana zvisina kudaro, iwe unofanirwa kushandisa hurongwa-kubatanidza chigamba kuburikidza nekuisa. Zvirinani, ndinotarisira kuti iwe unzwisise kuti haugone kuvimba neGoogle kana StackOerflow paunenge uchitsvaga "kubernetes application vs kutsiva". Kusvikira chinyorwa ichi chatsiva mhinduro yazvino.
Source: www.habr.com