Mokhoa oa 3 o kopanya ho werf: ho isoa Kubernetes le Helm "ho li-steroids"

Seo rona (eseng rona feela) esale re se emetse nako e telele se etsahetse: werf, ts'ebeliso ea rona ea Open Source bakeng sa ho aha lits'ebetso le ho li isa ho Kubernetes, joale e ts'ehetsa ho sebelisa liphetoho ho sebelisa li-patches tse 3 tsa ho kopanya! Ho phaella ho sena, hoa khoneha ho sebelisa lisebelisoa tsa K8s tse seng li ntse li le teng ho hlahisa Helm ntle le ho tsosolosa lisebelisoa tsena.

Mokhoa oa 3 o kopanya ho werf: ho isoa Kubernetes le Helm "ho li-steroids"

Haeba e le khutšoanyane haholo, joale re beha WERF_THREE_WAY_MERGE=enabled - re fumana thomello “joalokaha ho kubectl apply", e tsamaellana le lits'ebetso tse teng tsa Helm 2 le tse ling tse nyane.

Empa ha re qaleng ka khopolo: hantle-ntle li-patches tsa 3-way-merge ke life, batho ba tlile joang ka mokhoa oa ho li hlahisa, hona ke hobane'ng ha li le bohlokoa lits'ebetsong tsa CI / CD tse nang le lisebelisoa tsa motheo tsa Kubernetes? 'Me ka mor'a moo, ha re boneng hore na 3-way-merge ke eng ho werf, hore na ke mekhoa efe e sebelisoang ke kamehla le mokhoa oa ho e laola.

Patch ea 3-way-merge ke eng?

Kahoo, ha re qaleng ka mosebetsi oa ho tsamaisa lisebelisoa tse hlalositsoeng ho YAML e bonts'a ho Kubernetes.

Ho sebetsa ka lisebelisoa, Kubernetes API e fana ka lits'ebetso tse latelang tsa mantlha: theha, patch, khutlisetsa le ho hlakola. Ho nahanoa hore ka thuso ea bona hoa hlokahala ho aha mokhoa o bonolo o tsoelang pele oa lisebelisoa ho sehlopha. Joang?

ho bectl litaelo tsa bohlokoa

Mokhoa oa pele oa ho laola lintho ho Kubernetes ke ho sebelisa litaelo tsa ho bectl ho theha, ho fetola le ho hlakola lintho tsena. Ka mantsoe a bonolo feela:

  • sehlopha kubectl run o ka tsamaisa Deployment kapa Mosebetsi:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • sehlopha kubectl scale - fetola palo ea likopi:
    kubectl scale --replicas=3 deployment/mysql
  • joalo-joalo.

Mokhoa ona o ka 'na oa bonahala o loketse qalong. Leha ho le joalo, ho na le mathata:

  1. Ho thata iketsetse.
  2. How bonahatsa tlhophiso ho Git? Joang ho hlahloba liphetoho tse etsahalang sehlopheng?
  3. Mokhoa oa ho fana ka ho ikatisa tlhophiso ha re qala bocha?
  4. ...

Ho hlakile hore mokhoa ona ha o lumellane hantle le ho boloka ts'ebeliso le lisebelisoa tsa motheo e le khoutu (IaC; kapa esita le GitOps joalo ka khetho ea sejoale-joale, ho fumana botumo ho Kubernetes ecosystem). Ka hona, litaelo tsena ha lia ka tsa fumana nts'etsopele e 'ngoe ho kubectl.

Theha, fumana, khutlisetsa le ho hlakola lits'ebetso

Ka tsa mathomo popo e bonolo: romela ponahalo ea tšebetso create kube api mme mohlodi o se o theilwe. Setšoantšo sa YAML sa manifesto se ka bolokoa ho Git mme sa etsoa ho sebelisoa taelo kubectl create -f manifest.yaml.

С tlosa hape e bonolo: nka sebaka se tšoanang manifest.yaml ho tloha Git ho ea sehlopheng kubectl delete -f manifest.yaml.

Ts'ebetso replace e u lumella ho fetola sebopeho sa lisebelisoa ka ho feletseng ka e ncha, ntle le ho tsosolosa mohloli. Sena se bolela hore pele o etsa phetoho ho sesebelisoa, hoa utloahala ho botsa mofuta oa hajoale ka ts'ebetso get, e fetole 'me u e ntlafatse ka ts'ebetso replace. kube apiserver e hahiloe kahare ho notlela ka tshepo le, haeba ka mor'a ho buuoa get ntho e fetohile, ebe tshebetso replace e ke ke ea sebetsa.

Ho boloka tlhophiso ho Git le ho e ntlafatsa o sebelisa sebaka, o hloka ho etsa ts'ebetso get, kopanya config ho tloha Git le seo re se amohetseng, 'me u phethe replace. Ka kamehla, kubectl e u lumella ho sebelisa taelo feela kubectl replace -f manifest.yamlkae manifest.yaml - e seng e lokisitsoe ka botlalo (ho rona, e kopantsoe) e hlokang ho kenngoa. Hoa fumaneha hore mosebelisi o hloka ho kenya tšebetsong lipontšo tsa ho kopanya, mme sena ha se taba e nyane ...

Hape ke habohlokoa ho hlokomela hore le hoja manifest.yaml mme e bolokiloe ho Git, re ke ke ra tseba esale pele hore na hoa hlokahala ho theha ntho kapa ho e nchafatsa - sena se tlameha ho etsoa ke software ea mosebelisi.

Kakaretso: na re ka etsa tlhahiso e tsoelang pele ho sebelisa feela ho theha, ho khutlisa le ho hlakola, ho netefatsa hore tlhophiso ea litšebeletso e bolokiloe ho Git hammoho le khoutu le CI/CD e bonolo?

Ka molao, re ka ... Bakeng sa sena o tla hloka ho kenya ts'ebetsong ts'ebetso ea ho kopanya li-manifestos le mofuta o itseng oa tlamo hore:

  • e lekola boteng ba ntho sehlopheng,
  • e etsa tlhahiso ea lisebelisoa tsa pele,
  • e ntlafatsa kapa ea e hlakola.

Ha o apdeita, ka kopo hlokomela seo mohloli o ka 'na oa fetoha ho tloha ho qetela get 'me u iketsetse taba ea ho notlela ka mokhoa o nang le tšepo - etsa liteko tsa ho nchafatsa khafetsa.

Leha ho le joalo, ke hobane'ng ha u khutlisetsa lebili ha kube-apiserver e fana ka mokhoa o mong oa ho ntlafatsa lisebelisoa: ts'ebetso patch, e imollang mosebelisi mathateng a mang a hlalositsoeng?

setsiba

Joale re fihla ho li-patches.

Li-patches ke mokhoa oa mantlha oa ho sebelisa liphetoho linthong tse teng ho Kubernetes. Tshebetso patch e sebetsa tjena:

  • mosebelisi oa kube-apiserver o hloka ho romella patch ka foromo ea JSON mme a hlalose ntho eo,
  • mme apiserver ka boeona e tla sebetsana le boemo ba hona joale ba ntho le ho e tlisa ka mokhoa o hlokahalang.

Ho notlela ka tšepo ha ho hlokahale tabeng ena. Ts'ebetso ena e hlakile ho feta ho khutlisa, le hoja qalong e ka bonahala e fapane.

Ka tsela ena:

  • ka ho sebedisa tshebetso create re theha ntho ho latela ponahatso e tsoang ho Git,
  • ka thuso delete - hlakola haeba ntho eo ha e sa hlokahala,
  • ka thuso patch - re fetola ntho, re e tlisa ka mokhoa o hlalositsoeng ho Git.

Leha ho le joalo, ho etsa sena, o hloka ho theha patch e nepahetseng!

Li-patches li sebetsa joang ho Helm 2: 2-way-merge

Ha o qala ho kenya tokollo, Helm e etsa opereishene create bakeng sa lisebelisoa tsa chate.

Ha u nchafatsa tokollo ea Helm bakeng sa sesebelisoa ka seng:

  • e nahana ka patch lipakeng tsa mofuta oa lisebelisoa ho tsoa chate e fetileng le mofuta oa hajoale oa chate,
  • e sebetsa patch ena.

Re tla bitsa patch ena 2-tsela e kopanya patch, hobane li-manifestos tse 2 li ameha pōpong ea eona:

  • ponahalo ea lisebelisoa ho tsoa tokollong e fetileng,
  • mohloli o bonahalang ho tsoa mohloding oa hajoale.

Ha o tlosa ts'ebetso delete ho kube apiserver e bitsoa lisebelisoa tse phatlalalitsoeng tokollong e fetileng, empa e sa phatlalatsoang ho ea hajoale.

Mokhoa oa 2 oa ho kopanya patch o na le bothata: o lebisa ho ha e hokahane le boemo ba 'nete ba sesebelisoa sehlopheng le ponahatso ea Git.

Setšoantšo sa bothata ka mohlala

  • Ho Git, chate e boloka pontšo eo tšimo e leng ho eona image Ho tsamaisa litaba ubuntu:18.04.
  • Mosebedisi ka kubectl edit fetola boleng ba tšimo ena ho ubuntu:19.04.
  • Ha o kenya hape chate ea Helm ha e hlahise patch, hobane tšimo image phetolelong e fetileng ea tokollo le chate ea hona joale li tšoana.
  • Ka mor'a ho romelloa bocha image mesaletsa ubuntu:19.04, le hoja chate e re ubuntu:18.04.

Re fumane desynchronization mme ra lahleheloa ke phatlalatso.

Mohloli o kopantsoeng ke eng?

Ka kakaretso e tletseng Ha ho khonehe ho fumana papali lipakeng tsa ponahatso ea lisebelisoa sehlopheng se sebetsang le manifesto ho tsoa ho Git. Hobane ho ponahatso ea 'nete ho ka ba le litlhaloso / li-label tsa lits'ebeletso, lijana tse ling le lintlha tse ling tse kentsoeng le ho tlosoa mohloling ka matla ke balaoli ba bang. Ha re khone ebile ha re batle ho boloka data ena ho Git. Leha ho le joalo, re batla hore likarolo tseo re li hlalositseng ka ho hlaka ho Git li nke litekanyetso tse nepahetseng ha re qala.

E hlaha e le kakaretso molao oa mohlodi o hokahaneng: ha o fana ka sesebelisoa, o ka fetola kapa oa hlakola feela likarolo tse boletsoeng ka ho hlaka ho manifest ho tsoa ho Git (kapa tse neng li boletsoe mofuteng o fetileng mme joale li tlositsoe).

3-tsela e kopanya patch

Pono e ka sehloohong 3-tsela e kopanya patch: re hlahisa patch lipakeng tsa mofuta oa ho qetela o sebelisitsoeng oa manifesto ho tsoa ho Git le mofuta oa sepheo sa manifesto ho tsoa ho Git, ho nahanoa ka mofuta oa hajoale oa manifesto ho tsoa sehlopheng se sebetsang. Patch e hlahisoang e tlameha ho ikamahanya le molao oa mohloli o hokahaneng:

  • masimo a macha a kenyellelitsoeng mofuta oa sepheo a eketsoa ho sebelisoa patch;
  • masimo a neng a ntse a le teng mofuteng oa ho qetela o sebelisitsoeng mme a le sieo ka har'a mofuta o reriloeng, a seta bocha ho sebelisoa patch;
  • masimo a mofuta oa hajoale oa ntho e fapaneng le mofuta o lebeletsoeng oa manifest a ntlafatsoa ho sebelisoa patch.

Ke ka molao-motheo ona moo e hlahisang li-patches kubectl apply:

  • mofuta oa ho qetela o sebelisitsoeng oa manifesto o bolokiloe tlhalosong ea ntho ka boeona,
  • target - e nkiloeng ho file e boletsoeng ea YAML,
  • ea hajoale e tsoa sehlopheng se mathang.

Kaha joale re se re hlophisitse khopolo, ke nako ea ho u bolella seo re se entseng nakong ea ntoa.

Ho kenya liphetoho ho werf

Pejana, werf, joalo ka Helm 2, e ne e sebelisa li-patches tsa 2-way-merge.

Lokisa patch

E le hore u fetohele mofuteng o mocha oa li-patches - 3-way-merge - mohato oa pele re hlahisitse seo ho thoeng ke lokisa maqeba.

Ha o tsamaisa, ho sebelisoa patch e tloaelehileng ea 2-way-merge, empa werf e boetse e hlahisa patch e tla hokahanya boemo ba 'nete ba sesebelisoa le se ngotsoeng ho Git (patch e joalo e entsoe ho sebelisoa molao o ts'oanang oa lisebelisoa o hlalositsoeng ka holimo) .

