3-njira kuphatikiza ku werf: kutumizidwa ku Kubernetes ndi Helm "pa steroids"

Zomwe ife (osati ife tokha) takhala tikudikirira kwa nthawi yayitali zidachitika: werf, chida chathu Open Source pomanga mapulogalamu ndikuwapereka ku Kubernetes, tsopano amathandizira kugwiritsa ntchito zosintha pogwiritsa ntchito njira zitatu zophatikizira! Kuphatikiza pa izi, ndizotheka kutengera zida za K3s zomwe zilipo kale kutulutsa Helm popanda kumanganso zinthuzi.

3-njira kuphatikiza ku werf: kutumizidwa ku Kubernetes ndi Helm "pa steroids"

Ngati ili lalifupi kwambiri, ndiye timayika WERF_THREE_WAY_MERGE=enabled - timatumizidwa "monga mu kubectl apply", yogwirizana ndi kukhazikitsa kwa Helm 2 komwe kulipo komanso zochulukirapo.

Koma tiyeni tiyambire ndi chiphunzitsocho: ndi zigamba zotani za 3-way-merge, anthu adabwera bwanji ndi njira yopangira, ndipo chifukwa chiyani ali ofunikira munjira za CI / CD zokhala ndi maziko a Kubernetes? Ndipo zitatha izi, tiyeni tiwone zomwe 3-way-merge ili mu werf, ndi mitundu iti yomwe imagwiritsidwa ntchito mosakhazikika komanso momwe mungayendetsere.

Kodi 3-way-merge patch ndi chiyani?

Chifukwa chake, tiyeni tiyambe ndi ntchito yotulutsa zomwe zafotokozedwa mu YAML zikuwonekera ku Kubernetes.

Kuti mugwire ntchito ndi zothandizira, Kubernetes API imapereka ntchito zotsatirazi: pangani, pangani, sinthani ndikuchotsa. Zimaganiziridwa kuti ndi chithandizo chawo m'pofunika kupanga njira yabwino yopititsira patsogolo zinthu zamagulu. Bwanji?

kubectl imperative commands

Njira yoyamba yoyendetsera zinthu ku Kubernetes ndikugwiritsa ntchito malamulo ofunikira a kubectl kupanga, kusintha, ndikuchotsa zinthuzo. Mwachidule:

  • gulu kubectl run mutha kuyendetsa Deployment kapena Job:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • gulu kubectl scale - sinthani kuchuluka kwa zofananira:
    kubectl scale --replicas=3 deployment/mysql
  • ndi zina zotero.

Njira imeneyi ingaoneke ngati yabwino mutangoiona koyamba. Komabe, pali mavuto:

  1. Ndizovuta zokha.
  2. Kodi onetsani kasinthidwe mu Git? Momwe mungawunikire zosintha zomwe zikuchitika pagulu?
  3. Momwe mungaperekere kuberekana masinthidwe pakuyambiranso?
  4. ...

Zikuwonekeratu kuti njirayi sikugwirizana bwino ndi kusunga ntchito ndi zomangamanga monga code (IaC; kapena ngakhale GitOps ngati njira yamakono, kutchuka mu Kubernetes ecosystem). Chifukwa chake, malamulo awa sanalandire chitukuko china mu kubectl.

Pangani, pezani, sinthani ndikuchotsa ntchito

Ndi pulayimale chilengedwe ndizosavuta: tumizani chiwonetserochi ku ntchito create kube api ndipo gwero lapangidwa. Kuyimira kwa YAML kwa chiwonetserochi kumatha kusungidwa mu Git ndikupangidwa pogwiritsa ntchito lamulo kubectl create -f manifest.yaml.

Π‘ Kuchotsa komanso zosavuta: m'malo zomwezo manifest.yaml kuchokera ku Git kupita ku timu kubectl delete -f manifest.yaml.

Ntchito replace kumakupatsani mwayi wosinthiratu kasinthidwe kazinthu ndi zatsopano, popanda kubwezeretsanso gwero. Izi zikutanthauza kuti musanasinthe gwero, ndizomveka kufunsa mtundu waposachedwa ndi ntchitoyo get, sinthani ndikusintha ndikugwiritsa ntchito replace. kube apiserver imamangidwa kutseka kwachiyembekezo ndipo, ngati pambuyo opaleshoni get chinthu chasintha, ndiye ntchito replace sizingagwire ntchito.

