Kifaa cha Helm na mitego yake

Kifaa cha Helm na mitego yake
Dhana ya wasafirishaji wa mizigo ya Typhon, Anton Swanepoel

Jina langu ni Dmitry Sugrobov, mimi ni msanidi programu huko Leroy Merlin. Katika makala hii nitakuambia kwa nini Helm inahitajika, jinsi inavyorahisisha kufanya kazi na Kubernetes, ni nini kimebadilika katika toleo la tatu, na jinsi ya kuitumia kusasisha programu katika uzalishaji bila kupunguzwa.

Huu ni muhtasari unaotokana na hotuba kwenye mkutano @Kubernetes Mkutano by Mail.ru Cloud Solutions - ikiwa hutaki kusoma, tazama video.

Kwa nini tunatumia Kubernetes katika uzalishaji

Leroy Merlin ni kiongozi katika soko la rejareja la DIY nchini Urusi na Ulaya. Kampuni yetu ina watengenezaji zaidi ya mia moja, wafanyikazi wa ndani 33 na idadi kubwa ya watu wanaotembelea hypermarkets na wavuti. Ili kuwafurahisha wote, tuliamua kufuata mbinu za kiwango cha tasnia. Kuendeleza programu mpya kwa kutumia usanifu wa microservice; kutumia vyombo kutenga mazingira na kuhakikisha utoaji sahihi; na utumie Kubernetes kwa uimbaji. Bei ya kutumia waimbaji inazidi kuwa nafuu: idadi ya wahandisi waliobobea katika teknolojia inaongezeka sokoni, na watoa huduma wanaonekana wakitoa Kubernetes kama huduma.

Kila kitu ambacho Kubernetes hufanya, bila shaka, kinaweza kufanywa kwa njia nyingine, kwa mfano, kwa kufunika baadhi ya Jenkins na docker-compose na maandiko, lakini kwa nini ugumu wa maisha ikiwa kuna suluhisho tayari na la kuaminika? Ndiyo maana tulikuja Kubernetes na tumekuwa tukiitumia katika uzalishaji kwa mwaka mmoja sasa. Kwa sasa tuna vikundi ishirini na nne vya Kubernetes, kongwe zaidi ambayo ina zaidi ya mwaka mmoja, yenye takriban maganda mia mbili.

Laana ya faili kubwa za YAML katika Kubernetes

Ili kuzindua huduma ndogo katika Kubernetes, tutaunda angalau faili tano za YAML: za Usambazaji, Huduma, Ingress, ConfigMap, Siri - na kuzituma kwa nguzo. Kwa programu inayofuata tutaandika kifurushi sawa cha jambs, na ya tatu tutaandika nyingine, na kadhalika. Ikiwa tutazidisha idadi ya hati kwa idadi ya mazingira, tayari tutapata mamia ya faili, na hii bado haijazingatia mazingira yanayobadilika.

Kifaa cha Helm na mitego yake
Adam Reese, mtunzaji mkuu wa Helm, alianzisha wazo la "Mzunguko wa Maendeleo katika Kubernetes", ambayo inaonekana kama hii:

  1. Nakili YAML - nakili faili ya YAML.
  2. Bandika YAML - ibandike.
  3. Kurekebisha Indenti - kurekebisha indents.
  4. Kurudia - kurudia tena.

Chaguo hufanya kazi, lakini lazima unakili faili za YAML mara nyingi. Ili kubadilisha mzunguko huu, Helm ilivumbuliwa.

Helm ni nini

Kwanza, Helm - meneja wa kifurushi, ambayo hukusaidia kupata na kusakinisha programu unazohitaji. Ili kufunga, kwa mfano, MongoDB, huna haja ya kwenda kwenye tovuti rasmi na kupakua binaries, endesha tu amri. helm install stable/mongodb.

Pili, Helm - injini ya template, husaidia kuweka vigezo vya faili. Wacha turudi kwenye hali na faili za YAML katika Kubernetes. Ni rahisi kuandika faili sawa ya YAML, ongeza vishikilia nafasi kwake, ambapo Helm itabadilisha maadili. Hiyo ni, badala ya seti kubwa ya scaffolds, kutakuwa na seti ya templeti ambazo maadili yanayohitajika yatabadilishwa kwa wakati unaofaa.

Tatu, Helm - bwana wa kupeleka. Kwa hiyo unaweza kusakinisha, kurejesha na kusasisha programu. Hebu tujue jinsi ya kufanya hivyo.

Kifaa cha Helm na mitego yake

Jinsi ya kutumia Helm kupeleka programu zako mwenyewe

