GitOps: JÀmförelse mellan Pull och Push-metoder

Obs. övers.: Inom Kubernetes-samhĂ€llet vinner en trend som kallas GitOps tydlig popularitet, vilket vi personligen har bevittnat, genom att besöka KubeCon Europe 2019. Denna term skapades relativt nyligen av chefen för Weaveworks – Alexis Richardson – och betyder tillĂ€mpningen av verktyg som utvecklare Ă€r vana vid (frĂ€mst Git, vilket ocksĂ„ ger namnet) för att lösa driftsĂ€ttningsproblem. Specifikt handlar det om driftsĂ€ttningen av Kubernetes genom att lagra dess konfigurationer i Git och automatiskt tillĂ€mpa Ă€ndringar i klustret. Om tvĂ„ tillvĂ€gagĂ„ngssĂ€tt för denna driftsĂ€ttning berĂ€ttar Matthias Jg i denna artikel.

GitOps: JÀmförelse mellan Pull och Push-metoder

Förra Ă„ret (egentligen skedde detta formellt i augusti 2017 – anm. övers.) introducerades en ny metod för driftsĂ€ttning av applikationer i Kubernetes. Den kallas GitOps och grundar sig pĂ„ en grundlĂ€ggande uppfattning om att versionshantering av deployment genomförs i en sĂ€ker miljö av Git-repositorier.

Huvudfördelarna med denna metod Àr följande:

  1. Versionshantering av deployments och Àndringshistorik. TillstÄndet för hela klustret lagras i Git-repositoriet, och deployments uppdateras endast genom commits. Dessutom kan alla Àndringar spÄras via commit-historiken.
  2. ÅterstĂ€llningar med hjĂ€lp av vanliga Git-kommandon. En enkel git reset möjliggör att Ă„terstĂ€lla Ă€ndringar i deployments; tidigare tillstĂ„nd finns alltid tillgĂ€ngliga.
  3. FÀrdigt Ätkomstkontroll. Vanligtvis innehÄller Git-systemet mÄnga konfidentiella uppgifter, sÄ de flesta företag lÀgger stor vikt vid dess skydd. DÀrför strÀcker sig detta skydd ocksÄ till operationer med deployments.
  4. Policies för driftsĂ€ttningar. De flesta Git-system stöder frĂ„n början policies för olika grenar – till exempel kan endast pull requests uppdatera master, och Ă€ndringar mĂ„ste kontrolleras och godkĂ€nnas av en annan teammedlem. Precis som med Ă„tkomstkontroll tillĂ€mpas samma policies pĂ„ uppdateringar av deployments.

Som ni ser har GitOps-metoden mĂ„nga fördelar. Under det senaste Ă„ret har tvĂ„ tillvĂ€gagĂ„ngssĂ€tt fĂ„tt sĂ€rskild popularitet. Det ena baseras pĂ„ push, det andra – pĂ„ pull. Innan vi diskuterar dem, lĂ„t oss först se hur typiska Kubernetes-deployments ser ut.

Metoder för driftsÀttning

Under de senaste Ären har olika metoder och verktyg för driftsÀttningar blivit etablerade i Kubernetes:

  1. Baserat pÄ ursprungliga mallar Kubernetes/KustomizeDet hÀr Àr det enklaste sÀttet att distribuera applikationer i Kubernetes. Utvecklaren skapar grundlÀggande YAML-filer och tillÀmpar dem. För att undvika att stÀndigt skriva om samma mallar, utvecklades Kustomize (som omvandlar Kubernetes-mallar till moduler). Obs. övers.: Kustomize har integrerats i kubectl med utgÄvan av Kubernetes 1.14.
  2. Helm Charts. Helm Charts möjliggör skapande av uppsĂ€ttningar av mallar, init-containrar, sidecars, och sĂ„ vidare, som tillĂ€mpas för distribution av applikationer med mer flexibla anpassningsmöjligheter Ă€n i mallbaserat tillvĂ€gagĂ„ngssĂ€tt. Grundprincipen i denna metod Ă€r mallade YAML-filer. Helm fyller i dem med olika parametrar och skickar dem sedan till Tiller — klusterkomponenten som distribuerar dem i klustret och möjliggör uppdateringar och bakĂ„tkopplingar. Det viktiga Ă€r att Helm i grunden bara infogar de nödvĂ€ndiga vĂ€rdena i mallarna och tillĂ€mpar dem pĂ„ samma sĂ€tt som i det traditionella tillvĂ€gagĂ„ngssĂ€ttet. (mer om hur detta fungerar och hur man kan anvĂ€nda det, lĂ€s i vĂ„r artikel om Helm — anm. red.). Det finns en stor variation av fĂ€rdiga Helm-chartar som tĂ€cker ett brett spektrum av uppgifter.
  3. Alternativa verktyg. Det finns mÄnga alternativa verktyg. Gemensamt för dem alla Àr att de omvandlar vissa mallfiler till begripbara Kubernetes YAML-filer och tillÀmpar dem.

I vÄrt arbete anvÀnder vi stÀndigt Helm-charts för viktiga verktyg (eftersom mycket redan Àr klart, vilket förenklar livet) och "rena" Kubernetes YAML-filer för att distribuera egna applikationer.

Pull & Push

I ett av sina senaste blogginlÀgg presenterade jag verktyget Weave Flux, som gör det möjligt att commita mallar till Git-repo och uppdatera distributionen efter varje commit eller push av containern. Min erfarenhet visar att detta verktyg Àr ett av de viktigaste för att frÀmja pull-ansatsen, sÄ jag kommer ofta att hÀnvisa till det. Om du vill veta mer om hur du anvÀnder det, hÀr Àr en lÀnk till artikeln.

NB! Alla fördelar med att anvÀnda GitOps kvarstÄr för bÄda tillvÀgagÄngssÀtena.

Pull-baserat tillvÀgagÄngssÀtt

GitOps: JÀmförelse mellan Pull och Push-metoder

I grunden för pull-metoden ligger det faktum att alla Àndringar tillÀmpas inifrÄn klustret. Inuti klustret finns en operator som regelbundet kontrollerar de relaterade Git-repositorierna och Docker-registret. Om det sker nÄgra Àndringar uppdateras klustrets tillstÄnd inifrÄn. Det anses vanligtvis att en sÄdan process Àr ganska sÀker, eftersom inga externa klienter har administratörsrÀttigheter till klustret.

Fördelar:

  1. Ingen extern klient har rÀttigheter att göra Àndringar i klustret, alla uppdateringar tillÀmpas inifrÄn.
  2. Vissa verktyg gör det ocksÄ möjligt att synkronisera uppdateringar av Helm-diagram och knyta dem till klustret.
  3. Docker-registret kan skannas efter nya versioner. Om en ny bild dyker upp, uppdateras Git-repositoriet och distributionen till den nya versionen.
  4. Pull-verktyg kan distribueras över olika namnrymder med olika Git-repositorier och ÄtkomstrÀttigheter. Detta gör det möjligt att tillÀmpa en fleranvÀndarmodell. Till exempel kan team A anvÀnda namnrymd A, team B namnrymd B, och teamet som hanterar infrastrukturen kan anvÀnda den globala namnrymden.
  5. I allmÀnhet Àr verktygen ganska lÀtta.
  6. I kombination med verktyg som operatorn Bitnami Sealed Secrets, kan hemligheter lagras krypterat i Git-repositoriet och hÀmtas inuti klustret.
  7. Det saknas kopplingar till CD-pipelines, eftersom distributionerna sker inuti klustret.

Nackdelar:

  1. Att hantera hemligheter för distributioner frÄn Helm-diagram Àr svÄrare Àn vanliga, eftersom de först mÄste genereras som till exempel sealed secrets, sedan avkrypteras av den interna operatören och först dÀrefter blir de tillgÀngliga för pull-verktyget. Efter det kan man köra en release i Helm med vÀrden i redan distribuerade hemligheter. Det enklaste sÀttet Àr att skapa en hemlighet med alla Helm-vÀrden som anvÀnds för distributionen, avkryptera den och göra en commit i Git.
  2. NÀr du anvÀnder pull-metoden Àr du bunden till verktyg som arbetar med pull. Detta begrÀnsar möjligheten att anpassa deploymentsprocessen i klustret. Till exempel kompliceras arbetet med Kustomize av det faktum att det mÄste utföras innan de slutgiltiga mallarna gÄr till Git. Jag sÀger inte att det Àr omöjligt att anvÀnda separata verktyg, men de Àr svÄrare att integrera i deploymentsprocessen.

Push-baserad metod

GitOps: JÀmförelse mellan Pull och Push-metoder

I push-metoden initierar ett externt system (vanligtvis CD-pipelines) deployment i klustret efter en commit till Git-repositoriet eller vid framgÄngsrik slutförande av föregÄende CI-pipeline. I denna metod har systemet Ätkomst till klustret.

Fördelar:

  1. SÀkerheten bestÀms av Git-repositoriet och byggpipen.
  2. Det Àr enklare att distribuera Helm-charts, det finns stöd för Helm-plugins.
  3. Det Àr lÀttare att hantera hemligheter, eftersom hemligheter kan tillÀmpas i pipelines och ocksÄ lagras i Git i krypterad form (beroende pÄ anvÀndarens preferenser).
  4. Ingen bindning till ett specifikt verktyg, eftersom alla typer av verktyg kan anvÀndas.
  5. Versionsuppdateringar av containrar kan initieras av byggpipen.

Nackdelar:

  1. Uppgifter för Ätkomst till klustret finns inom byggsystemet.
  2. Det Àr fortfarande enklare att uppdatera containrarna i deployments med pull-processen.
  3. Stark beroende av CD-systemet, eftersom de pipelines vi behöver kanske ursprungligen Ă€r skrivna för Gitlab Runners, och sedan bestĂ€mmer teamet sig för att byta till Azure DevOps eller Jenkins
 och det blir nödvĂ€ndigt att migrera en stor mĂ€ngd byggpipelines.

Sammanfattning: Push eller Pull?

Som vanligt har varje metod sina fördelar och nackdelar. Vissa uppgifter Àr lÀttare att genomföra med en metod och svÄrare med en annan. Jag började med att göra distributioner manuellt, men efter att ha snubblat över nÄgra artiklar om Weave Flux beslutade jag att implementera GitOps-processer för alla projekt. För grundlÀggande mallar var det enkelt, men sedan började jag stöta pÄ svÄrigheter med Helm-diagram. Vid den tiden erbjöd Weave Flux bara en tidig version av Helm Chart Operator, men Àven nu Àr vissa uppgifter svÄrare pÄ grund av behovet av att manuellt skapa hemligheter och tillÀmpa dem. Man kan sÀga att pull-metoden Àr mycket sÀkrare, eftersom klustrets autentiseringsuppgifter Àr otillgÀngliga utanför det, vilket ökar sÀkerheten sÄ mycket att det motiverar den extra anstrÀngningen.

Efter att ha funderat lite kom jag till en ovÀntad insikt, att det inte Àr sÄ. NÀr det gÀller komponenter som krÀver maximal sÀkerhet, sÄ finns hemlagringssystem och CI/CD-system samt Git-repositorier pÄ den listan. Informationen dÀr Àr ganska sÄrbar och behöver maximal skydd. Dessutom, om nÄgon tar sig in i ditt Git-repository och kan push:a kod dit, kan de distribuera allt de vill (oavsett om det Àr en pull- eller push-metod), och infiltrera kluster-systemen. DÀrför Àr de mest skyddskrÀvande komponenterna Git-repository och CI/CD-system, inte klustrets autentiseringsuppgifter. Om du har vÀlkonfigurerade sÀkerhetspolicies och ÄtgÀrder för sÄdana system, och klustrets autentiseringsuppgifter hÀmtas i pipelines endast som hemligheter, kan den extra sÀkerheten av pull-metoden visa sig vara mindre vÀrdefull Àn först antaget.

SÄ, om pull-metoden Àr mer arbetskrÀvande och inte ger nÄgra sÀkerhetsvinster, Àr det inte irrationellt att bara anvÀnda push-metoden? Men nÄgon kan hÀvda att i push-metoden Àr du alltför beroende av CI/CD-systemet och att det kanske Àr bÀttre att inte göra sÄ, sÄ att det i framtiden blir lÀttare att genomföra migrationer.

Enligt min Ă„sikt, som alltid, bör man anvĂ€nda det som passar bĂ€st för den specifika situationen eller kombinera. Personligen anvĂ€nder jag bĂ„da tillvĂ€gagĂ„ngssĂ€tten: Weave Flux för deployment baserat pĂ„ pull, vilket huvudsakligen involverar vĂ„ra egna tjĂ€nster, och push-metoden med Helm och tillĂ€gg som förenklar tillĂ€mpningen av Helm-charts till klustret och gör det möjligt att enkelt skapa hemligheter. Jag tror att det aldrig kommer att finnas en enhetlig lösning som passar alla fall, eftersom det alltid finns sĂ„ mĂ„nga nyanser som beror pĂ„ den specifika anvĂ€ndningsvarianten. Samtidigt rekommenderar jag starkt GitOps – det underlĂ€ttar livet och ökar sĂ€kerheten avsevĂ€rt.

Jag hoppas att min erfarenhet inom detta Àmne hjÀlper dig att avgöra vilken metod som passar bÀst för din typ av deployments, och jag skulle gÀrna vilja höra din Äsikt.

P.S. Notering frÄn översÀttaren

En nackdel med pull-modellen Àr att det Àr svÄrt att lÀgga de renderade manifesten i Git, men det finns ingen nackdel i att CD-pipelinen i pull-modellen lever separat frÄn rollout och i princip blir en pipeline av typen Continuous Apply. DÀrför kommer det att krÀvas Ànnu mer anstrÀngning för att samla status frÄn alla deployments och ge tillgÄng till loggar/status, helst kopplat till CD-systemet.

I detta avseende tillÄter push-modellen att vi ger vissa garantier för utrullning, eftersom livslÀngden för pipelinen kan göras lika med livslÀngden för utrullningen.

Vi har testat bÄda modellerna och kommit fram till samma slutsatser som artikelns författare:

  1. Pull-modellen passar oss för att organisera uppdatering av systemkomponenter pÄ ett stort antal kluster (se. artikeln om addon-operator).
  2. Push-modellen baserad pÄ GitLab CI passar bra för utrullning av applikationer med hjÀlp av Helm-charts. Samtidigt följs utrullningen av deployments inom ramen för pipeline genom verktyget werf. För övrigt, i samband med detta projekt hörde vi konstant "GitOps" nÀr vi diskuterade aktuella problem för DevOps-ingenjörer vid vÄr monter pÄ KubeCon Europe'19.

P.P.S. frÄn översÀttaren

LÀs Àven i vÄr blogg:

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

AnvÀnder du GitOps?

  • Ja, pull-metoden

  • Ja, push

  • Ja, pull + push

  • Ja, nĂ„got annat

  • Ingen

30 anvÀndare har röstat. 10 anvÀndare har avstÄtt.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster