GitOps
At drive systemer, så filer under versionsstyring er den eneste gyldige beskrivelse, og software hele tiden retter driften ind efter dem.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
En driftsmodel, hvor et systems ønskede tilstand skrives som filer under versionsstyring, ændringer kun sker ved at ændre filerne, og en agent inde i systemet løbende henter filerne og retter enhver forskel, den finder.
Forklaret enkelt
Som en butik, hvor prislisten på væggen er reglen; hvis nogen ændrer et prismærke på hylden, sætter personalet det tilbage, så det passer med væggen.
I praksis
Før der åbnes for booking af influenzavaccine, beder en driftsmedarbejder i regionens IT-afdeling om to ekstra kopier af bookingtjenesten ved at rette en fil; når ændringen er godkendt, starter systemet selv kopierne inden for få minutter.
Hvorfor det betyder noget
Hver ændring går gennem en gennemgang og efterlader et spor, folk har mindre brug for direkte adgang til driften, og håndlavede ændringer rulles automatisk tilbage i stedet for at ligge ubemærket hen.
Sådan kommer du i gang
De typiske trin i rækkefølge. Tilpas dem til jeres organisation.
- Beskriv hvert miljøs ønskede tilstand deklarativt (ren YAML, Kustomize eller Helm), og hold den i et config-repository adskilt fra applikationens kildekode.
- Beskyt config-repositoryet med grenbeskyttelse, krævede gennemgange, signerede commits og code owners for produktionsmapperne.
- Installér en GitOps-agent som Argo CD eller Flux i hver klynge, giv den service accounts med mindste privilegium pr. applikation i stedet for cluster-admin, og begræns, hvilke repositories og namespaces hver applikation må ramme.
- Lad CI bygge, scanne og signere imaget og derefter oprette en pull request, der opdaterer image-digesten i config-repositoryet, så CI aldrig har brug for legitimationsoplysninger til klyngen.
- Slå automatisk synkronisering med self-heal og pruning til, så manuelle ændringer rulles tilbage, og objekter, der er fjernet fra repositoryet, slettes.
- Hold hemmeligheder ude af repositoryet i klartekst ved at bruge Sealed Secrets, SOPS-krypterede filer eller External Secrets Operator med et eksternt lager.
- Promovér en udgivelse mellem miljøer ved at flette en gennemgået pull request, og rul tilbage ved at lave revert på commit'et.
- Alarmér ved fejlede synkroniseringer og afvigelser, gennemgå ignore-regler jævnligt, og dokumentér en nødprocedure (break-glass) til når Git-værten er utilgængelig.
Typiske faldgruber
- At lade agenten og en autoskalerer kæmpe om de samme felter, fx antal replikaer, så afstemningen aldrig falder til ro.
- At køre GitOps-controlleren som cluster-admin overalt, så enhver, der kan flette til repositoryet, styrer alle klynger.
- At committe hemmeligheder i klartekst, fordi repositoryet er privat.
- At pege på en flyttende grens HEAD eller flydende chart-versioner i stedet for låste commits eller digests, så den udrullede tilstand ændrer sig uden et gennemgået commit.
Gode vejledninger
- OpenGitOps Principles v1.0.0(åbner i en ny fane) · CNCF OpenGitOps (på engelsk)
- Argo CD - Best Practices(åbner i en ny fane) · Argo Project (på engelsk)
- Flux - Security Documentation(åbner i en ny fane) · CNCF (på engelsk)
- NIST SP 800-204D - Strategies for the Integration of Software Supply Chain Security in DevSecOps CI/CD Pipelines(åbner i en ny fane) · NIST (på engelsk)
Teknisk uddybning
Begrebet blev skabt i 2017 af Alexis Richardson fra Weaveworks, hvis værktøj Flux først implementerede det til Kubernetes. CNCF-projektet OpenGitOps har siden kogt det ned til fire principper (v1.0.0): systemets ønskede tilstand udtrykkes deklarativt; den gemmes versioneret og uforanderligt med en komplet historik; softwareagenter trækker automatisk den ønskede tilstand fra denne kilde; og agenterne afstemmer løbende den faktiske tilstand mod den. Git er det sædvanlige lager, men ikke et krav - OCI-artefakter i et registry opfylder de samme principper og bruges i stigende grad som transport.
Referenceimplementeringerne er Argo CD og Flux, begge graduerede CNCF-projekter. En controller i klyngen kloner eller poller repositoryet (eller modtager en webhook), renderer manifesterne - ren YAML, Kustomize-overlays eller Helm-charts - beregner forskellen til de levende objekter med server-side apply eller three-way merge og anvender forskellen. Med automatisk synkronisering og self-heal slået til rulles en manuel kubectl edit tilbage ved næste afstemning; pruning sletter objekter, der er forsvundet fra repositoryet. Rækkefølge håndteres med sync waves og hooks (Argo CD) eller dependsOn og helbredstjek (Flux). En typisk opbygning adskiller applikationernes kilde-repositories fra et miljø- eller "config"-repository; CI bygger og signerer et image og opretter derefter en pull request, der opdaterer image-digesten i config-repoet, og promovering mellem miljøer er i sig selv en gennemgået fletning.
Pull-modellen er sikkerhedsargumentet: CI behøver ikke længere cluster-admin-legitimationsoplysninger, fordi kun agenten i klyngen skriver til API-serveren, og revisionssporet for ændringer i produktion er repositoryets historik over commits og gennemgange. Bagsiden er, at repositoryet - og den, der kan flette til dets beskyttede grene - nu reelt styrer produktionen. Kontrollerne omfatter grenbeskyttelse med krævede gennemgange, verifikation af signerede commits (både Argo CD og Flux kan afvise usignerede eller ikke-betroede revisioner), service accounts med mindste privilegium per applikation frem for én controller med cluster-admin og begrænsning af, hvilke repositories og namespaces hver applikation må ramme. Hemmeligheder kan ikke committes i klartekst, så teams bruger Sealed Secrets eller SOPS-krypterede filer eller henviser til eksterne lagre via External Secrets Operator.
GitOps adskiller sig fra infrastructure as code i omfang og mekanisme: IaC beskriver ressourcer deklarativt, men anvendes ofte i en push-model af en pipeline, der kører terraform apply, så afvigelser først opdages ved næste plan, mens GitOps tilføjer løbende afstemning drevet af en agent. Typiske fejl er afstemningsløkker, der kæmper med andre controllere som autoskalerere om de samme felter, afvigelser skjult af ignore-regler og nedbrud, når Git-værten er utilgængelig - kørende workloads fortsætter, men ingen kan ændre dem ad den normale vej.
Hvad du bør lære først
Alt det, dette bygger på - grundlaget først.
Relationer
- Forudsætter
- Infrastructure as code (IaC)Versionsstyring
- Bruges sammen med
- KubernetesCI/CDContainer-orkestreringChange management
Kilder og videre læsning
Standarder og officielle tekster
Opslagsværker
- OpenGitOps Principles v1.0.0 · CNCF OpenGitOps
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Test dig selv
Indlæser…