Comparáid Chuí idir Kubernetes Cuir i bhFeidhm, Ionadaigh agus Paiste

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.

Comparáid Chuí idir Kubernetes Cuir i bhFeidhm, Ionadaigh agus Paiste

Más rud é cuardach ar Google tá an frása "kubernetes apply vs replace" suite freagra ar StackOverflow, rud nach bhfuil ceart. Nuair a chuardach "kubernetes apply vs paiste" is é an chéad nasc an doiciméadú le haghaidh 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(), replaceNamespacedServicepatch_namespaced_deployment, má oibríonn tú le braislí via leabharlann cliant le haghaidh Kubernetes API ag baint úsáide as roinnt teanga ríomhchlárúcháin. Láimhseálann an leabharlann na modhanna seo trí iarratais HTTP ag baint úsáide as na modhanna PUT и PATCH... Cá bhfuil update и replace úsáid PUTAgus 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, kubectlIs 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 ar aistriú loighic 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 paiste straitéiseach-cumasc chun acmhainní a nuashonrú, cé go bhfuil an t-ordú 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 applygo 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 applyIs é 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 editAgus 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 patchchun é 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: paiste chumasc JSON и paiste JSON. Glacann cur chuige paiste cumaisc JSON sonraíocht pháirteach Kubernetes mar ionchur agus tacaíonn sé le rudaí a chumasc atá cosúil leis an gcur chuige maidir le cumasc straitéiseach. Is é an difríocht idir an dá cheann ná nach dtacaíonn sé ach le hathsholáthar eagair, lena n-áirítear an t-eagar coimeádáin sa tsonraíocht pod. Ciallaíonn sé seo, agus paiste cumasc JSON á úsáid agat, go gcaithfidh tú sonraíochtaí iomlána a sholáthar do na coimeádáin go léir ar eagla go n-athraíonn aon mhaoin de chuid coimeádán ar bith. Mar sin tá an cur chuige seo úsáideach chun eilimintí a bhaint as eagar i BB. Ar an líne ordaithe is féidir leat paiste chumasc JSON a roghnú ag baint úsáide as 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 Beidh application/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.

Comparáid Chuí idir Kubernetes Cuir i bhFeidhm, Ionadaigh agus Paiste

Foinse: will.com

Add a comment