Status meines k3s-Homelab (Stand 02/2021)

Ich dachte mir, dass ich mal ein paar Worte zu meinem mittlerweile angewachsenen Kubernetes Homelab schreibe. Nicht, dass das irgendwas weltbewegendes wäre, aber sicherlich für den einen oder anderen ein kleiner Denkanstoß oder Inspiration für eigenes.
Hardware
Hardware wird keine dedizierte eingesetzt. Ich habe auf meinem Proxmox Server vier virtuelle Maschinen erstellt. Dazu gesellen sich allerdings derzeit noch zwei Raspberry Pi 4 mit 4 GB RAM.
Software
Als Betriebssystem setze ich durchgehend auf Ubuntu 20.04 LTS. Bei den virtuellen Maschinen natürlich die amd64 und bei den RPi arm64 Variante.
Der Cluster selbst läuft mit Ranchers k3s anstatt eines vollen k8s.
Kubernetes Cluster
Allgemein
Der Cluster selbst besteht aus einem Master und fünf Worker. Ein Multimaster-Setup habe ich mir überlegt, allerdings für den Anfang verworfen. Auch wenn es mit k3s eigentlich ziemlich einfach gehen würde. Zumindest mit externer Datenbank.
Storage
Als Storage setze ich auf Longhorn. Longhorn, auch von Rancher, ist ein distributed block storage welches iSCSI im Hintergrund nutzt. Je Storage Node wird eine dedizierte Festplatte (so zumindest der empfohlene Weg) an den Cluster gereicht und alle Dateien werden entsprechend verteilt. Zwei Hosts sind hier das Minimum. Bei mir werden alle 4 virtuellen Maschinen dafür verwendet.
Ingress
In meinem kleinen k3s Tutorial habe ich Traefik als Ingress eingerichtet. Für meinen produktiven Cluster im Homelab allerdings setze ich auf NGINX. Es liegt einfach an der leichteren Konfiguration für Einsteiger. Traefik ist wie unter Docker sehr mächtig, allerdings hat mich das etwas überfordert, sodass ich mit dem leichteren Beginnen wollte.
Monitoring
Auch hier nutze ich den klassichen Weg und verwende den kube-prometheus-stack. Bohrte den allerdings noch mit etwas Loki auf. Loki ist ein Software um Logdateien aufzubereiten. Ähnlich wie man es vlt. vom Elastik Stack (ELK) kennt.
Ein Alerting via Alertmanager ist noch nicht im Einsatz. Dafür informiert mich Botkube über diverse Cluster-Ereignisse auf einen dedizierten Discord Server.
Besonderheiten
Ich wollte von Anfang an nicht stur yaml-Dateien schreiben und diese mit kubectl in den Cluster jagen. Ich bin früh auf die k8s@home Community gestoßen die sich Rund um das Thema GitOps und Kubernetes im Homelab beschäftigen. Entsprechend wird mein Cluster auch komplett aus einem GitHub Repository gespeist. FluxCD zieht sich diese Daten und deployt sie im Cluster. Alles via Helm.
Das Problem ist noch, dass ich mich noch nicht um das Thema Secrets bemüht habe. Das steht für die nächste Zeit auf der Roadmap. Dann ist es auch möglich Tokens, Zertifikate und ähnliches auf GitHub zu speichern. Im können fast alle Dienste nur aus dem internen Netzwerk heraus erreicht werden.
Was hoste ich?
Ich würde diese Liste einfach mal nach Namespaces aufteilen. Ich liste allerdings nur weitere Software auf die nicht oben beschrieben sind.
home
- Home Assistant mit code-server
- Mosquitto
- Heimdall
network
- MetalLB
- cloudflare-ddns
- ntp
media
- Gaps
- Ombi
- Tautulli
- Plex