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

Megjegyzés fordítás.: A Kubernetes közösségben egyre népszerűbbé válik a GitOps néven ismert trend, aminek mi is tanúi voltunk, amikor részt vettünk a KubeCon Europe 2019-en. Ez a kifejezés viszonylag nemrégiben került kitalálásra a Weaveworks cég vezetője, Alexis Richardson által, és azt jelenti, hogy a fejlesztők által megszokott eszközöket (elsősorban a Git-et, ahonnan a név is származik) alkalmazzák az üzemeltetési feladatok megoldására. Különösen arról van szó, hogy a Kubernetes üzemeltetését a konfigurációk Git-ben történő tárolásával és a változások automatikus kihelyezésével végezzük a klaszteren. Matthias Jg erre a kihelyezési folyamatra két megközelítést ismertet ebben a cikkben.

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

Tavaly (valójában formálisan ez 2017 augusztusában történt — a fordító megjegyzése) megjelenik egy új megközelítés az alkalmazások Kubernetes alá történő telepítésében. Ezt GitOps-nak hívják, és alapvetően az a gondolat áll mögötte, hogy a deployment-ek verziókövetését egy Git-repo biztonságos környezetében végzik.

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

  1. A deployment-ek verziókövetése és a változások története. Az egész klaszter állapota Git-repo-ban van tárolva, és a deployment-eket kizárólag ún. commit-ok útján frissítjük. Ezenkívül az összes változást a commit-történet segítségével lehet nyomon követni.
  2. Rollback a megszokott Git parancsokkal. Egyszerű git reset lehetővé teszi az események visszaállítását a deployment-ekben; mindig elérhetők a korábbi állapotok.
  3. Kész hozzáférés-ellenőrzés. A Git rendszer általában számos bizalmas adatot tartalmaz, ezért a legtöbb cég különös figyelmet fordít a védelemre. Ennek megfelelően ez a védelem a deployment-ekkel kapcsolatos műveletekre is vonatkozik.
  4. Politikák a telepítésekhez. A legtöbb Git rendszer alapértelmezetten támogatja a különböző ágak politikáit — például csak a pull request-ek frissíthetik a master-t, a változásokat pedig egy másik csapattag jóváhagyása szükséges. Mint a hozzáférés-ellenőrzés esetében, ugyanazok a politikák vonatkoznak a deployment-ek frissítéseire is.

Ahogy látható, a GitOps módszernek számos előnye van. Az elmúlt évben két közkedvelt megközelítés vált népszerűvé. Az egyik a push, a másik a pull alapú. Mielőtt rátérnénk ezekre, először nézzük meg, hogyan is néznek ki a tipikus Kubernetes deployment-ek.

Telepítési módok

Az utóbbi években a Kubernetes-alapú különféle telepítési módok és eszközök alakultak ki:

  1. A Kubernetes / Kustomize natív sablonjaira alapozvaEz a legegyszerűbb módja az alkalmazások telepítésének a Kubernetesben. A fejlesztő alap YAML fájlokat készít és alkalmazza őket. Annak érdekében, hogy megszabaduljon az állandóan újraírható sablonoktól, kifejlesztették a Kustomize-ot (ez a Kubernetes sablonokat modulokká alakítja). Megjegyzés fordítás.: A Kustomize integrálva van a kubectl-lel a Kubernetes 1.14-es verziójával..
  2. Helm chartok.A Helm chartok lehetővé teszik sablonok, init-konténerek, sidecar-ok stb. készleteinek létrehozását, amelyek rugalmasabb konfigurálási lehetőségeket kínálnak az alkalmazások telepítésére, mint a sablontalapú megközelítés. Ennek a metodológiának a lényege sablonozott YAML fájlokban rejlik. A Helm kitölti őket különböző paraméterekkel, majd elküldi a Tiller-nek – a klaszter összetevőjének, amely telepíti őket a klaszterben, és lehetővé teszi a frissítéseket és visszagörgetéseket. Fontos megjegyezni, hogy a Helm lényegében csak megfelelő értékeket illeszt a sablonokba, és alkalmazza őket, ahogy azt a klasszikus megközelítésnél is teszik. (további információkat arról, hogyan működik mindez, és hogyan használható, olvasson el a Helm cikkünkből. — a fordító megjegyzése). Számos kész Helm chart létezik, amelyek széles spektrumú feladatokat ölelnek fel.
  3. Alternatív eszközök.Sok alternatív eszköz létezik. Közös bennük, hogy átalakítanak bizonyos sablon fájlokat érthető Kubernetes YAML fájlokká, majd alkalmazzák őket.

A munkánk során folyamatosan használunk Helm chartokat fontos eszközökhöz (mivel sok minden készen áll, ami jelentősen megkönnyíti az életünket), és "tiszta" Kubernetes YAML fájlokat a saját alkalmazásaink telepítésére.

Pull & Push.

A közelmúltban a blogomban bemutattam egy eszközt, Weave Fluxamely lehetővé teszi a sablonok git-repozitóriumba való elkötelezését és a telepítés frissítését minden elkötelezés vagy konténer push után. Tapasztalataim szerint ez az eszköz az egyik alapvető segédeszköz a pull megközelítés népszerűsítésében, ezért gyakran hivatkozni fogok rá. Ha többet szeretne megtudni annak használatáról, itt van egy link a cikkhez..

NB! A GitOps használatának minden előnye érvényesül mindkét megközelítésnél.

Pull megközelítés

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

A pull megközelítés alapja az a tény, hogy minden változtatás a klaszter belsejéből történik. A klaszterben van egy operátor, amely folyamatosan ellenőrzi a kapcsolódó Git és Docker Registry-repozitóriumokat. Ha ezekben bármilyen változás történik, a klaszter állapota belülről frissül. Általában úgy vélik, hogy az ilyen folyamat rendkívül biztonságos, mivel egyetlen külső kliens sem fér hozzá a klaszter adminisztrátori jogaihoz.

Előnyök:

  1. Egyetlen külső kliens sem rendelkezik jogosultsággal a klaszter módosítására, az összes frissítést belülről hajtják végre.
  2. Néhány eszköz lehetővé teszi a Helm-diagramok frissítéseinek szinkronizálását és a klaszterhez való kötését.
  3. A Docker Registry kereshető új verziók után. Ha új kép jelenik meg, a Git-repozitórium és a telepítés frissül az új verzióra.
  4. A pull-eszközök különböző névtérben, különböző Git-repozitóriumokkal és jogosultságokkal oszthatók el. Ennek köszönhetően alkalmazható a multitenant modell. Például az A csapat az A névteret használhatja, a B csapat a B névteret, míg az infrastruktúrával foglalkozó csapat globális névteret használhat.
  5. Általában az eszközök meglehetősen könnyűek.
  6. Olyan eszközökkel, mint az operátor Bitnami Sealed Secrets, a titkok titkosított formában tárolhatók a Git-repozitóriumban, és a klaszter belsejében vonhatók ki.
  7. Nincs kapcsolat a CD-pipeline-ekkel, mivel a telepítések a klaszter belsejében történnek.

Hátrányok:

  1. A Helm-diagramokból származó telepítések titkainak kezelése nehezebb, mint a hagyományosak, mivel először azokat például sealed secrets formájában kell generálni, majd a belső operátor titkosítja őket, és csak ezután válnak elérhetővé a pull-eszköz számára. Ezután lehet a Helm-ben kiadást indítani az már telepített titkokban lévő értékekkel. A legegyszerűbb módszer, ha készítünk egy titkot minden Helm értékkel, amelyet a telepítéshez használnak, ezt titkosítjuk és elkötelezzük a Git-ben.
  2. A pull módszer alkalmazásával a pull-eszközökhöz vagyunk kötve. Ez korlátozza a telepítési folyamat testreszabásának lehetőségét a klaszterben. Például a Kustomize használata nehezebb, mivel annak a végső sablonok Git-be történő felbocsátása előtt kell futnia. Nem azt mondom, hogy nem lehet külön eszközöket használni, de azokat 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 push megközelítésben egy külső rendszer (elsősorban CD-pipeline-ok) indít el telepítéseket a klaszterben a Git tárolóba történő elköteleződés után vagy a korábbi CI-pipeline sikeres futása esetén. Ebben a megközelítésben a rendszer hozzáféréssel rendelkezik a klaszterhez.

Előnyök:

  1. A biztonság a Git tároló és a build pipeline által meghatározott.
  2. A Helm chartok telepítése egyszerűbb, Héjpluginok támogatásával.
  3. A titkok kezelése könnyebb, mivel a titkok a pipeline-okban alkalmazhatók, illetve titkosított formában tárolhatók a Git-ben (a felhasználó preferenciái szerint).
  4. Nincs kötődés egy adott eszközhöz, mivel bármilyen típusú eszköz használható.
  5. A konténerváltozások frissítéseket a build pipeline indíthatja.

Hátrányok:

  1. A klaszterhez való hozzáférés adatai a build rendszeren belül találhatók.
  2. A telepítések konténereinek frissítése továbbra is egyszerűbb a pull folyamattal.
  3. Erős függőség a CD-rendszertől, mivel a szükséges pipeline-ok esetleg eredetileg Gitlab Runners-re íródtak, majd a csapat úgy dönt, hogy átáll az Azure DevOps-ra vagy Jenkinsre... és sok build pipeline migrálására lehet szükség.

Összegzés: Push vagy Pull?

Mint ahogy az lenni szokott, minden megközelítésnek megvannak a maga előnyei és hátrányai. Egyes feladatokat könnyebb egyik módszerrel végrehajtani, míg másokkal nehezebb. Eleinte manuálisan végeztem a telepítéseket, de miután rábukkantam néhány cikkre a Weave Fluxról, úgy döntöttem, hogy GitOps folyamatokat vezetek be minden projektbe. Az alap sablonok esetében ez egyszerűnek bizonyult, de később nehézségekbe ütköztem a Helm chartokkal kapcsolatban. Akkoriban a Weave Flux csak a Helm Chart Operator kezdeti verzióját kínálta, de még most is vannak olyan feladatok, amelyeket nehezít a titkok manuális létrehozásának és alkalmazásának szükségessége. Mondhatná, hogy a pull megközelítés sokkal biztonságosabb, mivel a klaszter hitelesítő adatai nem hozzáférhetők azon kívül, ami annyira növeli a biztonságot, hogy megérdemli a plusz erőfeszítést.

Egy kis gondolkodás után meglepő következtetésre jutottam: ez nem így van. Ha a maximális védelmet igénylő komponensekről beszélünk, a titkos adattárolók és a CI/CD rendszerek, a Git-repozitóriumok felkerülnek a listára. Az információk bennük meglehetősen sebezhetőek, és maximális védelemre van szükségük. Ezen kívül, ha valaki behatol a Git-repozitóriumába, és tud oda kódot push-olni, akkor mindent telepíthet, amit csak akar (függetlenül attól, hogy pull vagy push megközelítést választ), és behatolhat a klaszter rendszereibe. Így a legfontosabb védendő komponensek a Git-repozitórium és a CI/CD rendszerek, nem pedig a klaszter hitelesítő adatai. Ha jól konfigurálta a politikákat és biztonsági intézkedéseket az ilyen típusú rendszerekhez, és a klaszter hitelesítő adatai csak titkok formájában vonhatók ki a pipeline-okba, akkor a pull megközelítés további biztonsága lehet, hogy nem olyan értékes, mint eredetileg gondolták.

Tehát, ha a pull megközelítés munkaigényesebb és nem nyújt biztonsági előnyt, nem lenne logikus csak a push megközelítést használni? De valaki azt mondhatja, hogy a push megközelítésnél túlzottan függ a CD-rendszertől, és talán jobb elkerülni ezt, hogy a jövőben könnyebb legyen a migráció.

Szerintem (mint mindig) azt kell használni, ami jobban illik a konkrét esetre, vagy kombinálni kell a megoldásokat. Én személy szerint mindkét megközelítést alkalmazom: a Weave Fluxot az olyan telepítésekhez, amelyek a pull alapúak és főként a saját szolgáltatásainkat tartalmazzák, és a Helm alapú push megközelítést, amely megkönnyíti a Helm chartok alkalmazását a klaszterre és lehetővé teszi a titkok egyszerű létrehozását. Úgy gondolom, sosem lesz egyetlen megoldás, ami mindenkire érvényes, mert rengeteg árnyalat van, és ezek a konkrét alkalmazási lehetőségektől függenek. Ugyanakkor határozottan ajánlom a GitOps-ot — ez jelentősen megkönnyíti az életet és növeli a biztonságot.

Remélem, a tapasztalataim segítenek eldönteni, hogy melyik módszer a legmegfelelőbb az önök telepítési típusához, és örömmel várom a véleményüket.

P.S. Megjegyzés a fordítótól

A pull modell hátrányai között van, hogy nehéz Git-be rakni a renderelt manifestumokat, azonban nem hátrány, hogy a CD-pipeline a pull modellben külön él a telepítéstől, és lényegében egy külön kategóriájú pipeline-ná válik. Folyamatos Alkalmazás. Ezért még több erőfeszítést igényel, hogy összegyűjtsük az összes telepítés státuszát, és valahogy hozzáférést biztosítsunk a naplókhoz/státuszhoz, lehetőleg a CD rendszerhez kapcsolódóan.

Ebben az értelemben a push modell némi garanciát ad a telepítésre, mert a pipeline élettartama egyenlő lehet a telepítés élettartamával.

Kipróbáltuk mindkét modellt, és ugyanerre a következtetésre jutottunk, mint a cikk szerzője:

  1. A pull modell alkalmas a rendszerszintű komponensek frissítésének megszervezésére nagy számú klaszterben (lásd: a kiegészítő operátorral kapcsolatos cikket).
  2. A GitLab CI alapú push modell jól használható az alkalmazások telepítésére Helm chartok segítségével. A telepítések követését a pipeline keretein belül egy eszköz segítségével valósítjuk meg. werf. Érdekes, hogy a projektünk kontextusában állandóan hallottuk a „GitOps”-ot, amikor a DevOps mérnökök sürgető problémáit vitattuk meg a KubeCon Europe ’19-es rendezvényen.

Megjegyzés: Ez a cikk az IBM Cloud mérnökei által végzett mini-kutatás eredménye, amely a valós problémák megoldását célozta meg az etcd adatbázis üzemeltetésével kapcsolatban.

Olvasson további információkat a blogunkban:

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Használja a GitOps-t?

  • Igen, pull megközelítés

  • Igen, push

  • Igen, pull + push

  • Igen, valami más

  • Nem

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

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster