Kubernetes e na le likhetho tse 'maloa tsa ho ntlafatsa lisebelisoa: kenya kopo, hlophisa, patch le ho khutlisa. Ho na le pherekano mabapi le hore na e mong le e mong o etsa eng le hore na o lokela ho li sebelisa neng. Ha re e utloisise.
haeba kubectl patch
, e sa akarelletseng papiso apply
и patch
. Sehlooho sena se tla sheba likhetho tse fapaneng, hammoho le tšebeliso e nepahetseng ea e 'ngoe le e' ngoe.
Nakong ea bophelo ba sesebelisoa sa Kubernetes (tšebeletso, phepelo, ho kenella, joalo-joalo), ka linako tse ling u hloka ho fetola, ho eketsa kapa ho tlosa thepa e itseng ea sesebelisoa sena. Ka mohlala, eketsa molaetsa, eketsa kapa fokotsa palo ea likopi.
Kubernetes CLI
Haeba u se u ntse u sebetsa le lihlopha tsa Kubernetes ka CLI, u se u ntse u tloaelane le tsona apply
и edit
. Sehlopha apply
e bala lintlha tsa lisebelisoa ho tsoa faeleng mme e etsa "upsert" ho sehlopha sa Kubernetes, i.e. e theha mohloli haeba o le sieo, ebe oa e nchafatsa haeba o le teng. Sehlopha edit
o bala sesebelisoa ka API, ebe o ngola lintlha tsa mohlodi faeleng ea lehae, ebe e buloa ho mohlophisi oa mongolo. Ka mor'a ho hlophisa le ho boloka faele, kubectl
e tla romela liphetoho tse entsoeng morao ka API, e tla sebelisa liphetoho tsena ka hloko mohloling.
Ha se bohle ba tsebang litaelo patch
и replace
. Sehlopha patch
e u lumella ho fetola karolo ea tlhaloso ea lisebelisoa, ho fana feela ka karolo e fetotsoeng molaong oa taelo. Sehlopha replace
e sebetsa joalo ka edit
, empa ntho e 'ngoe le e' ngoe e lokela ho etsoa ka letsoho: o hloka ho khoasolla phetolelo ea morao-rao ea boitsebiso ba lisebelisoa, mohlala, ho sebelisa kubectl get -o yaml
, e hlophise, ebe u sebelisa replace
ho nchafatsa mohlodi ho ya ka tlhaloso e fetotsweng. Sehlopha replace
e ke ke ea sebetsa haeba liphetoho leha e le life li etsahetse pakeng tsa ho bala le ho fetola mohloli.
Kubernetes API
Mohlomong u tloaelane le mekhoa CoreV1().Pods().Update()
, replaceNamespacedService
kapa patch_namespaced_deployment
, haeba u sebetsa le lihlopha ka PUT
и PATCH
... Hokae update
и replace
sebedisa PUT
le patch
, ho sa tsotellehe hore na ke ntho e nyenyane hakae, e sebelisa PATCH
.
Ke habohlokoa ho hlokomela seo kubectl
e boetse e sebetsa le lihlopha ka API. Ka mantsoe a mang, kubectl
ke sekoahelo ka holim'a laebrari ea bareki bakeng sa puo ea Go, eo haholo e fanang ka bokhoni ba ho fana ka litaelo tse nyenyane ka mokhoa o hlakileng haholoanyane le o balehang ho phaella ho bokhoni bo tloaelehileng ba API. Ka mohlala, joalokaha u se u hlokometse, mokhoa apply
ha ea boleloa ka holimo serapeng se fetileng. Hajoale (May 2020, hoo e ka bang. mofetoleli) tsohle tse utloahalang kubectl apply
, ke. ho theha lisebelisoa tse seng teng le ho ntlafatsa tse seng li ntse li le teng, li sebetsa ka ho feletseng ka lehlakoreng la khoutu kubectl
. Ho ntse ho etsoa boiteko apply
ka lehlakoreng la API, empa e ntse e le ho beta. Ke tla ngola ka ho qaqileng haholoanyane ka tlase.
Patch ka ho sa feleng
Molemo ka ho fetisisa sebelisoa patch
, haeba u batla ho nchafatsa mohlodi. Ke kamoo lilaebrari tsa bareki ka bobeli li sebetsang ka holim'a Kubernetes API le kubectl
(ha ho makatse, kaha ke sekoahelo sa laeborari ea bareki, hoo e ka bang. mofetoleli).
Sebetsa ka leano
Lihlopha tsohle kubectl
apply
, edit
и patch
sebelisa mokhoa PATCH
ho likopo tsa HTTP tsa ho nchafatsa mohlodi o teng. Haeba u kenella ts'ebetsong ea litaelo ka botlalo, joale kaofela ha tsona li sebelisa mokhoa ona patch
e ka sebelisa mekhoa e meng (ho feta mona ka tlase). Mokhoa oa ho kopanya oa leano o leka ho "lokisa" ka ho kopanya lintlha tse fanoeng le litlhaloso tse teng. Haholo-holo, e leka ho kopanya lintho ka bobeli le lihlopha, ho bolelang hore liphetoho li atisa ho ba tlatsetso. Ka mohlala, ho tsamaisa taelo patch
ka ho feto-fetoha ha tikoloho e ncha ho tlhaloso ea sets'oants'o sa pod, e etsa hore phetoho eo ea tikoloho e eketsoe ho mefuta e teng ea tikoloho ho e-na le ho e ngola holimo. Ho tlosa ho sebelisa mokhoa ona, o tlameha ho qobella boleng ba parameter ho hlakola litlhaloso tse fanoeng. Ke efe ea lihlopha kubectl
Na ho molemo ho e sebelisa ho ntlafatsa?
Haeba u theha le ho laola lisebelisoa tsa hau u sebelisa kubectl apply
, ha u ntlafatsa ho molemo ho sebelisa kamehla kubectl apply
e le hore kubectl
e khona ho laola tlhophiso le ho latela ka nepo liphetoho tse batloang ho tloha ho sesebelisoa ho ea ho sesebelisoa. Molemo kamehla sebelisa apply
ke hore e boloka tlaleho ea litlhaloso tse sebelisitsoeng pele, e lumella hore e tsebe ha thepa ea litlhaloso le likarolo tsa lihlopha li tlosoa ka ho hlaka. Sena se o lumella ho sebelisa apply
ho tlosa thepa le likarolo tse ngata, ha mokhoa o tloaelehileng oa ho kopanya o ke ke oa sebetsa. Lihlopha edit
и patch
u se ke ua ntlafatsa lintlha tseo kubectl apply
e sebelisa ho latela liphetoho tsa eona, kahoo liphetoho life kapa life tse lateloang le ho etsoa ka Kubernetes API, empa li entsoe ka litaelo. edit
и patch
, e sa bonahaleng ho litaelo tse latelang apply
, ke hore apply
ha e li tlose le haeba li sa hlahelle ka har'a litlhaloso tsa ho kenya apply
(Litokomane li bolela joalo edit
и patch
etsa lintlafatso ho lintlha tse sebelisitsoeng apply
, empa ka ts'ebetso - che).
Haeba u sa sebelise taelo apply
, e ka sebelisoa e le edit
le patch
, ho khetha taelo e lumellanang hantle le phetoho e etsoang. Ha o eketsa le ho fetola thepa ea BOM, mekhoa ka bobeli e batla e tšoana. Ha o hlakola thepa e khethehileng kapa likarolo tse ngata edit
e tshoana joalo ka ho qala hanghang apply
, ho kenyeletsa le ho boloka tlaleho ea hore na tlhaloso e ne e le joang pele le ka mor'a hore e lokisoe, e le hore u ka tlosa thepa le likarolo tse ngata mohloling ka ho hlaka. U hloka ho beha boleng ba thepa ka ho hlaka hore u se ke ua ba le lintlha tsa patch
ho e ntsha mohloding. Ho tlosa ntho e 'ngoe le e 'ngoe ka ho sebelisa strategic-merge patching ho thata haholo hobane ho hloka tšebeliso ea litaelo tsa ho kopanya. Sheba mekhoa e meng ea ntlafatso ka tlase bakeng sa mekhoa e meng e sebetsang haholoanyane.
Ho kenya ts'ebetsong mekhoa ea ntlafatso ka har'a laeborari ea bareki e sebetsang ka mokhoa o ts'oanang le litaelo tse kaholimo kubectl
, e lokela ho behoa ka likopo content-type
в application/strategic-merge-patch+json
. Haeba u batla ho tlosa thepa ka mokhoa o ikhethileng, o hloka ho beha boleng ba eona ka mokhoa o hlakileng hore e se ke ea sebetsa ka tsela e ts'oanang. kubectl patch
. Haeba o hloka ho tlosa likarolo tse ngata, o lokela ho kenyelletsa litaelo tsa ho kopanya ho litlhaloso tsa ntlafatso kapa u sebelise mokhoa o fapaneng oa ho ntlafatsa.
Mekhoa e meng ea ho ntlafatsa
Kubernetes e tšehetsa mekhoa e meng e 'meli ea ntlafatso: kubectl patch --type=merge
. Ha o sebetsa le Kubernetes API, o lokela ho sebelisa mokhoa oa kopo PATCH
le ho kenya content-type
в application/merge-patch+json
.
Mokhoa oa patch oa JSON, ho e-na le ho fana ka tlhaloso e sa fellang ea mohloli, o sebelisa ho fana ka liphetoho tseo u batlang ho li etsa ho sesebelisoa e le sehlopha, moo karolo ka 'ngoe ea sehlopha e emelang tlhaloso ea phetoho e etsoang mohloling. Mokhoa ona ke mokhoa o feto-fetohang le o matla oa ho hlalosa liphetoho tse ntseng li etsoa, empa ka litšenyehelo tsa ho thathamisa liphetoho tse etsoang ka mokhoa o fapaneng, o seng oa Kubernetes, ho e-na le ho romela boitsebiso bo sa fellang ba lisebelisoa. IN kubectl
u ka khetha patch ea JSON u sebelisa kubectl patch --type=json
. Ha u sebelisa Kubernetes API, mokhoa ona o sebetsa ho sebelisa mokhoa oa kopo PATCH
le ho kenya content-type
в application/json-patch+json
.
Re hloka boitšepo - sebelisa sebaka
Maemong a mang, o hloka ho etsa bonnete ba hore ha ho liphetoho tse etsoang mohloling pakeng tsa nako eo mohloli o baloang le ha o nchafatsoa. Ka mantsoe a mang, u lokela ho etsa bonnete ba hore liphetoho tsohle li tla ba teng athomo. Tabeng ena, ho ntlafatsa lisebelisoa tseo u lokelang ho li sebelisa replace
. Mohlala, haeba u na le ConfigMap e nang le k'haontareng e nchafalitsoeng ke mehloli e mengata, u lokela ho etsa bonnete ba hore mehloli e 'meli ha e ntlafatse k'haontareng ka nako e le 'ngoe, e leng se etsang hore ntlafatso e lahlehe. Ho bontša, nahana ka tatellano ea liketsahalo u sebelisa mokhoa oo patch
:
- A le B ba fumana boemo ba hajoale ba sesebelisoa ho tsoa ho API
- E 'ngoe le e 'ngoe sebakeng sa heno e nchafatsa lintlha ka ho eketsa k'haontara ka e le' ngoe le ho eketsa "A" kapa "B" ka ho latellana ho "updated-by"
- 'Me e nchafatsa mohlodi kapelenyana
- B e nchafatsa mohlodi
Ka lebaka leo, ntlafatso A e lahlehile. Opereishene ea ho qetela patch
ha e hlola, k'haontareng e eketsoa ka e le 'ngoe sebakeng sa tse peli,' me boleng ba "updated-by" bo qetella ka "B" mme ha bo na "A". Ha re bapise se ka holimo le se etsahalang ha liapdeite li etsoa ho sebelisoa mokhoa replace
:
- A le B ba fumana boemo ba hajoale ba sesebelisoa ho tsoa ho API
- E 'ngoe le e 'ngoe sebakeng sa heno e nchafatsa lintlha ka ho eketsa k'haontara ka e le' ngoe le ho eketsa "A" kapa "B" ka ho latellana ho "updated-by"
- 'Me e nchafatsa mohlodi kapelenyana
- B e leka ho nchafatsa mohlodi, empa ntjhafatso e hanoa ke API hobane mofuta wa mohlodi o ho tse hlalositsweng.
replace
ha e tsamaellane le mofuta oa hajoale oa sesebelisoa ho Kubernetes hobane mofuta oa sesebelisoa o ekelitsoe ke ts'ebetso ea A.
Tabeng e ka holimo, B e tla tlameha ho lata sesebelisoa hape, ho etsa liphetoho sebakeng se secha ebe o leka hape replace
. Sena se tla etsa hore k'haontareng e eketsoe ka tse peli 'me molaetsa oa "updated-by" o kenyelle "AB" qetellong.
Mohlala o ka holimo o bolela hore ha ho etsoa replace
Mohloli oohle o nkeloa sebaka ka ho feletseng. Tlhaloso e sebelisitsoeng bakeng sa replace
, e se ke ea e-ba leeme, kapa ka likarolo tse kang ho apply
, empa e feletse, ho akarelletsa le tlatsetso resourceVersion
ho metadata e khethehileng. Ha o so ka o bulela resourceVersion
kapa mofuta oo u faneng ka oona ha se oa morao-rao, phetisetso e tla hanoa. Kahoo mokhoa o motle oa ho sebelisa ke replace
- bala sesebelisoa, se nchafatse 'me u se nkele sebaka hang-hang. Ho sebelisa kubectl
, e ka shebahala tjena:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Ke habohlokoa ho hlokomela hore litaelo tse peli tse latelang, tse phethiloeng ka tatellano, li tla phethahatsoa ka katleho, kaha deployment.yaml
ha e na thepa .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Sena se ka bonahala se hanana le se boletsoeng ka holimo, i.e. "ho eketsa resourceVersion
ho metadata e khethehileng." Na ke phoso ho bua joalo? Che, ha ho joalo, hobane haeba kubectl
litemoso tseo u sa li hlalosang resourceVersion
, e tla e bala ho tsoa mohloling ebe e e kenyelletsa ho seo u se boletseng, ebe e se etsa feela replace
. Hobane sena se ka 'na sa e-ba kotsi haeba u itšetlehile ka atomicity, boselamose bo sebetsa ka ho feletseng ka lehlakore kubectl
, ha ua lokela ho itšetleha ka eona ha u sebelisa lilaebrari tsa bareki tse sebetsang le API. Tabeng ena, o tla tlameha ho bala litlhaloso tsa lisebelisoa tsa hajoale, o li ntlafatse ebe o li phetha PUT
kopo.
Ha o khone ho etsa patch - re fetola
Ka linako tse ling u hloka ho etsa liphetoho tse ke keng tsa sebetsoa ke API. Maemong ana, o ka qobella ho nkela sebaka sebaka ka ho hlakola le ho se etsa bocha. Sena se etsoa ho sebelisoa kubectl replace --force
. Ho tsamaisa taelo hang-hang ho tlosa lisebelisoa ebe ho li khutlisetsa ho tsoa ho litlhaloso tse fanoeng. Ha ho na "force replacer" handler ho API, 'me e le hore u etse joalo ka API, u lokela ho etsa ts'ebetso tse peli. Pele u lokela ho hlakola sesebelisoa ka ho seta bakeng sa sona gracePeriodSeconds
ho ea ho zero (0) le propagationPolicy
ho "Background" ebe u bopa sesebelisoa sena ka litlhaloso tse lakatsehang.
Tlhokomeliso: Mokhoa ona o ka ba kotsi 'me o ka lebisa boemong bo sa hlalosoang.
Etsa kopo ka lehlakoreng la seva
Joalokaha ho boletsoe ka holimo, bahlahisi ba Kubernetes ba ntse ba sebetsa ho kenya ts'ebetsong mohopolo apply
ho tswa kubectl
ho Kubernetes API. Maikutlo apply
e fumaneha ho Kubernetes 1.18 ka kubectl apply --server-side
kapa ka API ho sebelisa mokhoa PATCH
с content-type
application/apply-patch+YAML
.
Tlhokomeliso: JSON e boetse e sebetsa ka YAML, kahoo o ka romella litlhaloso joalo ka JSON leha ho le joalo
content-type
tla baapplication/apply-patch+yaml
.
Ntle le monahano oo kubectl
e fumaneha ho motho e mong le e mong ka API, apply
ka lehlakoreng la seva, e boloka tlaleho ea hore na ke mang ea ikarabellang bakeng sa masimo a boletsoeng, ka hona e lumella phihlello e sireletsehileng ea makhetlo a mangata bakeng sa tokiso ea eona e se nang likhohlano. Ka mantsoe a mang, haeba apply
ka lehlakoreng la seva e tla ata haholo, ho tla hlaha sebopeho se sireletsehileng sa bokahohle sa taolo ea lisebelisoa bakeng sa bareki ba fapaneng, mohlala, kubectl, Pulumi kapa Terraform, GitOps, hammoho le mangolo a ngotseng a sebelisa lilaebrari tsa bareki.
Liphello
Ke ts'epa hore kakaretso ena e khuts'oane ea mekhoa e fapaneng ea ho nchafatsa lisebelisoa ka lihlopha e bile thuso ho uena. Ho hotle ho tseba hore ha e sebetse feela khahlano le sebaka; hoa khonahala ho nchafatsa sesebelisoa ka ho sebelisa kopo, ho hlophisa, ho patch kapa ho khutlisa. Ntle le moo, ha e le hantle, mokhoa o mong le o mong o na le sebaka sa ona sa kopo. Bakeng sa liphetoho tsa athomo, ho molemo ho nkela sebaka; ho seng joalo, o lokela ho sebelisa patch ea strategic-merge ka kopo. Bonyane, ke lebelletse hore u utloisise hore u ke ke ua tšepa Google kapa StackOerflow ha u batla "kubernetes apply vs replace". Bonyane ho fihlela sehlooho sena se nkela karabo ea hona joale sebaka.
Source: www.habr.com