Tá roinnt roghanna ag Kubernetes chun acmhainní a nuashonrú: cuir i bhfeidhm, cuir in eagar, paiste agus athsholáthar. Tá mearbhall ann faoi cad a dhéanann gach duine acu agus cathain ar cheart iad a úsáid. A ligean ar figiúr sé amach.
Más rud é kubectl patch
, nach n-áirítear comparáid apply
и patch
. Breathnóidh an t-alt seo ar na roghanna éagsúla, chomh maith le húsáid cheart gach ceann acu.
Le linn shaolré acmhainn Kubernetes (seirbhís, imscaradh, dul isteach, etc.), uaireanta is gá duit roinnt airíonna na hacmhainne seo a athrú, a chur leis nó a bhaint. Mar shampla, cuir nóta leis, méadaigh nó laghdaigh líon na macasamhla.
Kubernetes CLI
Má tá tú ag obair cheana féin le braislí Kubernetes tríd an CLI, tá tú eolach cheana féin apply
и edit
. Foireann apply
léann sé an tsonraíocht acmhainne ón gcomhad agus déanann sé “upsert” do bhraisle Kubernetes, i.e. cruthaíonn sé an acmhainn mura bhfuil sé ann agus nuashonraítear í má tá sé ann. Foireann edit
léann acmhainn tríd an API, ansin scríobhann an tsonraíocht acmhainne chuig comhad áitiúil, a osclaítear ansin in eagarthóir téacs. Tar éis duit an comhad a chur in eagar agus a shábháil, kubectl
seolfaidh sé na hathruithe a rinneadh ar ais tríd an API, a chuirfidh na hathruithe seo i bhfeidhm go cúramach ar an acmhainn.
Níl a fhios ag gach duine na horduithe patch
и replace
. Foireann patch
ligeann sé duit cuid de shonraíocht acmhainne a athrú, gan ach an chuid athraithe ar an líne ordaithe a sholáthar. Foireann replace
oibríonn mar an gcéanna le edit
, ach ní mór gach rud a dhéanamh de láimh: ní mór duit an leagan reatha den tsonraíocht acmhainne a íoslódáil, mar shampla, ag baint úsáide as kubectl get -o yaml
, cuir in eagar é, ansin bain úsáid as replace
chun acmhainn a nuashonrú de réir sonraíochta athraithe. Foireann replace
Ní oibreoidh sé má tharla aon athrú idir léamh na hacmhainne agus ionadú na hacmhainne.
Kubernetes API
Is dócha go bhfuil tú eolach ar na modhanna CoreV1().Pods().Update()
, replaceNamespacedService
nó patch_namespaced_deployment
, má oibríonn tú le braislí via PUT
и PATCH
... Cá bhfuil update
и replace
úsáid PUT
Agus patch
, is cuma cé chomh fánach a d'fhéadfadh sé a bheith, úsáideann PATCH
.
Ba chóir a thabhairt faoi deara go kubectl
oibríonn sé freisin le braislí trí API. I bhfocail eile, kubectl
Is fillteán ar bharr na leabharlainne cliant don teanga Go, a sholáthraíonn den chuid is mó an cumas chun fo-orduithe a chur ar fáil i bhfoirm níos dlúithe agus inléite de bhreis ar na cumais API caighdeánach. Mar shampla, mar is féidir leat a bheith faoi deara cheana féin, an modh apply
nár luadh thuas san alt roimhe seo. Faoi láthair (Bealtaine 2020, thart. aistritheoir) loighic ar fad kubectl apply
, i.e. ag cruthú acmhainní nach bhfuil ann agus ag nuashonrú na cinn atá ann cheana féin, oibríonn sé go hiomlán ar thaobh an chóid kubectl
. Tá iarrachtaí á ndéanamh apply
go dtí an taobh API, ach tá sé fós i béite. Scríobhfaidh mé níos mine thíos.
Paiste de réir réamhshocraithe
Is fearr a úsáidtear patch
, más mian leat an acmhainn a nuashonrú. Seo mar a oibríonn an dá leabharlann cliant ar bharr an Kubernetes API agus kubectl
(ní haon ionadh é, ós rud é gur fillteán é don leabharlann cliant, thart. aistritheoir).
Oibrigh go straitéiseach
Gach foirne kubectl
apply
, edit
и patch
bain úsáid as an modh PATCH
in iarratais HTTP chun acmhainn atá ann cheana a nuashonrú. Má dhéanann tú iniúchadh níos mine ar chur i bhfeidhm na n-orduithe, úsáideann gach ceann acu an cur chuige patch
is féidir cur chuige eile a úsáid (tuilleadh air seo thíos). Déanann an cur chuige maidir le cumasc straitéiseach iarracht "é a chur i gceart" tríd an tsonraíocht a soláthraíodh a chumasc leis an tsonraíocht reatha. Go sonrach, déanann sé iarracht rudaí agus eagair araon a chomhcheangal, rud a chiallaíonn gur gnách go mbíonn na hathruithe mar bhreiseán. Mar shampla, an t-ordú a rith patch
agus athróg timpeallachta nua i sonraíocht na gcoimeádán pod, is cúis leis an athróg timpeallachta sin a chur leis na hathróga comhshaoil atá ann cheana seachas iad a fhorscríobh. Chun deireadh a chur leis an gcur chuige seo, ní mór duit luach na bparaiméadar a chur ar neamhní sa tsonraíocht a soláthraíodh. Cé acu de na foirne kubectl
An fearr é a úsáid chun nuashonrú a dhéanamh?
Má chruthaíonn tú agus má bhainistíonn tú do chuid acmhainní ag baint úsáide as kubectl apply
, nuair a nuashonrú tá sé níos fearr a úsáid i gcónaí kubectl apply
go kubectl
in ann cumraíocht a bhainistiú agus athruithe iarrtha a rianú i gceart ó fheidhmchlár go feidhmchlár. Buntáiste a úsáid i gcónaí apply
is é sin go gcoimeádann sé sonraíocht a cuireadh i bhfeidhm roimhe seo, rud a ligeann dó fios a bheith aige nuair a bhaintear airíonna sonraíochta agus eilimintí eagar go follasach. Ligeann sé seo duit úsáid a bhaint as apply
chun airíonna agus eilimintí eagar a bhaint, agus ní oibreoidh gnáthchumasc straitéiseach. Foirne edit
и patch
ná nuashonraigh nótaí sin kubectl apply
úsáidí chun a chuid athruithe a rianú, mar sin aon athruithe a rianaítear agus a dhéantar trí API Kubernetes, ach a dhéantar trí orduithe edit
и patch
, dofheicthe d'orduithe ina dhiaidh sin apply
Is é sin, apply
ní bhaintear iad fiú mura bhfuil siad le feiceáil sa tsonraíocht ionchuir le haghaidh apply
(Deir an doiciméadú sin edit
и patch
nuashonruithe a dhéanamh ar na nótaí a úsáideadh apply
, ach i gcleachtas - níl).
Mura n-úsáideann tú an t-ordú apply
, is féidir a úsáid mar edit
Agus patch
, ag roghnú an ordaithe is fearr a oireann don athrú atá á dhéanamh. Nuair a bhíonn airíonna BOM á gcur leis agus á n-athrú, tá an dá chur chuige beagnach mar an gcéanna. Agus airíonna sonraíochta nó eilimintí eagar á scriosadh edit
iompraíonn sé cosúil le seoladh aonuaire apply
, lena n-áirítear súil a choinneáil ar conas a bhí an tsonraíocht roimh agus tar éis í a chur in eagar, ionas gur féidir leat airíonna agus eilimintí eagar a bhaint go sainráite ó acmhainn. Ní mór duit an luach maoine a shocrú go neamhní sa tsonraíocht le haghaidh patch
chun é a bhaint as an acmhainn. Tá sé níos casta eilimint eagar a bhaint trí úsáid a bhaint as paisteáil chumaisc straitéiseach toisc go n-éilíonn sé treoracha cumaisc a úsáid. Féach cur chuige uasghrádaithe eile thíos le haghaidh roghanna eile níos inmharthana.
Modhanna nuashonraithe a chur i bhfeidhm sa leabharlann cliant a iompraíonn iad féin mar an gcéanna leis na horduithe thuas kubectl
, a shocrú in iarratais content-type
в application/strategic-merge-patch+json
. Más mian leat airíonna a bhaint i sonraíocht, ní mór duit a luachanna a shocrú go neamhní ar bhealach comhchosúil kubectl patch
. Más gá duit eilimintí eagar a bhaint, ba cheart duit treoracha cumaisc a chur san áireamh sa tsonraíocht nuashonraithe nó úsáid a bhaint as cur chuige difriúil maidir le nuashonruithe.
Cur chuige eile maidir le nuashonruithe
Tacaíonn Kubernetes le dhá chur chuige nuashonraithe eile: kubectl patch --type=merge
. Agus tú ag obair le Kubernetes API, ba cheart duit an modh iarratais a úsáid PATCH
agus suiteáil content-type
в application/merge-patch+json
.
Úsáideann cur chuige paiste JSON, seachas sonraíocht pháirteach acmhainne a sholáthar, na hathruithe is mian leat a dhéanamh ar an acmhainn a sholáthar mar eagar, ina léiríonn gach eilimint den eagar cur síos ar an athrú atá á dhéanamh ar an acmhainn. Is bealach níos solúbtha agus níos cumhachtaí é an cur chuige seo chun na hathruithe atá á ndéanamh a chur in iúl, ach is é an costas a bhaineann leis na hathruithe atá á ndéanamh a liostú i bhformáid ar leith, neamh-Kubernetes, seachas sonraíocht pháirteach acmhainne a sheoladh. IN kubectl
is féidir leat paiste JSON a roghnú ag baint úsáide as kubectl patch --type=json
. Agus an Kubernetes API á úsáid agat, oibríonn an cur chuige seo ag baint úsáide as an modh iarratais PATCH
agus suiteáil content-type
в application/json-patch+json
.
Ní mór dúinn muinín - úsáid ionad
I gcásanna áirithe, ní mór duit a bheith cinnte nach ndéantar aon athrú ar acmhainn idir an t-am a léitear an acmhainn agus an tráth a nuashonraítear í. I bhfocail eile, ba chóir duit a chinntiú go mbeidh gach athrú adamhach. Sa chás seo, chun acmhainní a thabhairt cothrom le dáta ba chóir duit a úsáid replace
. Mar shampla, má tá ConfigMap agat le cuntar atá nuashonraithe ag foinsí iomadúla, ba cheart duit a bheith cinnte nach nuashonraíonn dhá fhoinse an gcuntar ag an am céanna, rud a fhágann go gcaillfear an nuashonrú. Leis an gcur chuige a léiriú, samhlaigh seicheamh imeachtaí patch
:
- Faigheann A agus B staid reatha na hacmhainne ón API
- Nuashonraíonn gach ceann acu an tsonraíocht go háitiúil tríd an gcuntar a mhéadú faoi cheann amháin agus freisin "A" nó "B" faoi seach a chur leis an nóta "nuashonraithe"
- Agus déanann sé an acmhainn a nuashonrú beagán níos tapúla
- Déanann B an acmhainn a nuashonrú
Mar thoradh air sin, cailltear nuashonrú A. Oibriú deiridh patch
Bhuaigh, méadaítear an cuntar faoi cheann amháin in ionad dhá cheann, agus críochnaíonn luach an nóta "nuashonraithe le" le "B" agus níl "A" ann. Déanaimis an méid thuas a chur i gcomparáid leis an méid a tharlaíonn nuair a dhéantar nuashonruithe ag baint úsáide as an gcur chuige replace
:
- Faigheann A agus B staid reatha na hacmhainne ón API
- Nuashonraíonn gach ceann acu an tsonraíocht go háitiúil tríd an gcuntar a mhéadú faoi cheann amháin agus freisin "A" nó "B" faoi seach a chur leis an nóta "nuashonraithe"
- Agus déanann sé an acmhainn a nuashonrú beagán níos tapúla
- Déanann B iarracht an acmhainn a nuashonrú, ach diúltaíonn an API don nuashonrú toisc go bhfuil an leagan acmhainne sa tsonraíocht
replace
nach meaitseálann an leagan reatha den acmhainn in Kubernetes toisc gur méadaíodh leagan na hacmhainne trí oibríocht athsholáthair A.
Sa chás thuas, beidh ar B an acmhainn a athghabháil, athruithe a dhéanamh ar an stát nua agus triail eile a bhaint as replace
. Fágfaidh sé sin go méadófar an cuntar faoi dhó agus go n-áireofar "AB" ar an nóta "nuashonraithe" ag an deireadh.
Tugann an sampla thuas le tuiscint go bhfuil nuair a fhorghníomhú replace
Cuirtear an acmhainn iomlán in ionad go hiomlán. Sonraíocht a úsáidtear le haghaidh replace
, gan a bheith páirteach, nó i gcodanna mar atá i apply
, ach iomlán, lena n-áirítear an Chomh maith resourceVersion
isteach i meiteashonraí na sonraíochta. Mura bhfuil tú cumasaithe resourceVersion
nó nach bhfuil an leagan a sholáthraíonn tú reatha, diúltófar don athsholáthar. Mar sin is é an cur chuige is fearr le húsáid replace
– léigh an acmhainn, nuashonraigh í agus ceannaigh í láithreach. Ag baint úsáide as kubectl
, d'fhéadfadh sé breathnú mar seo:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Is fiú a thabhairt faoi deara go ndéanfar an dá ordú seo a leanas, a fhorghníomhófar go seicheamhach, a fhorghníomhú go rathúil, ós rud é deployment.yaml
nach bhfuil maoin .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Is cosúil go bhfuil sé seo ag teacht salach ar a bhfuil ráite thuas, i.e. “ag cur resourceVersion
isteach i meiteashonraí na sonraíochta." An bhfuil sé mícheart é sin a rá? Níl, níl, mar má tá kubectl
fógraí nár shonraigh tú resourceVersion
, léifidh sé ón acmhainn é agus cuirfidh sé leis an tsonraíocht a shonraigh tú é, agus gan ach ansin é a fhorghníomhú replace
. Toisc go bhféadfadh sé seo a bheith contúirteach má tá tú ag brath ar adamhach, oibríonn an draíocht go hiomlán ar an taobh kubectl
, níor cheart duit a bheith ag brath air agus tú ag úsáid leabharlanna cliant a oibríonn leis an API. Sa chás seo beidh ort an tsonraíocht acmhainne reatha a léamh, é a nuashonrú agus ansin é a fhorghníomhú PUT
prós.
Ní féidir leat paiste a dhéanamh - déanaimid athsholáthar
Uaireanta ní mór duit roinnt athruithe a dhéanamh nach féidir leis an API a láimhseáil. Sna cásanna seo, is féidir leat iallach a chur ar athsholáthar na hacmhainne trína scriosadh agus a athchruthú. Déantar é seo ag baint úsáide as kubectl replace --force
. Má ritheann tú an t-ordú, baintear na hacmhainní láithreach agus ansin déanann sé iad a athchruthú ón tsonraíocht a soláthraíodh. Níl aon láimhseálaí "in ionad fórsa" san API, agus chun é sin a dhéanamh tríd an API, ní mór duit dhá oibríocht a dhéanamh. Ar dtús ní mór duit an acmhainn a scriosadh trí shocrú dó gracePeriodSeconds
go nialas (0) agus propagationPolicy
in “Cúlra” agus ansin athchruthaigh an acmhainn seo leis an tsonraíocht inmhianaithe.
Rabhadh: D’fhéadfadh an cur chuige seo a bheith contúirteach agus d’fhéadfadh staid neamhshainithe a bheith mar thoradh air.
Déan iarratas ar thaobh an fhreastalaí
Mar a luadh thuas, tá forbróirí Kubernetes ag obair ar chur i bhfeidhm an loighic apply
de kubectl
in API Kubernetes. Loighic apply
ar fáil i Kubernetes 1.18 via kubectl apply --server-side
nó tríd an API ag baint úsáide as an modh PATCH
с content-type
application/apply-patch+YAML
.
Nóta: Is YAML bailí é JSON freisin, ionas gur féidir leat an tsonraíocht a sheoladh mar JSON fiú amháin más rud é
content-type
Beidhapplication/apply-patch+yaml
.
Chomh maith leis an loighic sin kubectl
ar fáil do gach duine trí API, apply
ar thaobh an fhreastalaí, coinníonn sé súil ar cé atá freagrach as na réimsí sa tsonraíocht, rud a cheadaíonn rochtain iolrach slán dá eagarthóireacht gan coinbhleacht. I bhfocail eile, más rud é apply
ar thaobh an fhreastalaí a bheith níos forleithne, beidh comhéadan bainistíochta acmhainní slán uilíoch le feiceáil do chliaint éagsúla, mar shampla, kubectl, Pulumi nó Terraform, GitOps, chomh maith le scripteanna féinscríofa ag baint úsáide as leabharlanna cliant.
Torthaí
Tá súil agam go raibh an forbhreathnú gairid seo ar bhealaí éagsúla chun acmhainní i gcnuasaigh a nuashonrú ina chuidiú duit. Is maith go mbeadh a fhios agat nach bhfuil i gceist leis ach iarratas a dhéanamh i gcoinne ionadaigh; is féidir acmhainn a nuashonrú trí úsáid a bhaint as feidhmchlár, eagarthóireacht, paiste nó athsholáthar. Tar éis an tsaoil, i bprionsabal, tá a réimse feidhme féin ag gach cur chuige. I gcás athruithe adamhach, is fearr athsholáthar; Ar a laghad, táim ag súil go dtuigeann tú nach féidir muinín a bheith agat as Google nó StackOerflow agus tú ag cuardach “kubernetes apply vs replace”. Ar a laghad go dtí go gcuirfear an t-alt seo in ionad an fhreagra reatha.
Foinse: will.com