Haeba desynchronization e etsahala, qetellong ea ho romelloa mosebelisi o fumana TLHOKOMELISO e nang le molaetsa o lumellanang le patch e lokelang ho sebelisoa ho tlisa sesebelisoa ho foromo e lumellanang. Patch ena e boetse e ngotsoe ka tlhaloso e khethehileng werf.io/repair-patch. Ho nahanoa hore matsoho a mosebedisi сам e tla sebelisa patch ena: werf e ke ke ea e sebelisa ho hang.

Ho hlahisa li-patches tsa ho lokisa ke mohato oa nakoana o u lumellang hore u leke ho thehoa ha li-patches ho latela molao-motheo oa 3-way-merge, empa u se ke ua sebelisa li-patches tsena ka bohona. Hajoale, mokhoa ona oa ho sebetsa o nolofalitsoe ke kamehla.

3-way-merge patch bakeng sa likhatiso tse ncha feela

Ho qala ka la 1 Tšitoe 2019, mefuta ea beta le alpha ea werf ea qala tlola sebelisa li-patches tse felletseng tsa 3-way-merge ho kenya liphetoho ho lintlafatso tse ncha tsa Helm tse phatlalalitsoeng ka werf. Litokollo tse seng li ntse li le teng li tla tsoelapele ho sebelisa mokhoa oa 2-way-merge + to repair patches.

Mokhoa ona oa ts'ebetso o ka etsoa ka mokhoa o hlakileng ka ho seta WERF_THREE_WAY_MERGE_MODE=onlyNewReleases jwale.

mantsoe: tšobotsi e hlahile ka werf holim'a litokollo tse 'maloa: mocha oa alpha o ile oa lokisoa ka mofuta v1.0.5-alpha.19, le mocha oa beta - ka v1.0.4-beta.20.

3-way-merge patch bakeng sa litokollo tsohle

Ho qala ka la 15 Tšitoe, 2019, mefuta ea beta le alpha ea werf e qala ho sebelisa lipache tse felletseng tsa 3-way-merge ka mokhoa o ikhethileng ho kenya liphetoho likhatisong tsohle.

Mokhoa ona oa ts'ebetso o ka etsoa ka mokhoa o hlakileng ka ho seta WERF_THREE_WAY_MERGE_MODE=enabled jwale.

Seo u lokelang ho se etsa ka resource autoscaling?

Ho na le mefuta e 2 ea autoscaling ho Kubernetes: HPA (e rapameng) le VPA (e theohileng).

Horizontal e khetha ka bo eona palo ea likopi, tse otlolohileng - palo ea lisebelisoa. Ka bobeli palo ea likopi le litlhoko tsa lisebelisoa li hlalositsoe ho ponahalo ea lisebelisoa (sheba Resource Manifest). spec.replicas kapa spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и другие).

Bothata: haeba mosebelisi a hlophisa sesebelisoa ka chate e le hore e hlakise boleng bo itseng ba lisebelisoa kapa li-replicas le li-autoscaler li nolofalloa bakeng sa sesebelisoa sena, joale ka phepelo e 'ngoe le e 'ngoe, werf e tla khutlisetsa boleng bona ho se ngotsoeng ho chate. .

Ho na le litharollo tse peli tsa bothata. Ho qala, ho molemo ho qoba ho hlakisa ka ho hlaka boleng ba autoscaled ho manifesto ea chate. Haeba khetho ena e sa tšoanelehe ka lebaka le itseng (mohlala, hobane ho le bonolo ho beha meeli ea mantlha ea lisebelisoa le palo ea likopi ka chate), werf e fana ka litlhaloso tse latelang:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

Haeba tlhaloso e joalo e le teng, werf e ke ke ea tsosolosa litekanyetso tse tsamaellanang sebakeng se seng le se seng, empa e tla li beha feela ha mohloli o qala.

Bakeng sa lintlha tse ling, sheba litokomane tsa morero bakeng sa HPA и VPA.

Thibela tšebeliso ea 3-way-merge patch

Mosebelisi hajoale a ka thibela ts'ebeliso ea li-patches tse ncha ho werf a sebelisa mofuta o fapaneng oa tikoloho WERF_THREE_WAY_MERGE_MODE=disabled. Leha ho le joalo, ho qala Ho tloha ka la 1 Hlakubele 2020, thibelo ena ha e sa tla hlola e sebetsa. 'me ho tla khoneha ho sebelisa li-patches tsa 3-way-merge.

Kamohelo ea lisebelisoa ho werf

Ho tseba mokhoa oa ho sebelisa liphetoho ka li-patches tsa 3-way-merge ho re lumelletse ho kenya ts'ebetsong hang-hang tšobotsi e kang ho amohela lisebelisoa tse teng sehlopheng sa tokollo ea Helm.

Helm 2 e na le bothata: o ke ke oa eketsa sesebelisoa ho lipontšo tsa chate tse seng li le teng sehlopheng ntle le ho nchafatsa sesebelisoa sena ho tloha qalong (bona. #6031, #3275). Re rutile werf ho amohela lisebelisoa tse teng bakeng sa ho lokolloa. Ho etsa sena, o hloka ho kenya annotation ho mofuta oa hajoale oa sesebelisoa ho tsoa sehlopheng se sebetsang (mohlala, ho sebelisa kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

Hona joale mohloli o hloka ho hlalosoa ka chate 'me nakong e tlang ha werf e sebelisa tokollo e nang le lebitso le nepahetseng, mohloli o teng o tla amoheloa tokollong ena mme o lule o le taolong ea ona. Ho feta moo, ts'ebetsong ea ho amohela mohloli bakeng sa ho lokolloa, werf e tla tlisa boemo ba hona joale ba mohloli ho tloha sehlopheng se sebetsang ho ea sebakeng se hlalositsoeng ka chate, ho sebelisa li-patches tse tšoanang tsa 3-way-merge le molao oa mohloli o lumellanang.

mantsoe: ho beha WERF_THREE_WAY_MERGE_MODE ha e ame ho amoheloa ha lisebelisoa - tabeng ea ho amoheloa, patch ea 3-way-merge e lula e sebelisoa.

Lintlha - ho litokomane.

Liqeto le merero ea nako e tlang

Ke tšepa hore ka mor'a sengoloa sena ho hlakile haholoanyane hore na li-patches tsa 3-way-merge ke eng le hore na ke hobane'ng ha li tlile ho tsona. Ho latela pono e sebetsang ea nts'etsopele ea projeke ea werf, ts'ebetsong ea bona e bile mohato o mong oa ho ntlafatsa phano e kang ea Helm. Hona joale o ka lebala ka mathata a ho lumellana ha litlhophiso tse atisang ho hlaha ha u sebelisa Helm 2. Ka nako e ts'oanang, karolo e ncha ea bohlokoa ea ho amohela mehloli ea Kubernetes e seng e ntse e jarollotsoe e ile ea eketsoa ho lokolloa ha Helm.

Ho ntse ho e-na le mathata le liphephetso tse amanang le li-deployments tse kang Helm, tse kang ho sebelisa li-template tsa Go, tseo re tla tsoelapele ho li rarolla.

Lintlha tse mabapi le mekhoa ea ntlafatso ea lisebelisoa le ho amoheloa li ka fumanoa hape ho leqephe lena la litokomane.

Helm 3

E tšoaneloa ke tlhokomelo e khethehileng lokolloa ka tsatsi le leng feela phetolelo e ncha e kholo ea Helm - v3 - e sebelisang li-patches tsa 3-way-merge le ho tlosa Tiller. Phetolelo e ncha ea Helm e hloka ho falla lisebelisoa tse teng ho li fetolela ho mofuta o mocha oa polokelo.

Werf, bakeng sa eona, hajoale e se e tlohetse ho sebelisa Tiller, e fetohetse ho 3-way-merge mme ea eketsoa. haholo ho feta, ha e ntse e lumellana le lisebelisoa tsa Helm 2 tse seng li ntse li le teng (ha ho na litokomane tsa ho falla tse lokelang ho etsoa). Ka hona, ho fihlela werf e fetohela Helm 3, basebelisi ba werf ha ba lahleheloe ke melemo ea mantlha ea Helm 3 holim'a Helm 2 (werf le eona e na le eona).

Leha ho le joalo, phetoho ea werf ho Helm 3 codebase e ke ke ea qojoa 'me e tla etsahala haufinyane. Mohlomong ena e tla ba werf 1.1 kapa werf 1.2 (hajoale, mofuta oa mantlha oa werf ke 1.0; bakeng sa tlhaiso-leseling e batsi mabapi le sesebelisoa sa phetolelo ea werf, bona. mona). Nakong ena, Helm 3 e tla ba le nako ea ho tsitsa.

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso