2024-11-14 22:55:57 +00:00
|
|
|
|
* 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
|
|
|
|
|
|
|
2024-11-14 23:02:40 +00:00
|
|
|
|
#+RESULTS:
|
|
|
|
|
|
:results:
|
|
|
|
|
|
[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
|
|
|
|
|
|
:end:
|
|
|
|
|
|
|
2024-11-14 22:55:57 +00:00
|
|
|
|
#+begin_src bash :results drawer replace
|
|
|
|
|
|
kubectl get nodes
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
2024-11-14 23:02:40 +00:00
|
|
|
|
#+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:
|
|
|
|
|
|
|
2024-11-14 22:55:57 +00:00
|
|
|
|
#+begin_src bash :results drawer replace
|
|
|
|
|
|
kubectl get pods -A -o wide
|
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
2024-11-14 23:02:40 +00:00
|
|
|
|
#+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:
|
|
|
|
|
|
|
2024-11-14 22:55:57 +00:00
|
|
|
|
#+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
|
|
|
|
|
|
|
2024-11-14 23:02:40 +00:00
|
|
|
|
#+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:
|
|
|
|
|
|
|
2024-11-14 22:55:57 +00:00
|
|
|
|
#+begin_src bash :results drawer replace
|
|
|
|
|
|
curl -H 'Host: podinfo.local' localhost:8081
|
|
|
|
|
|
#+end_src
|
2024-11-14 23:02:40 +00:00
|
|
|
|
|
|
|
|
|
|
#+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:
|