GitOps: Ulinganisho wa Njia za Kuvuta na Kusukuma

Kumbuka. tafsiri.: Katika jumuiya ya Kubernetes, mtindo unaoitwa GitOps unapata umaarufu dhahiri, kama tulivyoona binafsi, kutembelea KubeCon Europe 2019. Neno hili lilikuwa la hivi majuzi zuliwa na mkuu wa Weaveworks - Alexis Richardson - na inamaanisha matumizi ya zana zinazojulikana kwa watengenezaji (hasa Git, kwa hivyo jina) kutatua shida za kiutendaji. Hasa, tunazungumza juu ya utendakazi wa Kubernetes kwa kuhifadhi usanidi wake katika Git na kusambaza kiotomatiki mabadiliko kwenye nguzo. Matthias Jg anazungumza kuhusu mbinu mbili za uchapishaji huu katika makala haya.

GitOps: Ulinganisho wa Njia za Kuvuta na Kusukuma

Mwaka jana, (kwa kweli, hii ilifanyika rasmi mnamo Agosti 2017 - takriban transl.) Kuna mbinu mpya ya kupeleka programu katika Kubernetes. Inaitwa GitOps, na inatokana na wazo la msingi kwamba matoleo ya upelekaji yanafuatiliwa katika mazingira salama ya hazina ya Git.

Faida kuu za mbinu hii ni kama ifuatavyo.:

  1. Utoaji wa matoleo na mabadiliko ya historia. Hali ya nguzo nzima imehifadhiwa kwenye hazina ya Git, na upelekaji unasasishwa tu kupitia ahadi. Kwa kuongeza, mabadiliko yote yanaweza kufuatiliwa kwa kutumia historia ya ahadi.
  2. Kurudisha nyuma kwa kutumia amri zinazojulikana za Git. Rahisi git reset inakuwezesha kuweka upya mabadiliko katika kupeleka; majimbo ya zamani yanapatikana kila wakati.
  3. Udhibiti wa ufikiaji ulio tayari. Kawaida, mfumo wa Git una data nyingi nyeti, kwa hivyo kampuni nyingi hulipa kipaumbele maalum kuilinda. Ipasavyo, ulinzi huu pia unatumika kwa shughuli na usambazaji.
  4. Sera za Usambazaji. Mifumo mingi ya Git kwa asili inasaidia sera za tawi kwa tawiβ€”kwa mfano, maombi ya kuvuta pekee ndiyo yanaweza kusasisha bwana, na mabadiliko lazima yakaguliwe na kukubaliwa na mshiriki mwingine wa timu. Kama ilivyo kwa udhibiti wa ufikiaji, sera sawa hutumika kwa masasisho ya uwekaji.

Kama unaweza kuona, kuna faida nyingi kwa njia ya GitOps. Katika mwaka uliopita, mbinu mbili zimepata umaarufu fulani. Moja ni msingi wa kushinikiza, nyingine ni ya kuvuta. Kabla ya kuziangalia, hebu kwanza tuangalie jinsi usambazaji wa Kubernetes unavyoonekana.

Mbinu za Usambazaji

Katika miaka ya hivi karibuni, Kubernetes imeanzisha mbinu na zana mbalimbali za kupeleka:

  1. Kulingana na violezo asili vya Kubernetes/Kustomize. Hii ndiyo njia rahisi zaidi ya kupeleka programu kwenye Kubernetes. Msanidi huunda faili za msingi za YAML na kuzitumia. Ili kuondokana na kuandika tena templeti sawa kila wakati, Kustomize ilitengenezwa (inabadilisha templeti za Kubernetes kuwa moduli). Kumbuka. tafsiri.: Kustomize imeunganishwa kwenye kubectl na kutolewa kwa Kubernetes 1.14.
  2. Chati za Helm. Chati za usukani hukuruhusu kuunda seti za violezo, kontena za init, kando, n.k., ambazo hutumika kupeleka programu zilizo na chaguo rahisi zaidi za kubinafsisha kuliko katika mbinu inayotegemea kiolezo. Mbinu hii inategemea faili za YAML za violezo. Helm huzijaza kwa vigezo mbalimbali na kisha kuzituma kwa Tiller, sehemu ya nguzo inayozipeleka kwenye kundi na kuruhusu masasisho na urejeshaji nyuma. Jambo muhimu ni kwamba Helm kimsingi inaingiza tu maadili yanayotakiwa kwenye violezo na kisha kuyatumia kwa njia ile ile kama inavyofanywa katika mbinu ya kitamaduni. (soma zaidi juu ya jinsi yote inavyofanya kazi na jinsi unavyoweza kuitumia katika yetu makala ya Helm - takriban. tafsiri.). Kuna anuwai nyingi za chati za Helm zilizotengenezwa tayari zinazoshughulikia anuwai ya kazi.
  3. Zana Mbadala. Kuna zana nyingi mbadala. Wanachofanana wote ni kwamba wanageuza faili za violezo kuwa faili za YAML zinazoweza kusomeka za Kubernetes na kisha kuzitumia.

Katika kazi yetu, sisi hutumia chati za Helm kila mara kwa zana muhimu (kwa kuwa zina vitu vingi tayari, ambayo hurahisisha maisha) na faili "safi" za Kubernetes YAML kwa kupeleka programu zetu wenyewe.

Vuta & Sukuma

Katika moja ya machapisho yangu ya hivi karibuni ya blogi, nilianzisha zana Weave Flux, ambayo hukuruhusu kuweka violezo kwenye hazina ya Git na kusasisha uwekaji baada ya kila ahadi au kusukuma kwa kontena. Uzoefu wangu unaonyesha kwamba chombo hiki ni mojawapo ya kuu katika kukuza mbinu ya kuvuta, kwa hiyo mara nyingi nitairejelea. Ikiwa unataka kujua zaidi juu ya jinsi ya kuitumia, hapa kiungo kwa makala.

NB! Faida zote za kutumia GitOps zinabaki sawa kwa njia zote mbili.

Njia ya msingi ya kuvuta

GitOps: Ulinganisho wa Njia za Kuvuta na Kusukuma

Njia ya kuvuta inategemea ukweli kwamba mabadiliko yote yanatumika kutoka ndani ya nguzo. Kuna opereta ndani ya nguzo ambaye hukagua mara kwa mara hazina zinazohusiana za Git na Docker Registry. Ikiwa mabadiliko yoyote yatatokea kwao, hali ya nguzo inasasishwa ndani. Utaratibu huu kwa ujumla unachukuliwa kuwa salama sana, kwa kuwa hakuna mteja wa nje anayeweza kufikia haki za msimamizi wa nguzo.

Faida:

  1. Hakuna mteja wa nje aliye na haki ya kufanya mabadiliko kwenye kundi; masasisho yote yanatolewa kutoka ndani.
  2. Baadhi ya zana pia hukuruhusu kulandanisha masasisho ya chati ya Helm na kuyaunganisha kwenye nguzo.
  3. Usajili wa Docker unaweza kuchanganuliwa kwa matoleo mapya. Ikiwa picha mpya inapatikana, hazina ya Git na utumiaji husasishwa hadi toleo jipya.
  4. Zana za kuvuta zinaweza kusambazwa katika nafasi tofauti za majina na hazina tofauti za Git na ruhusa. Shukrani kwa hili, mfano wa multitenant unaweza kutumika. Kwa mfano, timu A inaweza kutumia nafasi ya majina A, timu B inaweza kutumia nafasi ya majina B, na timu ya miundombinu inaweza kutumia nafasi ya kimataifa.
  5. Kama sheria, zana ni nyepesi sana.
  6. Imechanganywa na zana kama vile opereta Bitnami Muhuri Siri, siri zinaweza kuhifadhiwa kwa njia fiche kwenye hazina ya Git na kurejeshwa ndani ya nguzo.
  7. Hakuna muunganisho wa mabomba ya CD kwani uwekaji hufanyika ndani ya nguzo.

Africa:

  1. Kusimamia siri za upelekaji kutoka kwa chati za Helm ni ngumu zaidi kuliko zile za kawaida, kwani kwanza zinapaswa kuzalishwa kwa njia ya, sema, siri zilizofungwa, kisha kufutwa na mendeshaji wa ndani, na tu baada ya hapo wanapatikana kwa zana ya kuvuta. Kisha unaweza kuendesha toleo katika Helm na maadili katika siri ambazo tayari zimetumika. Njia rahisi ni kuunda siri na maadili yote ya Helm yanayotumika kupeleka, kuichambua na kuikabidhi kwa Git.
  2. Unapochukua mbinu ya kuvuta, unakuwa amefungwa kwa zana za kuvuta. Hii inapunguza uwezo wa kubinafsisha mchakato wa kusambaza katika kundi. Kwa mfano, Kustomize ni ngumu na ukweli kwamba lazima iendeshwe kabla ya violezo vya mwisho kujitolea kwa Git. Sisemi kwamba huwezi kutumia zana zinazojitegemea, lakini ni ngumu zaidi kujumuisha katika mchakato wako wa kupeleka.

Mbinu ya kushinikiza

GitOps: Ulinganisho wa Njia za Kuvuta na Kusukuma

Katika mbinu ya kusukuma, mfumo wa nje (haswa mabomba ya CD) huzindua upelekaji kwa nguzo baada ya kujitolea kwa hazina ya Git au ikiwa bomba la awali la CI limefaulu. Kwa njia hii, mfumo unaweza kufikia nguzo.

Faida:

  1. Usalama umedhamiriwa na hazina ya Git na bomba la ujenzi.
  2. Kupeleka chati za Helm ni rahisi na inasaidia programu jalizi za Helm.
  3. Siri ni rahisi kudhibiti kwa sababu siri zinaweza kutumika katika bomba na pia zinaweza kuhifadhiwa kwa njia fiche katika Git (kulingana na matakwa ya mtumiaji).
  4. Hakuna uhusiano na chombo maalum, kwa kuwa aina yoyote inaweza kutumika.
  5. Masasisho ya toleo la kontena yanaweza kuanzishwa na bomba la ujenzi.

Africa:

  1. Data ya ufikiaji wa nguzo iko ndani ya mfumo wa ujenzi.
  2. Kusasisha vyombo vya kupeleka bado ni rahisi na mchakato wa kuvuta.
  3. Utegemezi mkubwa kwenye mfumo wa CD, kwa kuwa mabomba tunayohitaji yanaweza kuwa yameandikwa kwa Gitlab Runners, na kisha timu inaamua kuhamia Azure DevOps au Jenkins... na italazimika kuhamisha idadi kubwa ya mabomba ya ujenzi.

Matokeo: Sukuma au Vuta?

Kama ilivyo kawaida, kila mbinu ina faida na hasara zake. Baadhi ya kazi ni rahisi kukamilisha kwa moja na ngumu zaidi na nyingine. Mwanzoni nilikuwa nikifanya upelekaji kwa mikono, lakini baada ya kupata nakala chache kuhusu Weave Flux, niliamua kutekeleza michakato ya GitOps kwa miradi yote. Kwa violezo vya kimsingi hii ilikuwa rahisi, lakini kisha nilianza kuingia kwenye matatizo na chati za Helm. Wakati huo, Weave Flux ilitoa tu toleo la msingi la Opereta ya Chati ya Helm, lakini hata sasa kazi zingine ni ngumu zaidi kwa sababu ya hitaji la kuunda siri na kuzitumia. Unaweza kusema kuwa njia ya kuvuta ni salama zaidi kwa sababu sifa za nguzo hazipatikani nje ya nguzo, na kuifanya kuwa salama zaidi kwamba inafaa kujitahidi zaidi.

Baada ya kufikiria kidogo, nilifikia hitimisho lisilotarajiwa kwamba sivyo. Tukizungumza kuhusu vipengele vinavyohitaji ulinzi wa juu zaidi, orodha hii itajumuisha hifadhi ya siri, mifumo ya CI/CD, na hazina za Git. Habari iliyo ndani yao ni hatari sana na inahitaji ulinzi wa hali ya juu. Kwa kuongeza, ikiwa mtu ataingia kwenye hazina yako ya Git na anaweza kushinikiza msimbo hapo, wanaweza kupeleka chochote wanachotaka (iwe ni kuvuta au kusukuma) na kupenyeza mifumo ya nguzo. Kwa hivyo, vipengele muhimu zaidi vinavyohitaji kulindwa ni hazina ya Git na mifumo ya CI/CD, si vitambulisho vya nguzo. Iwapo una sera na vidhibiti vya usalama vilivyosanidiwa vyema kwa aina hizi za mifumo, na vitambulisho vya nguzo vinatolewa tu kama siri kama siri, usalama ulioongezwa wa mbinu ya kuvuta huenda usiwe na thamani kama ilivyofikiriwa awali.

Kwa hivyo, ikiwa mbinu ya kuvuta ni ya kazi zaidi na haitoi faida ya usalama, je, si jambo la akili kutumia mbinu ya kusukuma tu? Lakini mtu anaweza kusema kuwa katika mbinu ya kushinikiza umefungwa sana kwenye mfumo wa CD na, labda, ni bora si kufanya hivyo ili iwe rahisi kutekeleza uhamiaji katika siku zijazo.

Kwa maoni yangu (kama kawaida), unapaswa kutumia kile kinachofaa zaidi kwa kesi fulani au kuchanganya. Binafsi, mimi hutumia njia zote mbili: Weave Flux kwa uwekaji wa msingi wa mvuto ambao hujumuisha huduma zetu wenyewe, na mbinu ya kusukuma na Helm na programu-jalizi, ambayo hurahisisha kutumia chati za Helm kwenye nguzo na hukuruhusu kuunda siri bila mshono. Nadhani hakutakuwa na suluhisho moja linalofaa kwa kesi zote, kwa sababu daima kuna nuances nyingi na hutegemea maombi maalum. Hiyo inasemwa, ninapendekeza sana GitOps - hurahisisha maisha na inaboresha usalama.

Natumaini uzoefu wangu juu ya mada hii utakusaidia kuamua ni njia gani inayofaa zaidi kwa aina yako ya kupelekwa, na ningefurahi kusikia maoni yako.

PS Note kutoka kwa mfasiri

Upande wa chini wa modeli ya kuvuta ni kwamba ni ngumu kuweka maonyesho yaliyotolewa kwenye Git, lakini hakuna upande wa chini kwamba bomba la CD katika modeli ya kuvuta huishi kando na usambazaji na kimsingi inakuwa bomba la kitengo. Endelea Kutuma. Kwa hiyo, hata juhudi zaidi zitahitajika kukusanya hali zao kutoka kwa matumizi yote na kwa namna fulani kutoa ufikiaji wa kumbukumbu / hali, ikiwezekana kwa kuzingatia mfumo wa CD.

Kwa maana hii, mtindo wa kusukuma huturuhusu kutoa angalau baadhi ya hakikisho za uchapishaji, kwa sababu muda wa maisha wa bomba unaweza kufanywa kuwa sawa na maisha ya uchapishaji.

Tulijaribu mifano yote miwili na tukafikia hitimisho sawa na mwandishi wa nakala hiyo:

  1. Mfano wa kuvuta unafaa kwetu kupanga masasisho ya vipengele vya mfumo kwenye idadi kubwa ya makundi (ona. makala kuhusu addon-operator).
  2. Mtindo wa kusukuma unaotegemea GitLab CI unafaa kwa kusambaza programu kwa kutumia chati za Helm. Wakati huo huo, utoaji wa kupelekwa ndani ya mabomba hufuatiliwa kwa kutumia chombo werf. Kwa njia, katika muktadha wa mradi wetu huu, tulisikia "GitOps" mara kwa mara tulipojadili shida kubwa za wahandisi wa DevOps kwenye msimamo wetu wa KubeCon Europe'19.

PPS kutoka kwa mtafsiri

Soma pia kwenye blogi yetu:

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Je, unatumia GitOps?

  • Ndio, vuta mbinu

  • Ndiyo, sukuma

  • Ndiyo, vuta + sukuma

  • Ndiyo, kitu kingine

  • Hakuna

Watumiaji 30 walipiga kura. Watumiaji 10 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni