- Shell 100%
| apps | app/prod: add bonfire | |
| clusters | app/prod: add bonfire | |
| infrastructure | infra/base: rm old gen-dev-plugin imageUpdateAuto. | |
| .gitignore | ignore text editor tmp files | |
| .pre-commit-config.yaml | add-pre-commit-hooks ( #8 ) | |
| .sops.yaml | add-pre-commit-hooks ( #8 ) | |
| .yamllint-config.yaml | add-pre-commit-hooks ( #8 ) | |
| LICENSE.md | repo: add LICENSE.md | |
| README.md | README: fix: rm unnecessary ./ prefix | |
| sops-decrypt.yaml | add-pre-commit-hooks ( #8 ) | |
Papiris' Kubernetes cluster med GitOps (FluxCD)
Introduksjon
Denne kildekodebrønnen brukes som sannhetskilde for digital infrastruktur. Jeg bruker en GitOps tilnærming, med NixOS på systemnivå: papiris/nix-config, og k3s med FluxCD for konteinerorkestrering.
Komponenter
Overvåkning / telemetri
En essensiell del av robust applikasjonsdrift er kontinuerlig overvåkning av systemets og applikasjonenes status og ressursbruk. Til dette benytter jeg kube-prometheus-stack.
Database
Kubernetes byr på spesielle utfordringer og muligheter. Databasen som møter disse best, til mitt bruk, er CloudnativePG
Konteinerorkestrering
Jeg vil ha noe som kan skalere, har et sterkt økosystem, som egner seg for GitOps, og er noenlunde ergonomisk i bruk. Derfor bruker jeg k3s, som er en minimal distribusjon av Kubernetes / k8s.
Leveransesystem / deployment system
Det finnes et par løsninger for kontinuerlig leveranse til k8s. Jeg har gode erfaringer med FluxCD fra før av, så det er det jeg bruker inntil videre.
Applikasjoner
Discourse
Discourse er et forumprosjekt som brukes bredt, og skalerer bra.
Home Assistant
Home Assistant brukes til å automatisere Strandmoa Gård, med sporing av sau, tilkoblede brannalarmer, sensorer og reléer.
Chirpstack
Chirpstack brukes til å innhente, dekode og videresende data fra LoRaWAN sauesporingsenheter.
Snowflake Proxy
Snowflake hjelper folk bak restriktive brannmurer og i autoritære regimer å koble seg til TOR-nettverket for fri kommunikasjon.
Dolibarr
Dolibarr er et fritt regnskapsprogram.
Lisens
Prosjektet utvikles og frigjøres under vilkårene i GNU Affero GPL versjon 3. Se LICENSE.md for detaljer. Programmene prosjektet bygger på, beholder sin opprinnelige lisens.
Hvordan bidra
Systemkrav
- For å kryptere hemmeligheter trenger du å ha tilgang til sops på systemet ditt. Aldri commit ukrypterte passord eller andre hemmeligheter!
- git
- gjerne signér dine commits med ssh eller gpg / openpgp
Hvordan endre krypterte verdier
For å minimere risikoen for lekkasjer, befinner den private gpg-nøkkelen seg kun i k3s-clusteren. For å endre krypterte verdier, må filen som inneholder verdiene slettes, lages på nytt med de uendrede og endrede verdiene, og krypteres med den offentlige gpg-nøkkelen.
For kryptering er det nok å gjøre sops -e -i <sti-til-filen>, men det er lurt å være i samme arbeidsmappe som filen er plassert, fordi enkelte filer har en tilpasset krypteringskonfigurasjonsfil plassert i samme mappe som seg. Er man ikke i samme mappen, kan hemmelige felt i filen ende opp ukrypterte.
Forgreninger / branches og Pull Requests (PR)
Unngå å commite på grenen main. Lag en ny gren for hver større logisk sammenhengende endring du foreslår, som f.eks. endring av chart-verdier i en applikasjon, eller å legge til en ny applikasjon. På grenen er det fint om endringen er delt opp i commits som enkeltvis kan plukkes bort og reverseres. Når endringen godkjennes av noen med commit-rettigheter, sammenføyes commitene på grenen sammen til én enkelt commit (squash), som så sammenføyes med grenen main. Den midlertidige forgreningen slettes.
Feilsøking og -retting
Kubernetes kan være noe vanskelig å feilsøke når man ikke er vant til det. Her følger en kort feilsøkingsguide, dersom noe ikke funker.
Innhente informasjon
kubectl get all -Afor å få oversikt over de fleste ressurser i alle navnerom og deres status.kubectl eventsfor å se generell status og hendelser på kubernetes clusteren og noden (maskinen). Det kan også være nyttig å se hendelser i spesifikke navnerom, somkubectl events -n {kube-system|flux-system|cnpg-system|discourse}kubectl get -n {navnerom} {deploy|pod|hr|pvc} -oyamlfor å få detaljert oversikt over en spesifikk ressurs.kubectl describe -n {navnerom} {deploy|pod|helmRelease|hr} -oyamlfor en annen type detaljert oversikt over en spesifikk ressurs.flux get ksfor å få en oversikt over de ulike konfigurasjonene (flux kustomization i dette git repoet) flux prøver å gjøre.kubectl logs -n {navnerom} {deploy|pod}for å få en spesifikk ressurs sin interne logg.free -h,df -h /,topogsudo du -h / | sort -hr | head -n 30gir nyttig informasjon om noden.
Rette feil
Et utvalg feil og deres utbedringstiltak
- Det er for lite ledig diskplass på noden (<12%): Rydd opp i nix-systemet med
sudo nix-collect-garbage -dogsudo nix-store --gc, rydd opp logger medsudo journalctl --rotate && sudo journalctl --vacuum-time=9999s. - En pod står fast i crashloopBackoff eller error, og informasjonsinhhenting viser ingen kjent årsak: Slett pod, dens assosierte deployment / statefulset, slett assosiert helmRelease om relevant, la flux reinstallere ressursen og forsøke å gjenopprette normalsituasjon ved
flux suspend ks --all && flux resume ks --all