GitOps: A Pull és Push módszerek összehasonlítása

Jegyzet. ford.: A Kubernetes közösségben a GitOps nevű trend nyilvánvaló népszerűségnek örvend, ahogy azt személyesen is láthattuk, látogató KubeCon Europe 2019. Ez a kifejezés viszonylag friss volt feltalált a Weaveworks vezetője - Alexis Richardson -, és a fejlesztők számára ismert eszközök (elsősorban Git, innen a név) használatát jelenti a működési problémák megoldására. Konkrétan a Kubernetes működéséről beszélünk a konfigurációk Gitben történő tárolásával és a fürt módosításainak automatikus bevezetésével. Matthias Jg ebben a cikkben ennek a kiterjesztésnek két megközelítéséről beszél.

GitOps: A Pull és Push módszerek összehasonlítása

Az elmúlt évben (sőt, formálisan ez 2017 augusztusában történt – kb. fordítás.) A Kubernetesben új megközelítés létezik az alkalmazások üzembe helyezésére. Ezt GitOps-nak hívják, és azon az alapgondolaton alapul, hogy a telepítési verziók nyomon követhetők a Git-tároló biztonságos környezetében.

Ennek a megközelítésnek a fő előnyei a következők::

  1. Üzembe helyezési verziók és változástörténet. A teljes fürt állapotát egy Git-lerakatban tárolják, és a központi telepítések csak véglegesítéseken keresztül frissülnek. Ezenkívül minden változás nyomon követhető a véglegesítési előzmények segítségével.
  2. Visszagörgetés az ismert Git-parancsok használatával... Egyszerű git reset lehetővé teszi a telepítések változásainak visszaállítását; a múltbeli állapotok mindig rendelkezésre állnak.
  3. Kész hozzáférés-szabályozás. Egy Git rendszer jellemzően sok érzékeny adatot tartalmaz, ezért a legtöbb cég kiemelt figyelmet fordít ezek védelmére. Ennek megfelelően ez a védelem a telepítésekkel végzett műveletekre is vonatkozik.
  4. Telepítési szabályzatok. A legtöbb Git-rendszer natívan támogatja az ágonkénti házirendeket – például csak a lekérési kérelmek frissíthetik a mestert, és a változtatásokat egy másik csapattagnak át kell tekintenie és el kell fogadnia. A hozzáférés-szabályozáshoz hasonlóan a központi telepítési frissítésekre is ugyanazok a házirendek vonatkoznak.

Amint láthatja, a GitOps módszernek számos előnye van. Az elmúlt évben két megközelítés vált különösen népszerűvé. Az egyik push alapú, a másik húzás alapú. Mielőtt megvizsgálnánk őket, először nézzük meg, hogyan néznek ki a tipikus Kubernetes-telepítések.

Telepítési módszerek

Az elmúlt években a Kubernetesben különféle módszerek és eszközök jelentek meg a telepítéshez:

  1. Natív Kubernetes/Kustomize sablonokon alapul. Ez a legegyszerűbb módja az alkalmazások telepítésének a Kubernetes rendszeren. A fejlesztő létrehozza az alapvető YAML fájlokat és alkalmazza azokat. Az azonos sablonok állandó újraírásától való megszabadulás érdekében a Kustomize-t fejlesztették ki (a Kubernetes sablonokat modulokká alakítja). Jegyzet. ford.: A Kustomize integrálva lett a kubectl-be a Kubernetes 1.14 kiadása.
  2. Helm Charts. A Helm diagramok lehetővé teszik sablonkészletek, init-tárolók, oldalkocsik stb. létrehozását, amelyek segítségével rugalmasabb testreszabási lehetőségeket kínáló alkalmazások telepíthetők, mint a sablonalapú megközelítésben. Ez a módszer sablonos YAML-fájlokon alapul. A Helm különféle paraméterekkel tölti meg őket, majd elküldi a Tillernek, egy fürtkomponensnek, amely telepíti őket a fürtbe, és lehetővé teszi a frissítéseket és a visszaállításokat. A lényeg az, hogy a Helm lényegében csak beszúrja a kívánt értékeket a sablonokba, majd ugyanúgy alkalmazza azokat, mint a hagyományos megközelítésben. (További információ arról, hogy mindez hogyan működik, és hogyan használhatod fel a mi oldalunkban Helm cikke - kb. fordítás.). A kész Helm diagramok széles választéka létezik, amelyek a feladatok széles skáláját fedik le.
  3. Alternatív eszközök. Számos alternatív eszköz létezik. Mindannyiukban az a közös, hogy egyes sablonfájlokat Kubernetes által olvasható YAML-fájlokká alakítanak, majd felhasználják őket.

Munkánk során folyamatosan használjuk a Helm diagramokat a fontos eszközökhöz (hiszen már sok minden készen van, ami nagyban megkönnyíti az életet), illetve a „tiszta” Kubernetes YAML fájlokat saját alkalmazásaink telepítéséhez.

Húz tol