Kuti musunge kasinthidwe mu Git ndikuwongolera pogwiritsa ntchito m'malo, muyenera kuchita ntchitoyi get, phatikizani config kuchokera ku Git ndi zomwe talandira, ndikuchita replace. Mwachikhazikitso, kubectl imangokulolani kugwiritsa ntchito lamulo kubectl replace -f manifest.yamlkumene manifest.yaml - chiwonetsero chokonzekera kale (kwa ife, chophatikizidwa) chomwe chiyenera kukhazikitsidwa. Zikuwoneka kuti wogwiritsa ntchito akuyenera kukhazikitsa mawonetseredwe ophatikiza, ndipo iyi si nkhani yaying'ono ...

Ndikoyeneranso kuzindikira kuti ngakhale manifest.yaml ndipo imasungidwa ku Git, sitingadziwe pasadakhale ngati kuli kofunikira kupanga chinthu kapena kuchisintha - izi ziyenera kuchitidwa ndi pulogalamu ya ogwiritsa ntchito.

Chiwerengero: tikhoza kupanga kutulutsa kosalekeza pongogwiritsa ntchito kupanga, m'malo ndi kufufuta, kuwonetsetsa kuti kasinthidwe kamangidwe kasungidwa mu Git limodzi ndi code komanso CI/CD yabwino?

M'malo mwake, titha ... Kwa ichi muyenera kukhazikitsa ntchito yophatikiza Manifestos ndi mitundu ina yomangiriza kuti:

  • amayang'ana kukhalapo kwa chinthu m'gulu,
  • imagwira ntchito zoyambira,
  • zosintha kapena kuzichotsa.

Mukamasintha, chonde dziwani kuti gwero mwina zasintha kuyambira kalekale get ndikudzigwira nokha nkhani yotseka mwachiyembekezo - yesetsani mobwerezabwereza.

Komabe, bwanji kuyambitsanso gudumu pomwe kube-apiserver imapereka njira ina yosinthira zinthu: ntchitoyo patch, zomwe zimamasula wogwiritsa ntchito zina mwazovuta zomwe zafotokozedwa?

Patch

Tsopano tifika pazigamba.

Zigamba ndiye njira yoyamba yosinthira zinthu zomwe zilipo ku Kubernetes. Ntchito patch zimagwira ntchito motere:

  • wogwiritsa ntchito kube-apiserver akuyenera kutumiza chigamba mu mawonekedwe a JSON ndikulongosola chinthucho,
  • ndipo apiserver yokha idzachita ndi momwe zinthu zilili pano ndikuzibweretsa ku mawonekedwe ofunikira.

Kutseka mwachidwi sikofunikira pankhaniyi. Opaleshoniyi ndi yodziwika bwino kuposa m'malo, ngakhale poyamba ingawoneke mosiyana.

Motero:

  • pogwiritsa ntchito opareshoni create timapanga chinthu molingana ndi chiwonetsero cha Git,
  • ndi thandizo delete - chotsani ngati chinthucho sichikufunikanso,
  • ndi thandizo patch - timasintha chinthucho, ndikuchibweretsa ku mawonekedwe omwe akufotokozedwa mu Git.

Komabe, kuti muchite izi, muyenera kupanga chigamba cholondola!

Momwe zigamba zimagwirira ntchito mu Helm 2: 2-way-merge

Mukakhazikitsa koyamba kumasulidwa, Helm imagwira ntchitoyo create kwa zothandizira ma chart.

Mukakonza kutulutsidwa kwa Helm pachinthu chilichonse:

  • imayang'ana chigamba pakati pa mtundu wazinthu kuchokera ku tchati yam'mbuyomu ndi mtundu wamakono wamatchati,
  • imagwiritsa ntchito chigamba ichi.

Tichitcha chigamba ichi 2-njira kuphatikiza chigamba, chifukwa ma manifesto a 2 akuphatikizidwa pakupanga kwake:

  • chiwonetsero chazomwe zatulutsidwa kale,
  • gwero lowonekera kuchokera kuzinthu zamakono.

Pochotsa ntchito delete mu kube apiserver imayitanidwa pazinthu zomwe zidalengezedwa pakutulutsidwa koyambirira, koma zomwe sizinatchulidwe muzomwe zilipo.

Njira ya 2 yophatikizira chigamba ili ndi vuto: imatsogolera ku sagwirizana ndi momwe zinthu zilili mgululi komanso chiwonetsero cha Git.

Kufotokozera vuto ndi chitsanzo

  • Ku Git, tchati chimasunga chiwonetsero chomwe gawolo image Ntchito yotumiza anthu ubuntu:18.04.
  • Wogwiritsa kudzera kubectl edit adasintha mtengo wamundawu kukhala ubuntu:19.04.
  • Mukayikanso tchati cha Helm sichimapanga chigamba, chifukwa munda image mu mtundu wapita wa kumasulidwa ndi mu tchati panopa ndi chimodzimodzi.
  • Pambuyo potumizanso image zotsalira ubuntu:19.04, ngakhale tchaticho chimati ubuntu:18.04.

Tinali ndi desynchronization ndipo tinataya kulengeza.

Kodi gwero lolumikizidwa ndi chiyani?

Nthawi zambiri wathunthu Ndikosatheka kupeza machesi pakati pa gwero lachiwonetsero mumagulu othamanga ndi chiwonetsero cha Git. Chifukwa mu chiwonetsero chenicheni pakhoza kukhala zofotokozera / zolemba zautumiki, zotengera zina ndi zina zomwe zimawonjezedwa ndikuchotsedwa pazithandizo ndi owongolera ena. Sitingathe ndipo sitikufuna kusunga izi ku Git. Komabe, tikufuna kuti magawo omwe tidawafotokozera mwatsatanetsatane mu Git atengere zofunikira pakutulutsidwa.

Zikukhalira ambiri synchronized resource lamulo: potulutsa zothandizira, mutha kusintha kapena kuchotsa magawo okhawo omwe afotokozedwa mwatsatanetsatane mu manifesto kuchokera ku Git (kapena adanenedwa kale ndipo tsopano achotsedwa).

3-njira kuphatikiza chigamba

Lingaliro lalikulu 3-njira kuphatikiza chigamba: timapanga chigamba pakati pa mawonekedwe omaliza omwe adagwiritsidwa ntchito kuchokera ku Git ndi mtundu womwe tikufuna wa chiwonetserocho kuchokera ku Git, poganizira momwe chiwonetserochi chiliri kuchokera pagulu lomwe likuyenda. Chotsatiracho chikuyenera kutsatira lamulo lolumikizidwa:

  • minda yatsopano yowonjezeredwa ku mtundu womwe mukufuna ikuwonjezedwa pogwiritsa ntchito chigamba;
  • minda yomwe inalipo kale mu mtundu womaliza womwe wagwiritsidwa ntchito ndipo zomwe sizinalipo mu mtundu womwe mukufuna zimakonzedwanso pogwiritsa ntchito chigamba;
  • madera omwe ali mumtundu wapano wa chinthu chomwe chimasiyana ndi mtundu womwe mukufuna wa chiwonetserochi amasinthidwa pogwiritsa ntchito chigambacho.

Ndi pa mfundo imeneyi kuti amapanga zigamba kubectl apply:

  • mawonekedwe omaliza a chiwonetserochi amasungidwa muzofotokozera za chinthucho,
  • target - yotengedwa pa fayilo ya YAML yotchulidwa,
  • yomwe ilipo tsopano ikuchokera kumagulu othamanga.

Tsopano popeza takonza chiphunzitsocho, ndi nthawi yoti tikuuzeni zomwe tidachita mu werf.

Kuyika zosintha pa werf

M'mbuyomu, werf, ngati Helm 2, amagwiritsa ntchito zigamba ziwiri.

Konzani chigamba

Kuti musinthe ku mtundu watsopano wa zigamba - 3-way-merge - sitepe yoyamba tidayambitsa zomwe zimatchedwa kukonza zigamba.

Mukatumiza, chigamba chodziwika bwino cha 2-way-merge chimagwiritsidwa ntchito, koma werf imapanganso chigamba chomwe chingalumikizane ndi zomwe zidalembedwa mu Git (chigamba chotere chimapangidwa pogwiritsa ntchito lamulo lofananira lomwe lafotokozedwa pamwambapa) .

Ngati desynchronization ikuchitika, kumapeto kwa kutumiza wogwiritsa ntchito amalandira CHENJEZO ndi uthenga wogwirizana ndi chigamba chomwe chiyenera kugwiritsidwa ntchito kuti chibweretse gwero ku mawonekedwe ogwirizanitsa. Chigambachi chimalembedwanso m'mawu apadera werf.io/repair-patch. Zimaganiziridwa kuti manja a wosuta сам idzagwiritsa ntchito chigamba ichi: werf sichidzayigwiritsa ntchito konse.

Kupanga zigamba zokonzanso ndi njira yakanthawi yomwe imakupatsani mwayi kuyesa kupangidwa kwa zigamba potengera mfundo ya 3-way-merge, koma osagwiritsa ntchito izi zokha. Pakadali pano, njira iyi yogwiritsira ntchito imayatsidwa mwachisawawa.

3-way-merge chigamba chongotulutsa chatsopano

Kuyambira pa Disembala 1, 2019, mitundu ya beta ndi alpha ya werf iyamba mosalephera gwiritsani ntchito zigamba zonse za 3-way-merge kuti mugwiritse ntchito zosintha pazotulutsa zatsopano za Helm zomwe zidatulutsidwa kudzera mu werf. Zotulutsa zomwe zilipo zipitiliza kugwiritsa ntchito njira ya 2-way-merge + kukonza zigamba.

Njira yogwiritsira ntchito iyi ikhoza kuthandizidwa momveka bwino pokhazikitsa WERF_THREE_WAY_MERGE_MODE=onlyNewReleases tsopano.

ndemanga: gawoli lidawonekera mu werf pazotulutsa zingapo: mu njira ya alpha idakonzeka ndi mtundu v1.0.5-alpha.19, ndi njira ya beta - ndi v1.0.4-beta.20.

3-way-merge chigamba pazotulutsa zonse

Kuyambira pa Disembala 15, 2019, mitundu ya beta ndi alpha ya werf imayamba kugwiritsa ntchito zigamba za 3-way-merge mwachisawawa kuti zisinthe pazotulutsa zonse.

Njira yogwiritsira ntchito iyi ikhoza kuthandizidwa momveka bwino pokhazikitsa WERF_THREE_WAY_MERGE_MODE=enabled tsopano.

Zoyenera kuchita ndi resource autoscaling?

Pali mitundu iwiri ya autoscaling ku Kubernetes: HPA (yopingasa) ndi VPA (yoyima).

Chopingasa chimasankha zokha kuchuluka kwa zofananira, ofukula - kuchuluka kwazinthu. Chiwerengero cha zofananira ndi zofunikira zonse zafotokozedwa mu chiwonetsero chazinthu (onani Resource Manifest). spec.replicas kapena spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory ΠΈ ena).

Vuto: ngati wogwiritsa ntchito akonza gwero mu tchati kuti lifotokozere zina mwazinthu zomwe zimagwiritsidwa ntchito kapena zofananira ndipo ma autoscalers amayatsidwa pazithandizozi, ndiye kuti pakutumiza kulikonse, werf adzakhazikitsanso izi kuzomwe zalembedwa mu chiwonetsero cha tchati. .

Pali njira ziwiri zothetsera vutoli. Poyamba, ndibwino kupewa kufotokoza momveka bwino zamtundu wa autoscaled mu chiwonetsero chazithunzi. Ngati njira iyi si yoyenera pazifukwa zina (mwachitsanzo, chifukwa ndikosavuta kukhazikitsa malire azinthu zoyambira ndi kuchuluka kwa zofananira pa tchati), ndiye kuti werf imapereka ndemanga zotsatirazi:

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

Ngati zofotokozera zotere zilipo, werf sidzakhazikitsanso zikhalidwe zofananira pakutumizidwa kulikonse, koma zimangozikhazikitsa pomwe zidazo zidapangidwa koyambirira.

Kuti mudziwe zambiri, onani zolemba za polojekitiyi HPA ΠΈ VPA.

Letsani kugwiritsa ntchito 3-way-merge patch

Wogwiritsa ntchito pano akhoza kuletsa kugwiritsa ntchito zigamba zatsopano mu werf pogwiritsa ntchito kusintha kwa chilengedwe WERF_THREE_WAY_MERGE_MODE=disabled. Komabe, kuyambira Kuyambira pa Marichi 1, 2020, chiletsochi sichigwiranso ntchito. ndipo zidzatheka kugwiritsa ntchito zigamba za 3-way-merge.

Kukhazikitsidwa kwazinthu mu werf

Kudziwa bwino njira yogwiritsira ntchito zosintha ndi 3-way-merge patches kunatilola kuti tigwiritse ntchito nthawi yomweyo zinthu monga kutengera zinthu zomwe zili mgululi kumasulidwa kwa Helm.

Helm 2 ili ndi vuto: simungawonjezere gwero paziwonetsero zomwe zilipo kale mgululi popanda kukonzanso chidachi kuyambira poyambira (onani. #6031, #3275). Tinaphunzitsa werf kuvomereza zothandizira zomwe zilipo kuti amasulidwe. Kuti muchite izi, muyenera kuyika mawu ofotokozera pamtundu waposachedwa wazomwe mukugwiritsa ntchito (mwachitsanzo, kugwiritsa ntchito kubectl edit):

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

Tsopano gwero liyenera kufotokozedwa mu tchati ndipo nthawi ina pamene werf adzatumiza kumasulidwa ndi dzina loyenera, zomwe zilipo zidzalandiridwa ndikumasulidwa uku ndikukhalabe pansi pa ulamuliro wake. Kuphatikiza apo, povomereza gwero kuti amasulidwe, werf ibweretsa momwe zinthu ziliri pano kuchokera pagulu lomwe likuyenda kupita ku boma lomwe lafotokozedwa mu tchati, pogwiritsa ntchito zigamba zomwezo za 3-way-merge ndi lamulo lolumikizana.

ndemanga: kukhazikitsa WERF_THREE_WAY_MERGE_MODE sizikhudza kukhazikitsidwa kwa zinthu - potengera kulera, chigamba cha 3-way-merge chimagwiritsidwa ntchito nthawi zonse.

Tsatanetsatane - mu zolemba.

Mapeto ndi mapulani amtsogolo

Ndikukhulupirira kuti pambuyo pa nkhaniyi zadziwika bwino zomwe zigamba za 3-way-merge ndi chifukwa chake zidabwera kwa iwo. Kuchokera pamalingaliro othandiza a chitukuko cha polojekiti ya werf, kukhazikitsidwa kwawo kunali sitepe ina yopititsa patsogolo kutumizidwa kwa Helm ngati. Tsopano mutha kuyiwala za zovuta ndi kalumikizidwe kasinthidwe, komwe kaΕ΅irikaΕ΅iri kanayamba mukamagwiritsa ntchito Helm 2. Nthawi yomweyo, chinthu chatsopano chothandizira kugwiritsa ntchito zida za Kubernetes zomwe zidatsitsidwa kale zidawonjezedwa pakumasulidwa kwa Helm.

Palinso zovuta ndi zovuta zomwe zimagwiritsidwa ntchito ngati Helm, monga kugwiritsa ntchito ma templates a Go, zomwe tidzapitiriza kuthana nazo.

Zambiri zokhudzana ndi njira zosinthira zida ndi kukhazikitsidwa zitha kupezekanso pa tsamba lolemba ili.

Mtsinje 3

Zoyenera kuzindikiridwa mwapadera kumasulidwa tsiku lina buku latsopano lalikulu la Helm - v3 - lomwe limagwiritsanso ntchito zigamba za 3-way-merge ndikuchotsa Tiller. Mtundu watsopano wa Helm umafunika kusamuka makhazikitsidwe omwe alipo kuti awasinthe kukhala mawonekedwe atsopano osungira.

Werf, kumbali yake, adasiya kugwiritsa ntchito Tiller, kusinthira ku 3-way-merge ndikuwonjezera. zambiri, pomwe ikugwirizana ndi kukhazikitsa kwa Helm 2 komwe kulipo (palibe zolembera zosamukira zomwe ziyenera kuchitidwa). Chifukwa chake, mpaka werf asinthira ku Helm 3, ogwiritsa ntchito ma werf samataya zabwino zazikulu za Helm 3 pa Helm 2 (werf ilinso nawo).

Komabe, kusintha kwa werf kupita ku Helm 3 codebase sikungapeweke ndipo zidzachitika posachedwa. Mwina izi zidzakhala werf 1.1 kapena werf 1.2 (pakadali pano, mtundu waukulu wa werf ndi 1.0; kuti mumve zambiri za chipangizo chosinthira werf, onani apa). Panthawi imeneyi, Helm 3 adzakhala ndi nthawi yokhazikika.

PS

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga