1
1
Fork
You've already forked infra-cd
0
No description
  • Shell 100%
2026年06月20日 22:12:44 +02:00
apps app/prod: add bonfire 2026年06月20日 22:12:44 +02:00
clusters app/prod: add bonfire 2026年06月20日 22:12:44 +02:00
infrastructure infra/base: rm old gen-dev-plugin imageUpdateAuto. 2026年05月10日 16:48:04 +02:00
.gitignore ignore text editor tmp files 2024年09月11日 20:19:55 +02:00
.pre-commit-config.yaml add-pre-commit-hooks ( #8 ) 2025年06月18日 16:10:19 +02:00
.sops.yaml add-pre-commit-hooks ( #8 ) 2025年06月18日 16:10:19 +02:00
.yamllint-config.yaml add-pre-commit-hooks ( #8 ) 2025年06月18日 16:10:19 +02:00
LICENSE.md repo: add LICENSE.md 2026年03月24日 20:15:43 +01:00
README.md README: fix: rm unnecessary ./ prefix 2026年03月24日 20:17:14 +01:00
sops-decrypt.yaml add-pre-commit-hooks ( #8 ) 2025年06月18日 16:10:19 +02:00

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

  1. kubectl get all -A for å få oversikt over de fleste ressurser i alle navnerom og deres status.
  2. kubectl events for å se generell status og hendelser på kubernetes clusteren og noden (maskinen). Det kan også være nyttig å se hendelser i spesifikke navnerom, som kubectl events -n {kube-system|flux-system|cnpg-system|discourse}
  3. kubectl get -n {navnerom} {deploy|pod|hr|pvc} -oyaml for å få detaljert oversikt over en spesifikk ressurs.
  4. kubectl describe -n {navnerom} {deploy|pod|helmRelease|hr} -oyaml for en annen type detaljert oversikt over en spesifikk ressurs.
  5. flux get ks for å få en oversikt over de ulike konfigurasjonene (flux kustomization i dette git repoet) flux prøver å gjøre.
  6. kubectl logs -n {navnerom} {deploy|pod} for å få en spesifikk ressurs sin interne logg.
  7. free -h, df -h /, top og sudo du -h / | sort -hr | head -n 30 gir 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 -d og sudo nix-store --gc, rydd opp logger med sudo 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