Az egyik legutóbbi blogbejegyzésemben bemutattam az eszközt Weave Flux, amely lehetővé teszi a sablonok véglegesítését a Git-tárban, és a központi telepítés frissítését a tároló minden véglegesítése vagy leküldése után. Tapasztalataim azt mutatják, hogy ez az eszköz az egyik fő eszköz a pull megközelítés népszerűsítésében, ezért gyakran hivatkozom rá. Ha többet szeretne tudni a használatáról, itt link a cikkhez.

Megjegyzés! A GitOps használatának minden előnye ugyanaz marad mindkét megközelítésben.

Húzás alapú megközelítés

GitOps: A Pull és Push módszerek összehasonlítása

A lehívási megközelítés azon a tényen alapszik, hogy minden változás a fürtön belülről történik. A fürtön belül van egy operátor, aki rendszeresen ellenőrzi a kapcsolódó Git és Docker Registry tárolókat. Ha bármilyen változás történik bennük, a fürt állapota belsőleg frissül. Ez a folyamat általában nagyon biztonságosnak tekinthető, mivel egyetlen külső ügyfél sem fér hozzá a fürt rendszergazdai jogaihoz.

Előnyök:

  1. Egyetlen külső ügyfélnek sincs joga módosítani a fürtön; minden frissítés belülről kerül bevezetésre.
  2. Egyes eszközök lehetővé teszik a Helm diagram frissítéseinek szinkronizálását és a fürthöz való kapcsolását is.
  3. A Docker Registry átvizsgálható új verziókért. Ha új lemezkép áll rendelkezésre, a Git-tárház és a központi telepítés az új verzióra frissül.
  4. A lehúzási eszközök különböző névterek között oszthatók el különböző Git-tárolókkal és engedélyekkel. Ennek köszönhetően több bérlős modell is használható. Például az A csapat használhatja az A névteret, a B csapat használhatja a B névteret, az infrastruktúra csoport pedig a globális teret.
  5. Általában az eszközök nagyon könnyűek.
  6. Olyan eszközökkel kombinálva, mint a kezelő Bitnami lezárt titkok, a titkok titkosítva tárolhatók egy Git-tárolóban, és lekérhetők a fürtön belül.
  7. Nincs kapcsolat a CD-folyamatokkal, mivel a telepítések a fürtön belül történnek.

Hátrányok:

  1. Az üzembe helyezési titkok kezelése Helm diagramokból nehezebb, mint a hagyományosaké, mivel először le kell őket generálni mondjuk lezárt titkok formájában, majd egy belső operátorral dekódolni kell, és csak ezt követően válnak elérhetővé a pull tool számára. Ezután futtathatja a kiadást a Helmben a már telepített titkok értékeivel. A legegyszerűbb módja annak, hogy létrehozzon egy titkot a telepítéshez használt Helm összes értékével, visszafejtse és véglegesítse a Gitben.
  2. Ha húzós megközelítést alkalmazol, húzószerszámokhoz leszel kötve. Ez korlátozza a telepítési folyamat testreszabásának lehetőségét egy fürtben. Például a Kustomize-t bonyolítja az a tény, hogy le kell futnia, mielőtt a végső sablonokat a Githez kötik. Nem azt mondom, hogy nem használhat önálló eszközöket, de ezeket nehezebb integrálni a telepítési folyamatba.

Push alapú megközelítés

GitOps: A Pull és Push módszerek összehasonlítása

A leküldéses megközelítésben egy külső rendszer (főleg CD-folyamatok) elindítja a központi telepítést a fürtben a Git-lerakatra vonatkozó véglegesítés után, vagy ha az előző CI-folyamat sikeres volt. Ebben a megközelítésben a rendszer hozzáfér a fürthöz.

Érvek:

  1. A biztonságot a Git adattár és a build folyamat határozza meg.
  2. A Helm diagramok telepítése egyszerűbb, és támogatja a Helm beépülő modulokat.
  3. A titkokat könnyebb kezelni, mert a titkok csővezetékekben használhatók, és Gitben titkosítva is tárolhatók (a felhasználó preferenciáitól függően).
  4. Nincs kapcsolat egy adott szerszámmal, mivel bármilyen típus használható.
  5. A tárolóverzió frissítését az összeállítási folyamat kezdeményezheti.

Hátrányok:

  1. A fürt hozzáférési adatok az összeállítási rendszeren belül vannak.
  2. A telepítési tárolók frissítése továbbra is egyszerűbb lekérési folyamattal.
  3. Erősen függ a CD-rendszertől, mivel a szükséges folyamatokat eredetileg a Gitlab Runners számára írták, majd a csapat úgy dönt, hogy az Azure DevOps-ra vagy a Jenkins-re költözik... és nagyszámú build-folyamatot kell migrálnia.

Eredmények: Push vagy Pull?