Hebu tusakinishe mteja wa Helm kwenye kompyuta yako, tukifuata rasmi maelekezo. Kisha, tutaunda seti ya faili za YAML. Badala ya kubainisha thamani maalum, tutaacha vishika nafasi, ambavyo Helm itajaza taarifa katika siku zijazo. Seti ya faili kama hizo inaitwa chati ya Helm. Inaweza kutumwa kwa mteja wa kiweko cha Helm kwa njia tatu:

  • onyesha folda iliyo na templeti;
  • pakiti kumbukumbu kwenye .tar na uelekeze kwake;
  • weka kiolezo kwenye hazina ya mbali na ongeza kiunga cha hazina kwenye mteja wa Helm.

Pia unahitaji faili iliyo na maadili - values.yaml. Data kutoka hapo itaingizwa kwenye kiolezo. Hebu tuunde pia.

Kifaa cha Helm na mitego yake
Toleo la pili la Helm lina programu ya ziada ya seva - Tiller. Huning'inia nje ya Kubernetes na kungoja maombi kutoka kwa mteja wa Helm, na inapoitwa, hubadilisha maadili yanayohitajika kwenye kiolezo na kuituma kwa Kubernetes.

Kifaa cha Helm na mitego yake
Helm 3 ni rahisi zaidi: badala ya kuchakata violezo kwenye seva, taarifa sasa inachakatwa kabisa kwenye upande wa mteja wa Helm na kutumwa moja kwa moja kwa Kubernetes API. Urahisishaji huu huboresha usalama wa nguzo na kuwezesha mpango wa uchapishaji.

Jinsi gani yote kazi

Endesha amri helm install. Hebu tuonyeshe jina la toleo la programu na tupe njia ya maadili.yaml. Mwishoni tutaonyesha hazina ambayo chati iko na jina la chati. Katika mfano, hizi ni "lmru" na "bestchart", mtawaliwa.

helm install --name bestapp --values values.yaml lmru/bestchart

Amri inaweza kutekelezwa mara moja tu, inapotekelezwa tena badala yake install haja ya kutumia upgrade. Kwa unyenyekevu, badala ya amri mbili, unaweza kuendesha amri upgrade na ufunguo wa ziada --install. Inapotekelezwa kwa mara ya kwanza, Helm itatuma amri ya kusakinisha toleo, na italisasisha katika siku zijazo.

helm upgrade --install bestapp --values values.yaml lmru/bestchart

Mitego ya kupeleka matoleo mapya ya programu na Helm

Katika hatua hii ya hadithi, ninacheza Nani Anataka Kuwa Milionea na hadhira, na tunatafuta jinsi ya kupata Helm ili kusasisha toleo la programu. Tazama video.

Nilipokuwa nikijifunza jinsi Helm inavyofanya kazi, nilishangazwa na tabia ya kushangaza wakati wa kujaribu kusasisha matoleo ya programu zinazoendesha. Nilisasisha msimbo wa maombi, nilipakia picha mpya kwenye sajili ya Docker, nikatuma amri ya kupeleka - na hakuna kilichotokea. Zifuatazo ni baadhi ya njia ambazo hazijafanikiwa kabisa kusasisha programu. Kwa kusoma kila mmoja wao kwa undani zaidi, unaanza kuelewa muundo wa ndani wa chombo na sababu za tabia hii isiyo wazi.

Njia ya 1. Usibadilishe habari tangu uzinduzi wa mwisho

Jinsi ya kucheza tovuti rasmi Helm, "Chati za Kubernetes zinaweza kuwa kubwa na ngumu, kwa hivyo Helm hujaribu kutogusa chochote sana." Kwa hiyo, ikiwa unasasisha toleo la hivi karibuni la picha ya programu kwenye Usajili wa docker na uendesha amri helm upgrade, basi hakuna kitakachotokea. Helm itafikiria kuwa hakuna kilichobadilika na hakuna haja ya kutuma amri kwa Kubernetes kusasisha programu.

Hapa na chini, lebo ya hivi punde inaonyeshwa kama mfano pekee. Unapobainisha lebo hii, Kubernetes itapakua picha kutoka kwa sajili ya docker kila wakati, bila kujali parameta ya imagePullPolicy. Kutumia hivi karibuni katika uzalishaji hakupendezi na husababisha athari.

Mbinu ya 2. Sasisha LABEL kwenye picha

Kama ilivyoandikwa katika hiyo hiyo nyaraka, "Helm itasasisha tu programu ikiwa imebadilika tangu toleo la mwisho." Chaguo la kimantiki kwa hili linaweza kuonekana kuwa linasasisha LABEL kwenye picha ya kituo chenyewe. Walakini, Helm haiangalii picha za programu na hajui kuhusu mabadiliko yoyote kwao. Ipasavyo, wakati wa kusasisha lebo kwenye picha, Helm haitajua kuzihusu, na amri ya sasisho la programu haitatumwa kwa Kubernetes.

Njia ya 3: Tumia kitufe --force

Kifaa cha Helm na mitego yake
Hebu tugeuke kwenye miongozo na tutafute ufunguo unaohitajika. Ufunguo una maana zaidi --force. Licha ya jina dhahiri, tabia ni tofauti na inavyotarajiwa. Badala ya kulazimisha sasisho la programu, madhumuni yake halisi ni kurejesha toleo ambalo liko katika hali ya FAILED. Ikiwa hutumii ufunguo huu, unahitaji kutekeleza amri kwa mlolongo helm delete && helm install --replace. Inapendekezwa kutumia ufunguo badala yake --force, ambayo huendesha utekelezaji wa mfuatano wa amri hizi. Taarifa zaidi katika hili ombi la kuvuta. Ili kumwambia Helm kusasisha toleo la programu, kwa bahati mbaya, ufunguo huu hautafanya kazi.

Njia ya 4. Badilisha lebo moja kwa moja kwenye Kubernetes

Kifaa cha Helm na mitego yake
Kusasisha lebo moja kwa moja kwenye nguzo kwa kutumia amri kubectl edit - wazo mbaya. Hatua hii itasababisha utofauti wa taarifa kati ya programu inayoendeshwa na ile ambayo ilitumwa awali kwa ajili ya kutumwa. Tabia ya Helm wakati wa kupelekwa katika kesi hii inatofautiana na toleo lake: Helm 2 haitafanya chochote, na Helm 3 itatumia toleo jipya la programu. Ili kuelewa kwa nini, unahitaji kuelewa jinsi Helm inavyofanya kazi.

Helm inafanyaje kazi?

Ili kubaini ikiwa programu imebadilika tangu ilipotolewa mara ya mwisho, Helm inaweza kutumia:

  • kuendesha maombi katika Kubernetes;
  • thamani mpya.yaml na chati ya sasa;
  • Taarifa ya ndani ya Helm.

Kwa wanaodadisi zaidi: Helm huhifadhi wapi maelezo ya ndani kuhusu matoleo?Kwa kutekeleza amri helm history, tutapata taarifa zote kuhusu matoleo yaliyosakinishwa kwa kutumia Helm.

Kifaa cha Helm na mitego yake
Pia kuna maelezo ya kina kuhusu violezo na maadili yaliyotumwa. Tunaweza kuomba:

Kifaa cha Helm na mitego yake
Katika toleo la pili la Helm, maelezo haya yanapatikana katika nafasi ya majina sawa ambapo Tiller anaendesha (kube-system kwa chaguo-msingi), katika ConfigMap, iliyo na lebo "OWNER=TILLER":

Kifaa cha Helm na mitego yake
Wakati toleo la tatu la Helm lilipoonekana, habari hiyo ilihamia kwa siri, na kwa nafasi sawa ya majina ambapo programu ilikuwa inaendeshwa. Shukrani kwa hili, iliwezekana kuendesha programu kadhaa wakati huo huo katika nafasi tofauti za majina na jina moja la kutolewa. Katika toleo la pili ilikuwa maumivu makali ya kichwa wakati nafasi za majina zimetengwa lakini zinaweza kuathiri kila mmoja.

Kifaa cha Helm na mitego yake

Helm ya pili, inapojaribu kuelewa ikiwa sasisho inahitajika, hutumia vyanzo viwili tu vya habari: kile kinachotolewa kwake sasa, na maelezo ya ndani kuhusu matoleo, ambayo yamo kwenye ConfigMap.

Kifaa cha Helm na mitego yake
Helm ya tatu hutumia mkakati wa kuunganisha wa njia tatu: pamoja na maelezo hayo, pia inazingatia programu inayotumika sasa hivi katika Kubernetes.

Kifaa cha Helm na mitego yake
Kwa sababu hii, toleo la zamani la Helm halitafanya chochote, kwani haizingatii habari ya maombi kwenye nguzo, lakini Helm 3 itapokea mabadiliko na kutuma maombi mapya ya kupelekwa.

Njia ya 5. Tumia swichi ya --recreate-pods

Na ufunguo --recreate-pods unaweza kufikia kile ulichopanga kufanikiwa kwa ufunguo --force. Vyombo vitaanza upya na, kulingana na imagePullPolicy: Sera ya kila mara ya lebo ya hivi punde (zaidi kuhusu hili katika tanbihi iliyo hapo juu), Kubernetes itapakua na kuzindua toleo jipya la picha. Hii haitafanywa kwa njia bora: bila kuzingatia Mkakati wa Aina ya kupeleka, itazima ghafla matukio yote ya zamani ya maombi na kuanza kuzindua mpya. Wakati wa kuanzisha upya, mfumo hautafanya kazi, watumiaji watateseka.

Katika Kubernetes yenyewe, shida kama hiyo pia ilikuwepo kwa muda mrefu. Na sasa, miaka 4 baada ya ufunguzi Suala, tatizo limewekwa, na kuanzia na toleo la 1.15 la Kubernetes, uwezo wa kuanzisha upya maganda inaonekana.

Helm huzima programu zote na kuzindua vyombo vipya karibu. Huwezi kufanya hivyo katika uzalishaji, ili usisababishe muda wa programu. Hii inahitajika tu kwa mahitaji ya maendeleo na inaweza tu kufanywa katika mazingira ya jukwaa.

Jinsi ya kusasisha toleo la programu kwa kutumia Helm?

Tutabadilisha maadili yaliyotumwa kwa Helm. Kwa kawaida, hizi ni maadili ambayo yanabadilishwa badala ya lebo ya picha. Katika kesi ya hivi karibuni, ambayo mara nyingi hutumiwa kwa mazingira yasiyo na tija, habari inayoweza kubadilika ni dokezo, ambayo haina maana kwa Kubernetes yenyewe, na kwa Helm itafanya kama ishara ya hitaji la kusasisha programu. Chaguzi za kujaza thamani ya maelezo:

  1. Thamani ya nasibu kutumia kazi ya kawaida - {{ randAlphaNum 6 }}.
    Kuna tahadhari: baada ya kila utumaji kwa kutumia chati yenye mabadiliko kama hayo, thamani ya maelezo itakuwa ya kipekee, na Helm itafikiri kuwa kuna mabadiliko. Inabadilika kuwa tutaanzisha tena programu kila wakati, hata ikiwa hatujabadilisha toleo lake. Hii sio muhimu, kwani hakutakuwa na wakati wa kupumzika, lakini bado haifurahishi.
  2. Bandika mkondo tarehe na saa - {{ .Release.Date }}.
    Lahaja ni sawa na thamani nasibu yenye kigezo cha kipekee kabisa.
  3. Njia sahihi zaidi ni kutumia hundi. Hii ndio SHA ya picha au SHA ya ahadi ya mwisho kwenye git - {{ .Values.sha }}.
    Watahitaji kuhesabiwa na kutumwa kwa mteja wa Helm kwenye upande wa kupiga simu, kwa mfano huko Jenkins. Ikiwa programu imebadilika, basi checksum itabadilika. Kwa hivyo, Helm itasasisha programu tu inapohitajika.

Wacha tufanye muhtasari wa majaribio yetu

  • Helm hufanya mabadiliko kwa njia isiyo ya uvamizi, kwa hivyo mabadiliko yoyote katika kiwango cha picha ya programu kwenye Usajili wa Docker hayatasababisha sasisho: hakuna kitakachotokea baada ya amri kutekelezwa.
  • Muhimu --force kutumika kurejesha matoleo yenye matatizo na haihusiani na masasisho ya kulazimishwa.
  • Muhimu --recreate-pods itasasisha programu kwa nguvu, lakini itafanya kwa njia ya uharibifu: itazima vyombo vyote ghafla. Watumiaji watateseka kutokana na hili; hupaswi kufanya hivi katika uzalishaji.
  • Fanya mabadiliko moja kwa moja kwenye nguzo ya Kubernetes kwa kutumia amri kubectl edit usifanye: tutavunja uthabiti, na tabia itatofautiana kulingana na toleo la Helm.
  • Kwa kutolewa kwa toleo jipya la Helm, nuances nyingi zimeonekana. Masuala katika hazina ya Helm yanaelezwa kwa lugha wazi, yatakusaidia kuelewa maelezo.
  • Kuongeza kidokezo kinachoweza kuhaririwa kwenye chati kutaifanya iwe rahisi kubadilika. Hii itakuruhusu kusambaza programu kwa usahihi, bila wakati wa kupumzika.

Wazo la "amani ya ulimwengu" ambayo inafanya kazi katika maeneo yote ya maisha: soma maagizo kabla ya matumizi, sio baada. Tu kwa taarifa kamili itawezekana kujenga mifumo ya kuaminika na kuwafanya watumiaji wawe na furaha.

Viungo vingine vinavyohusiana:

  1. Kufahamiana na Helm 3
  2. Tovuti rasmi ya Helm
  3. Hifadhi ya usukani kwenye GitHub
  4. 25 Zana Muhimu za Kubernetes: Usambazaji na Usimamizi

Ripoti hii iliwasilishwa kwa mara ya kwanza @Kubernetes Mkutano na Mail.ru Cloud Solutions. Tazama video maonyesho mengine na ujiandikishe kwa matangazo ya hafla kwenye Telegraph Karibu na Kubernetes kwenye Mail.ru Group.

Chanzo: mapenzi.com

Kuongeza maoni