docs/presentation_kanzone.org

243 lines
7.3 KiB
Org Mode
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

* 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!
[[./images/server.jpg]]
* Men altså... how did we get here?
* Men altså... how did we get here?
[[./images/minecraft.png]]
* Bare-metal og vps!
[[file:images/baremetal.png]]
* Docker! ... og en del nginx og ruter-mikk...
[[file:images/docker.png]]
* wireguard!
[[file:images/docker.png]]
veldig enkel måte å sette opp vpn på!
* ... er k8s løsningen?
#+ATTR_ORG: :width 900
[[./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
[[file:images/kubeServer.png]]
[[file: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?
#+begin_src bash :results drawer replace
k3d cluster delete
k3d cluster create -p "8081:80@loadbalancer" --agents 2
#+end_src
#+RESULTS:
:results:
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
:end:
#+begin_src bash :results drawer replace
kubectl get nodes
#+end_src
#+RESULTS:
:results:
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
:end:
#+begin_src bash :results drawer replace
kubectl get pods -A -o wide
#+end_src
#+RESULTS:
:results:
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>
:end:
#+begin_src bash :results drawer replace
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm install podinfo podinfo/podinfo --set ingress.enabled=true
#+end_src
#+RESULTS:
:results:
"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/
:end:
#+begin_src bash :results drawer replace
curl -H 'Host: podinfo.local' localhost:8081
#+end_src
#+RESULTS:
:results:
{
"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"
}
:end: