docs/presentation_kanzone.org

7.3 KiB
Raw Blame History

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!

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/server.jpg

Men altså… how did we get here?

Men altså… how did we get here?

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/minecraft.png

Bare-metal og vps!

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/baremetal.png

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

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/docker.png

wireguard!

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/docker.png

veldig enkel måte å sette opp vpn på!

… er k8s løsningen?

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/k8s-logo.png

  • 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

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/kubeServer.png

/andreas/docs/media/commit/0db35d5d3fea0774a0c9c1781ef739a6ab42bbdd/images/kubeInternal.png

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

Reddit

  • /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

INFO[0000] No clusters found INFO[0000] portmapping '8081:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy] INFO[0000] Prep: Network INFO[0000] Created network 'k3d-k3s-default' INFO[0000] Created image volume k3d-k3s-default-images INFO[0000] Starting new tools node… INFO[0000] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.7.4' INFO[0001] Creating node 'k3d-k3s-default-server-0' INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.30.4-k3s1' INFO[0002] Starting node 'k3d-k3s-default-tools' INFO[0005] Creating node 'k3d-k3s-default-agent-0' INFO[0005] Creating node 'k3d-k3s-default-agent-1' INFO[0005] Creating LoadBalancer 'k3d-k3s-default-serverlb' INFO[0006] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.7.4' INFO[0008] Using the k3d-tools node to gather environment information INFO[0008] HostIP: using network gateway 172.18.0.1 address INFO[0008] Starting cluster 'k3s-default' INFO[0008] Starting servers… INFO[0008] Starting node 'k3d-k3s-default-server-0' INFO[0010] Starting agents… INFO[0010] Starting node 'k3d-k3s-default-agent-0' INFO[0010] Starting node 'k3d-k3s-default-agent-1' INFO[0019] Starting helpers… INFO[0019] Starting node 'k3d-k3s-default-serverlb' INFO[0026] Injecting records for hostAliases (incl. host.k3d.internal) and for 4 network members into CoreDNS configmap… INFO[0028] Cluster 'k3s-default' created successfully! INFO[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:

  1. 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": "https://raw.githubusercontent.com/stefanprodan/podinfo/gh-pages/cuddle_clap.gif", "message": "greetings from podinfo v6.7.1", "goos": "linux", "goarch": "amd64", "runtime": "go1.23.2", "num_goroutine": "8", "num_cpu": "16" }