Kuenzanisa Kwakakodzera kweKubernetes Nyorera, Tsiva uye Patch

Kubernetes ine akati wandei sarudzo dzekuvandudza zviwanikwa: shandisa, gadzirisa, chigamba uye tsiva. Pane kuvhiringika pamusoro pezvinoitwa neimwe neimwe uye nguva yekuzvishandisa. Ngatizvionei.

Kuenzanisa Kwakakodzera kweKubernetes Nyorera, Tsiva uye Patch

kana tsvaga paGoogle mutsara wekuti "kubernetes apply vs replace" unowanikwa pindura kuStackOverflow, izvo zvisiri izvo. Pakutsvaga "kubernetes shandisa vs chigamba" yekutanga link ndiyo zvinyorwa zve 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 mutengi raibhurari yeKubernetes API kushandisa imwe programming language. Raibhurari inobata nzira idzi kuburikidza neHTTP zvikumbiro uchishandisa nzira PUT ΠΈ PATCH... Mariri update ΠΈ replace shandisa PUTuye patch, pasinei nokuti zvingava zviduku sei, inoshandisa PATCH.

Izvo zvinofanirwa kucherechedzwa kuti kubectl inoshandawo nemasumbu kuburikidza neAPI. Nemamwe mashoko, kubectlchiputiriso 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 pane logic transfer 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 Strategic-merge patching kugadzirisa zviwanikwa, kunyangwe iwo murairo 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 applykuti 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 patchkuibvisa 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: JSON batanidza chigamba ΠΈ JSON chigamba. Iyo JSON yekubatanidza chigamba nzira inotora chidimbu Kubernetes yakatarwa sekuisa uye inotsigira kubatanidza zvinhu zvakafanana neiyo strategic-merge patching nzira. Musiyano uripo pakati pezviviri izvi ndewekuti inongo tsigira array kutsiva, kusanganisira mudziyo wemidziyo mune iyo pod yakatarwa. Izvi zvinoreva kuti kana uchishandisa JSON merge patch, iwe unofanirwa kupa zvizere zvirevo zvemidziyo yese kana chero chivakwa chechero mudziyo chachinja. Saka nzira iyi inobatsira pakubvisa zvinhu kubva muhurongwa muBOM. Pamutsetse wekuraira unogona kusarudza JSON batanidza chigamba uchishandisa 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 vachava application/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.

Kuenzanisa Kwakakodzera kweKubernetes Nyorera, Tsiva uye Patch

Source: www.habr.com

Voeg