Mint általában, minden megközelítésnek megvannak a maga előnyei és hátrányai. Egyes feladatokat az egyikkel könnyebben, a másikkal nehezebben lehet végrehajtani. Eleinte manuálisan végeztem az üzembe helyezést, de miután találkoztam néhány cikkel a Weave Flux-ról, úgy döntöttem, hogy minden projektben megvalósítom a GitOps folyamatokat. Az alapsablonoknál ez könnyű volt, de aztán nehézségekbe ütköztem a Helm diagramokkal. Akkoriban a Weave Flux csak a Helm Chart Operator kezdetleges verzióját kínálta, de néhány feladat még most is nehezebb a titkok manuális létrehozása és alkalmazása miatt. Érvelhetnénk, hogy a lehívási megközelítés sokkal biztonságosabb, mivel a fürt hitelesítő adatai nem érhetők el a fürtön kívül, így sokkal biztonságosabb, hogy megéri az extra erőfeszítést.

Némi gondolkodás után arra a váratlan következtetésre jutottam, hogy ez nem így van. Ha a maximális védelmet igénylő összetevőkről beszélünk, akkor ez a lista tartalmazza a titkos tárolást, a CI/CD-rendszereket és a Git-tárolókat. A bennük lévő információ nagyon sérülékeny, és maximális védelmet igényel. Ezen túlmenően, ha valaki belép a Git-tárházába, és kódot küldhet oda, azt telepítheti, amit akar (legyen az pull vagy push), és behatol a fürt rendszereibe. Így a legfontosabb védendő összetevők a Git adattár és a CI/CD rendszerek, nem pedig a fürt hitelesítő adatai. Ha jól konfigurált házirendekkel és biztonsági vezérlőkkel rendelkezik az ilyen típusú rendszerekhez, és a fürt hitelesítő adatait csak titokként vonják ki a folyamatokba, akkor előfordulhat, hogy a lehívási megközelítés hozzáadott biztonsága nem lesz olyan értékes, mint azt eredetileg gondoltuk.

Tehát, ha a pull megközelítés munkaigényesebb, és nem nyújt biztonsági előnyt, nem logikus-e csak a push megközelítés alkalmazása? De valaki azzal érvelhet, hogy a push megközelítésben túlságosan kötődik a CD-rendszerhez, és talán jobb, ha ezt nem teszi meg, hogy a jövőben könnyebb legyen az áttelepítés.

Véleményem szerint (mint mindig) azt kell használni, ami egy adott esethez vagy kombájnhoz a legalkalmasabb. Személy szerint mindkét megközelítést használom: a Weave Flux-ot a húzás alapú telepítésekhez, amelyek többnyire saját szolgáltatásainkat tartalmazzák, és a push megközelítést Helmmel és bővítményekkel, amely megkönnyíti a Helm diagramok fürtre való alkalmazását, és lehetővé teszi a titkok zökkenőmentes létrehozását. Szerintem soha nem lesz egyetlen, minden esetre megfelelő megoldás, mert mindig sok az árnyalat, ami az adott alkalmazástól függ. Ennek ellenére nagyon ajánlom a GitOpsot – ez nagyban megkönnyíti az életet és javítja a biztonságot.

Remélem, a témával kapcsolatos tapasztalataim segítenek eldönteni, hogy melyik módszer felel meg jobban az Ön bevetési típusának, és szívesen meghallgatom a véleményét.

PS Megjegyzés a fordítótól

A pull modell hátránya, hogy nehéz a renderelt manifeszteket a Gitbe helyezni, de nincs hátránya, hogy a pull modellben a CD-folyamat elkülönül a közzétételtől, és lényegében kategóriafolyamattá válik. Folyamatos alkalmazás. Ezért még több erőfeszítésre lesz szükség ahhoz, hogy az összes telepítésből összegyűjtsük az állapotukat, és valamilyen módon hozzáférést biztosítsunk a naplókhoz/állapotokhoz, lehetőleg a CD-rendszerre hivatkozva.

Ebben az értelemben a push modell lehetővé teszi számunkra, hogy legalább bizonyos garanciákat nyújtsunk a kiépítésre, mivel a csővezeték élettartama egyenlővé tehető a kiterítés élettartamával.

Mindkét modellt kipróbáltuk, és ugyanazokra a következtetésekre jutottunk, mint a cikk szerzője:

  1. A pull modell alkalmas arra, hogy a rendszerkomponensek frissítéseit nagyszámú klaszteren szervezzük (lásd. cikk az addon-operatorról).
  2. A GitLab CI-n alapuló push modell kiválóan alkalmas Helm diagramokat használó alkalmazások bevezetésére. Ezzel egyidejűleg az eszközzel figyelik a csővezetékeken belüli telepítések kiépítését werf. Ezzel a projektünkkel kapcsolatban egyébként az állandó „GitOps”-t hallottuk, amikor a KubeCon Europe'19-es standunkon megvitattuk a DevOps mérnökök sürgető problémáit.

PPS a fordítótól

Olvassa el blogunkon is:

A felmérésben csak regisztrált felhasználók vehetnek részt. Bejelentkezés, kérem.

GitOps-ot használsz?

  • Igen, húzós megközelítés

  • Igen, nyomja

  • Igen, húzza + nyomja

  • Igen, valami más

  • Nincs

30 felhasználó szavazott. 10 felhasználó tartózkodott.

Forrás: will.com

Hozzászólás