Haɗin 3-hanyar zuwa werf: tura zuwa Kubernetes tare da Helm "akan steroids"

Abin da muka dade (ba mu kadai) muke jira ba ya faru: wuf, Buɗewar tushen mu don gina aikace-aikace da isar da su zuwa Kubernetes, yanzu yana goyan bayan yin amfani da canje-canje ta amfani da facin haɗin kai na 3-hanyar! Baya ga wannan, yana yiwuwa a yi amfani da albarkatun K8s da ke akwai a cikin sakin Helm ba tare da sake gina waɗannan albarkatun ba.

Haɗin 3-hanyar zuwa werf: tura zuwa Kubernetes tare da Helm "akan steroids"

Idan gajere ne, sai mu sanya WERF_THREE_WAY_MERGE=enabled - muna samun tura" kamar yadda a cikin kubectl apply", mai jituwa tare da shigarwar Helm 2 na yanzu har ma da ɗan ƙari.

Amma bari mu fara da ka'idar: menene ainihin faci-hanyoyin-hanyoyi 3, ta yaya mutane suka fito da tsarin samar da su, kuma me yasa suke da mahimmanci a cikin tsarin CI / CD tare da tushen tushen Kubernetes? Kuma bayan haka, bari mu ga abin da 3-way-merge ke cikin werf, waɗanne hanyoyin da ake amfani da su ta hanyar tsoho da yadda za a sarrafa shi.

Menene facin-hanyoyi 3?

Don haka, bari mu fara da aikin fitar da albarkatun da aka bayyana a cikin YAML bayyana cikin Kubernetes.

Don aiki tare da albarkatu, Kubernetes API yana ba da ayyuka na asali masu zuwa: ƙirƙira, faci, maye gurbin da sharewa. Ana tsammanin cewa tare da taimakonsu ya zama dole don gina ingantaccen ci gaba da jigilar albarkatu zuwa gungu. yaya?

kubectl umarni masu mahimmanci

Hanyar farko don sarrafa abubuwa a cikin Kubernetes shine amfani da kubectl umarni masu mahimmanci don ƙirƙira, gyara, da share waɗannan abubuwan. A sauƙaƙe:

  • tawaga kubectl run za ku iya gudanar da Deployment ko Aiki:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • tawaga kubectl scale - canza adadin kwafi:
    kubectl scale --replicas=3 deployment/mysql
  • da sauransu.

Wannan hanya na iya zama kamar dacewa a kallon farko. Duk da haka, akwai matsaloli:

  1. Yana da wuya aiki da kai.
  2. Yadda nuna sanyi in Git? Yadda za a duba canje-canjen da ke faruwa ga gungu?
  3. Yadda ake bayarwa sake haifuwa saituna akan sake farawa?
  4. ...

A bayyane yake cewa wannan hanyar ba ta dace da adana aikace-aikace da ababen more rayuwa a matsayin lamba (IaC; ko ma GitOps a matsayin zaɓi na zamani, samun shahara a cikin yanayin yanayin Kubernetes). Saboda haka, waɗannan umarnin ba su sami ƙarin haɓakawa a kubectl ba.

Ƙirƙiri, samu, maye gurbin kuma share ayyukan

Tare da primary halitta abu ne mai sauƙi: aika da bayanin zuwa aiki create kube api kuma an ƙirƙiri albarkatun. Ana iya adana wakilcin YAML na bayyanar a Git kuma an ƙirƙira su ta amfani da umarnin kubectl create -f manifest.yaml.

С cirewa kuma mai sauƙi: musanya guda ɗaya manifest.yaml daga Git zuwa tawagar kubectl delete -f manifest.yaml.

Ayyuka replace yana ba ku damar maye gurbin tsarin kayan aiki gaba ɗaya tare da sabo, ba tare da sake ƙirƙirar albarkatun ba. Wannan yana nufin cewa kafin yin canji zuwa kayan aiki, yana da ma'ana don tambayar sigar yanzu tare da aiki get, canza shi kuma sabunta shi tare da aiki replace. an gina kube apiserver a ciki kyakkyawan zato kuma, idan bayan tiyata get abu ya canza, sai aiki replace ba zai yi aiki ba.

Don adana saitin a Git kuma sabunta shi ta amfani da maye gurbin, kuna buƙatar yin aikin get, haɗa saitin daga Git tare da abin da muka karɓa, kuma ku aiwatar replace. Ta hanyar tsoho, kubectl kawai yana ba ku damar amfani da umarnin kubectl replace -f manifest.yamlinda manifest.yaml - an riga an shirya cikakken (a cikin yanayinmu, hade) bayyananne wanda ke buƙatar shigar dashi. Ya bayyana cewa mai amfani yana buƙatar aiwatar da haɗe-haɗe, kuma wannan ba ƙaramin abu bane ...

Har ila yau, ya kamata a lura cewa ko da yake manifest.yaml kuma an adana shi a cikin Git, ba za mu iya sani ba a gaba ko yana da mahimmanci don ƙirƙirar abu ko sabunta shi - dole ne a yi wannan ta software mai amfani.

Jimlar: za mu iya gina ci gaba na gaba kawai ta yin amfani da ƙirƙira, maye gurbin da sharewa, tabbatar da cewa an adana saitunan kayan aikin a Git tare da lambar da CI / CD mai dacewa?

A ka'ida, za mu iya ... Don wannan kuna buƙatar aiwatar da aikin haɗin gwiwa manifestos da wani nau'i na ɗaure cewa:

  • yana duba kasancewar wani abu a cikin gungu,
  • ya fara ƙirƙirar albarkatun ƙasa,
  • sabunta ko share shi.

Lokacin da ake ɗaukakawa, da fatan za a lura cewa albarkatun mai yiwuwa sun canza tun daga karshe get kuma sarrafa lamarin ta atomatik ta atomatik - yi ƙoƙarin sabuntawa akai-akai.

Koyaya, me yasa sake haɓaka dabaran lokacin da kube-apiserver yana ba da wata hanyar sabunta albarkatun: aikin patch, wanda ke sauƙaƙa wa mai amfani da wasu matsalolin da aka kwatanta?

patch

Yanzu muna zuwa faci.

Faci shine hanya ta farko don amfani da canje-canje ga abubuwan da ke cikin Kubernetes. Aiki patch yana aiki kamar haka:

  • mai amfani da kube-apiserver yana buƙatar aika faci a cikin JSON form kuma ya saka abin,
  • kuma apiserver da kansa zai magance halin da ake ciki a halin yanzu kuma ya kawo shi zuwa sigar da ake bukata.

Ba a buƙatar kulle kyakkyawan fata a wannan yanayin. Wannan aikin ya fi bayyanawa fiye da maye gurbin, kodayake da farko yana iya zama kamar wata hanya.

Ta wannan hanyar:

  • ta amfani da aiki create muna ƙirƙirar abu bisa ga bayyanannen daga Git,
  • tare da taimakon delete - goge idan ba'a buƙatar abu kuma,
  • tare da taimakon patch - muna canza abu, muna kawo shi zuwa sigar da aka bayyana a Git.

Koyaya, don yin wannan, kuna buƙatar ƙirƙirar daidai faci!

Yadda faci ke aiki a Helm 2: Haɗin-hanyar 2

Lokacin da kuka fara shigar da sakin, Helm yana yin aikin create don albarkatun ginshiƙi.

Lokacin sabunta sakin Helm don kowane albarkatu:

  • yayi la'akari da facin tsakanin sigar albarkatun daga ginshiƙi na baya da sigar ginshiƙi na yanzu,
  • ya shafi wannan facin.

Za mu kira wannan patch 2-hanyar haɗa facin, saboda 2 manifestos suna da hannu a cikin halittarsa:

  • bayanin albarkatu daga fitowar da ta gabata,
  • albarkatu bayyananne daga albarkatun na yanzu.

Lokacin cire aiki delete a cikin kube apiserver ana kiran albarkatun da aka ayyana a cikin sakin da ya gabata, amma ba a bayyana a cikin na yanzu ba.

Hanya guda biyu ta hanyar haɗa facin tana da matsala: tana kaiwa zuwa ba tare da daidaitawa tare da ainihin yanayin albarkatu a cikin tari da bayyananniyar a Git.

Misalin matsalar tare da misali

  • A cikin Git, ginshiƙi yana adana bayanan da filin image Batun turawa ubuntu:18.04.
  • Mai amfani ta hanyar kubectl edit ya canza darajar wannan filin zuwa ubuntu:19.04.
  • Lokacin sake tura jadawalin Helm baya haifar da faci, saboda filin image a cikin sigar da ta gabata na sakin da kuma a cikin ginshiƙi na yanzu iri ɗaya ne.
  • Bayan sake turawa image saura ubuntu:19.04, kodayake ginshiƙi ya ce ubuntu:18.04.

Mun samu desynchronization da kuma rasa bayyana.

Menene albarkatun da aka daidaita?

Kullum magana cika Ba shi yiwuwa a sami daidaito tsakanin bayanan bayanan albarkatu a cikin gungu mai gudana da bayyani daga Git. Domin a cikin haƙiƙanin bayyananniyar ana iya samun bayanan sabis/tambarin sabis, ƙarin kwantena da sauran bayanan waɗanda aka ƙara da cire su daga albarkatun da ƙarfi ta wasu masu sarrafawa. Ba za mu iya kuma ba ma son kiyaye wannan bayanan a Git. Koyaya, muna son filayen da muka ayyana a sarari a cikin Git don ɗaukar ƙimar da suka dace yayin ƙaddamarwa.

Ya zama gama gari tsarin albarkatun aiki tare: lokacin fitar da albarkatu, zaku iya canza ko share kawai waɗancan filayen da aka ayyana su a bayyane daga Git (ko an ayyana su a cikin sigar da ta gabata kuma yanzu an share su).

3-hanyar haɗa facin

Babban ra'ayi 3-hanyar haɗa facin: muna samar da faci tsakanin sigar ƙarshe da aka yi amfani da su na bayyanuwar daga Git da sigar manufa ta bayyanuwar daga Git, la'akari da sigar bayyanar ta yanzu daga gungu mai gudana. Sakamakon facin dole ne ya bi ka'idar albarkatun aiki tare:

  • ana ƙara sabbin filayen da aka ƙara zuwa sigar manufa ta amfani da faci;
  • filayen da ake da su a cikin sigar da aka yi amfani da su ta ƙarshe kuma waɗanda ba su kasance cikin sigar manufa ba ana sake saita su ta amfani da faci;
  • Ana sabunta filaye a cikin nau'in abu na yanzu wanda ya bambanta da sigar da aka yi niyya na bayyani ta amfani da faci.

A kan wannan ka'ida ce ta haifar da faci kubectl apply:

  • An adana sigar bayanan da aka yi amfani da ita ta ƙarshe a cikin bayanin abin da kansa,
  • manufa - an ɗauko daga ƙayyadadden fayil ɗin YAML,
  • na yanzu daga gungu mai gudu ne.

Yanzu da muka tsara ka'idar, lokaci ya yi da za mu gaya muku abin da muka yi a werf.

Aiwatar da canje-canje zuwa werf

A baya can, werf, kamar Helm 2, sun yi amfani da faci-hanyoyi biyu.

Gyara facin

Domin canzawa zuwa sabon nau'in faci - 3-way-merge - mataki na farko da muka gabatar da abin da ake kira. gyara faci.

Lokacin turawa, ana amfani da daidaitaccen facin-hanyoyi biyu, amma werf kuma yana haifar da faci wanda zai daidaita ainihin yanayin albarkatun tare da abin da aka rubuta a Git (an ƙirƙiri irin wannan facin ta amfani da ƙa'idar albarkatun aiki ɗaya da aka kwatanta a sama) .

Idan cire aiki ya faru, a ƙarshen turawa mai amfani yana karɓar GARGAƊI tare da saƙo mai dacewa da faci wanda dole ne a yi amfani da shi don kawo albarkatun zuwa tsari mai aiki tare. Hakanan ana yin rikodin wannan facin a cikin bayani na musamman werf.io/repair-patch. An ɗauka cewa hannun mai amfani сам zai yi amfani da wannan facin: werf ba zai yi amfani da shi ba kwata-kwata.

Samar da facin gyare-gyare wani ma'auni ne na wucin gadi wanda ke ba ku damar gwada ƙirƙirar faci bisa ƙa'idar haɗin kai ta 3, amma kar a yi amfani da waɗannan facin ta atomatik. A halin yanzu, ana kunna wannan yanayin aiki ta tsohuwa.

Faci-haɗe-haɗe-haɗe-haɗe-haɗe-haɗe-haɗe-haɗe 3 kawai don sabbin abubuwan sakewa

An fara Disamba 1, 2019, nau'ikan beta da alpha na werf sun fara ta hanyar tsoho yi amfani da cikakkun faci-hanyoyin-hanyoyi 3 don aiwatar da canje-canje kawai ga sabbin abubuwan da aka fitar ta Helm da aka yi birgima ta hanyar werf. Sabbin abubuwan da suka wanzu za su ci gaba da amfani da hanyar haɗin-haɗe-haɗe + gyaran faci.

Ana iya kunna wannan yanayin aiki a bayyane ta saiti WERF_THREE_WAY_MERGE_MODE=onlyNewReleases yanzu.

Примечание: fasalin ya bayyana a cikin werf akan sakewa da yawa: a cikin tashar alpha ya zama shirye tare da sigar v1.0.5-alfa.19, kuma a cikin tashar beta - tare da v1.0.4-beta.20.

3-hanyar-haɗe facin ga duk sakewa

Daga 15 ga Disamba, 2019, nau'ikan beta da alpha na werf sun fara amfani da cikakkun faci-hanyoyi 3 ta tsohuwa don aiwatar da canje-canje ga duk abubuwan da aka fitar.

Ana iya kunna wannan yanayin aiki a bayyane ta saiti WERF_THREE_WAY_MERGE_MODE=enabled yanzu.

Me za a yi da autoscaling albarkatun?

Akwai nau'ikan autoscaling guda biyu a Kubernetes: HPA (a kwance) da VPA (a tsaye).

Horizontal ta atomatik yana zaɓar adadin kwafi, a tsaye - adadin albarkatun. Dukansu adadin kwafi da buƙatun albarkatu an kayyade su a cikin bayyanar albarkatu (duba Bayanan Bayanai). spec.replicas ko spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и yanki).

Matsala: idan mai amfani ya saita albarkatu a cikin ginshiƙi don ya ƙayyade wasu ƙididdiga don albarkatun ko kwafi kuma ana kunna autoscalers don wannan albarkatun, to tare da kowane aikin werf zai sake saita waɗannan ƙimar zuwa abin da aka rubuta a cikin ginshiƙi. .

Akwai hanyoyin magance matsalar guda biyu. Da farko, yana da kyau a guje wa ƙayyadaddun ƙididdiga masu ƙima a cikin bayuwar ginshiƙi. Idan wannan zaɓi bai dace da wasu dalilai ba (alal misali, saboda ya dace don saita iyakokin albarkatun farko da adadin kwafi a cikin ginshiƙi), to werf yana ba da bayanan da ke gaba:

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

Idan irin wannan bayanin yana nan, werf ba zai sake saita ma'auni masu dacewa akan kowane turawa ba, amma zai saita su ne kawai lokacin da aka fara ƙirƙirar albarkatun.

Don ƙarin cikakkun bayanai, duba takaddun aikin don HPA и VPA.

Hana amfani da facin-hanyoyi 3

A halin yanzu mai amfani na iya hana amfani da sabbin faci a cikin werf ta amfani da canjin yanayi WERF_THREE_WAY_MERGE_MODE=disabled. Duk da haka, farawa Daga ranar 1 ga Maris, 2020, wannan haramcin ba zai ƙara aiki ba. kuma zai yiwu ne kawai a yi amfani da faci-hanyoyin-hanyoyi 3.

Karɓar albarkatu a cikin werf

Kwarewar hanyar amfani da canje-canje tare da faci-hanyoyi 3 ya ba mu damar aiwatar da irin wannan fasalin nan da nan kamar ɗaukar albarkatun da ke cikin gungu cikin sakin Helm.

Helm 2 yana da matsala: ba za ka iya ƙara albarkatu zuwa ginshiƙi wanda ya riga ya wanzu a cikin gungu ba tare da sake ƙirƙirar wannan albarkatun daga karce (duba. #6031, #3275). Mun koya wa werf karɓar albarkatun da ke akwai don saki. Don yin wannan, kuna buƙatar shigar da annotation akan sigar yanzu na albarkatun daga gungu mai gudana (misali, ta amfani da kubectl edit):

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

Yanzu ana buƙatar bayanin albarkatun a cikin ginshiƙi kuma lokacin da werf na gaba zai tura sakin tare da sunan da ya dace, za a karɓi albarkatun da ke akwai a cikin wannan sakin kuma su kasance ƙarƙashin ikonsa. Haka kuma, a cikin aiwatar da karɓar albarkatu don sakin, werf zai kawo yanayin albarkatun yanzu daga gungu mai gudana zuwa jihar da aka bayyana a cikin ginshiƙi, ta yin amfani da faci guda 3-hanyoyi guda ɗaya da tsarin albarkatun da aka daidaita.

Примечание: saitin WERF_THREE_WAY_MERGE_MODE baya shafar karbuwar albarkatu - idan aka yi la’akari da karbuwa, ana amfani da facin-hanyoyi 3 koyaushe.

Cikakkun bayanai - a takardun.

Ƙarshe da tsare-tsare na gaba

Ina fatan cewa bayan wannan labarin ya bayyana a fili abin da faci-hanyoyin-hanyoyi 3 suke da kuma dalilin da ya sa suka zo gare su. Daga ra'ayi mai amfani na ci gaban aikin werf, aiwatar da su wani mataki ne na inganta jigilar Helm. Yanzu za ku iya manta game da matsalolin tare da daidaitawa na daidaitawa, wanda sau da yawa yakan tashi lokacin amfani da Helm 2. A lokaci guda, an ƙara sabon fasalin amfani na ɗaukar albarkatun Kubernetes da aka riga aka sauke zuwa sakin Helm.

Har yanzu akwai wasu batutuwa da ƙalubale tare da turawa irin na Helm, kamar amfani da samfuran Go, waɗanda za mu ci gaba da magance su.

Hakanan ana iya samun bayanai game da hanyoyin sabunta kayan aiki da karɓuwa a wannan shafi na takardun.

Helm 3

Cancantar bayanin kula na musamman saki Kamar sauran rana wani sabon babban sigar Helm - v3 - wanda kuma yana amfani da faci-hanyoyi 3 kuma yana kawar da Tiller. Sabuwar sigar Helm tana buƙatar ƙaura abubuwan da ke akwai don canza su zuwa sabon tsarin ma'ajiyar saki.

Werf, a nata bangare, a halin yanzu ya rabu da amfani da Tiller, ya canza zuwa 3-way-merge kuma ya kara. fiye da haka, yayin da ya kasance mai jituwa tare da shigarwar Helm 2 na yanzu (babu rubutun ƙaura da ake buƙatar aiwatarwa). Don haka, har sai werf ya canza zuwa Helm 3, masu amfani da werf ba sa rasa babban fa'idar Helm 3 akan Helm 2 (werf shima yana da su).

Koyaya, canjin werf zuwa lambar Helm 3 ba makawa ne kuma zai faru nan gaba kaɗan. Mai yiwuwa wannan zai zama werf 1.1 ko werf 1.2 (a halin yanzu, babban sigar werf shine 1.0; don ƙarin bayani game da na'urar sigar werf, duba. a nan). A wannan lokacin, Helm 3 zai sami lokaci don daidaitawa.

PS

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment