7.3 KiB
- Hvordan kjøre k8s cluster på hytta for fun and profit!
- Hvordan kjøre k8s cluster på hytta for fun
and profit!and savings! - Hvordan kjøre k8s cluster på hytta for fun
and profit!and savings!uh…. and FUN! - Men altså… how did we get here?
- Men altså… how did we get here?
- Bare-metal og vps!
- Docker! … og en del nginx og ruter-mikk…
- wireguard!
- … er k8s løsningen?
- Men hvilken distro skal jeg velge?
- Men hvilken distro skal jeg velge?
- Utfordring: NAT
- helm magic!
- Git-ops & fluxcd!
- Så hva kjører jeg?
- Hva ville jeg gjort anderledes?
- Gode ressurser / Ting å google
- Demo?
Hvordan kjøre k8s cluster på hytta for fun and profit!
Hvordan kjøre k8s cluster på hytta for fun and profit! and savings!
Hvordan kjøre k8s cluster på hytta for fun and profit! and savings! uh…. and FUN!

Men altså… how did we get here?
Men altså… how did we get here?

Bare-metal og vps!

Docker! … og en del nginx og ruter-mikk…

wireguard!

veldig enkel måte å sette opp vpn på!
… er k8s løsningen?

- Distribuert!
- Config management!
- Mer enn bare containere!
- og relevant for jobb!
Men hvilken distro skal jeg velge?
Men hvilken distro skal jeg velge?
standard / kubeadm
- bare base k8s, mangler mange componenter for å faktisk gjøre ting.
k0s
- veldig lightweight, må sette opp en del selv.
Minikube
- enkelt
- lager egen vm, kun 1 node
rancher rke & rke2
- Rke kjører over docker
- Rke2 var ikke stabilt når jeg startet
rancher k3s
- egentlig laget for edge, men funker ganske greit for større ting og har mye ute av boksen!
- funker i litt mer utradisjonelle k8s miljø
Utfordring: NAT


helm magic!
helm install <whatever> -f config.yaml
https://artifacthub.io/ docker hub for helm!
Git-ops & fluxcd!
Skriv yaml -> commit til git -> k8s magic -> deployed!
Så hva kjører jeg?
- Nextcloud
- immich
- Gitea
- Drone cicd
- chat-bots
- archlinux pakke repo
- openldap
- bitwarden (vaultwarden)
- mail server
- jellyfin
-
k8s componenter!
- k3s
- openebs
- cert-manager & trust-manager
- loki / prometheus / grafana
- container registry
- stakater-reloader
- nginx ingress controller
- FluxCD
Hva ville jeg gjort anderledes?
- all config i git fra starten av!
- bruk gitops tidligere
Gode ressurser / Ting å google
Youtube
- Jeff Geerling
- TechnoTim
- Just me and opensource
- Level1Techs
- /r/selfhosted
- /r/DataHoarder
- /r/homelab
- /r/HomeServer
- /r/k3s
- /r/rancher
- /r/linux
StackExchange
eller, spør meg!
Demo?
k3d cluster delete
k3d cluster create -p "8081:80@loadbalancer" --agents 2
[36mINFO[0m[0000] No clusters found [36mINFO[0m[0000] portmapping '8081:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy] [36mINFO[0m[0000] Prep: Network [36mINFO[0m[0000] Created network 'k3d-k3s-default' [36mINFO[0m[0000] Created image volume k3d-k3s-default-images [36mINFO[0m[0000] Starting new tools node… [36mINFO[0m[0000] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.7.4' [36mINFO[0m[0001] Creating node 'k3d-k3s-default-server-0' [36mINFO[0m[0002] Pulling image 'docker.io/rancher/k3s:v1.30.4-k3s1' [36mINFO[0m[0002] Starting node 'k3d-k3s-default-tools' [36mINFO[0m[0005] Creating node 'k3d-k3s-default-agent-0' [36mINFO[0m[0005] Creating node 'k3d-k3s-default-agent-1' [36mINFO[0m[0005] Creating LoadBalancer 'k3d-k3s-default-serverlb' [36mINFO[0m[0006] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.7.4' [36mINFO[0m[0008] Using the k3d-tools node to gather environment information [36mINFO[0m[0008] HostIP: using network gateway 172.18.0.1 address [36mINFO[0m[0008] Starting cluster 'k3s-default' [36mINFO[0m[0008] Starting servers… [36mINFO[0m[0008] Starting node 'k3d-k3s-default-server-0' [36mINFO[0m[0010] Starting agents… [36mINFO[0m[0010] Starting node 'k3d-k3s-default-agent-0' [36mINFO[0m[0010] Starting node 'k3d-k3s-default-agent-1' [36mINFO[0m[0019] Starting helpers… [36mINFO[0m[0019] Starting node 'k3d-k3s-default-serverlb' [36mINFO[0m[0026] Injecting records for hostAliases (incl. host.k3d.internal) and for 4 network members into CoreDNS configmap… [36mINFO[0m[0028] Cluster 'k3s-default' created successfully! [36mINFO[0m[0028] You can now use it like this: kubectl cluster-info
kubectl get nodes
NAME STATUS ROLES AGE VERSION k3d-k3s-default-agent-0 Ready <none> 15s v1.30.4+k3s1 k3d-k3s-default-agent-1 Ready <none> 16s v1.30.4+k3s1 k3d-k3s-default-server-0 Ready control-plane,master 24s v1.30.4+k3s1
kubectl get pods -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system coredns-576bfc4dc7-qf4jr 1/1 Running 0 15s 10.42.1.2 k3d-k3s-default-agent-1 <none> <none> kube-system helm-install-traefik-crd-5d927 0/1 Completed 0 15s 10.42.2.2 k3d-k3s-default-server-0 <none> <none> kube-system helm-install-traefik-dh9mb 0/1 Completed 1 15s 10.42.0.2 k3d-k3s-default-agent-0 <none> <none> kube-system local-path-provisioner-6795b5f9d8-k9hd8 1/1 Running 0 15s 10.42.1.4 k3d-k3s-default-agent-1 <none> <none> kube-system metrics-server-557ff575fb-45mc8 1/1 Running 0 15s 10.42.1.3 k3d-k3s-default-agent-1 <none> <none> kube-system svclb-traefik-f13b85a3-bmsc5 2/2 Running 0 4s 10.42.1.5 k3d-k3s-default-agent-1 <none> <none> kube-system svclb-traefik-f13b85a3-mttkt 2/2 Running 0 4s 10.42.2.3 k3d-k3s-default-server-0 <none> <none> kube-system svclb-traefik-f13b85a3-pprtw 2/2 Running 0 4s 10.42.0.3 k3d-k3s-default-agent-0 <none> <none> kube-system traefik-5fb479b77-csb4k 1/1 Running 0 4s 10.42.0.4 k3d-k3s-default-agent-0 <none> <none>
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm install podinfo podinfo/podinfo --set ingress.enabled=true
"podinfo" has been added to your repositories NAME: podinfo LAST DEPLOYED: Fri Nov 15 00:02:07 2024 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES:
- Get the application URL by running these commands: http://podinfo.local/
curl -H 'Host: podinfo.local' localhost:8081
{
"hostname": "podinfo-5c7765bf4-c49bd",
"version": "6.7.1",
"revision": "6b7aab8a10d6ee8b895b0a5048f4ab0966ed29ff",
"color": "#34577c",
"logo": "
",
"message": "greetings from podinfo v6.7.1",
"goos": "linux",
"goarch": "amd64",
"runtime": "go1.23.2",
"num_goroutine": "8",
"num_cpu": "16"
}