↓ Zum Hauptinhalt springen
  1. Anleitungen/

k3s installieren: Schlankes Kubernetes für Homelab und kleine Server

Patrick Adams
Autor
Patrick Adams
Linux-Administrator und IT-Specialist. Ich schreibe über Server, Self-Hosting und Open-Source-Software, praxisnah und selbst getestet. Mehr über mich →
Inhaltsverzeichnis
Kubernetes - Dieser Artikel ist Teil einer Serie.
Teil 1: Dieser Artikel
k3s ist eine abgespeckte Kubernetes-Distribution, die schon auf kleinen Servern, VMs oder einem Raspberry Pi läuft. Die Installation ist ein einziger Befehl, und Ingress mit Traefik, ein Load Balancer und Speicher sind direkt mit dabei.
Voraussetzungen: Debian oder Ubuntu mit Root-Zugriff, mindestens 2 CPU-Kerne und 2 GB RAM für den Server-Node, besser 4 GB. Nimm einen frischen Server oder eine VM: k3s belegt mit seinem eingebauten Traefik die Ports 80 und 443, und auf einem Server mit CloudPanel, Nginx Proxy Manager oder Docker-Diensten auf diesen Ports kommt es sonst zu Konflikten.

Server vorbereiten
#

System aktualisieren
#

apt update && apt upgrade -y && apt install curl -y

Ports freigeben
#

Wenn eine Firewall aktiv ist, müssen diese Ports offen sein. Für einen einzelnen Node reichen 80 und 443, die anderen brauchst du erst mit mehreren Nodes:

PortProtokollWofür
80, 443TCPWebdienste über Traefik
6443TCPKubernetes-API, für kubectl und weitere Nodes
8472UDPNetzwerk zwischen den Nodes (Flannel)
10250TCPKubelet, für Logs und Metriken
Gib Port 6443 nicht offen ins Internet frei. Wer die API erreicht und an Zugangsdaten kommt, kontrolliert den ganzen Cluster. Erlaube ihn nur für deine eigenen Nodes und dein Netz oder VPN.

k3s installieren
#

Installationsskript ausführen
#

curl -sfL https://get.k3s.io | sh -

Das Skript installiert k3s als Systemdienst und startet ihn direkt. Nach ein bis zwei Minuten läuft dein Cluster.

Willst du das Skript vorher lesen, statt es direkt auszuführen, geht das auch:

curl -sfL https://get.k3s.io -o install-k3s.sh
less install-k3s.sh
sh install-k3s.sh

Installation prüfen
#

k3s kubectl get nodes

Steht dein Server dort mit dem Status Ready, hat alles geklappt.

kubectl einrichten
#

k3s bringt kubectl direkt mit. Damit du es als normaler Benutzer ohne k3s davor nutzen kannst, kopierst du die Zugangsdatei in dein Home-Verzeichnis:

mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
chmod 600 ~/.kube/config

Danach funktioniert ganz normal:

kubectl get nodes
Die Datei k3s.yaml enthält vollen Admin-Zugriff auf deinen Cluster. Behandle sie wie ein Passwort und gib sie nicht weiter.

Vom eigenen Rechner aus arbeiten
#

Willst du den Cluster von deinem Laptop steuern, kopierst du die Datei dorthin nach ~/.kube/config und ersetzt darin 127.0.0.1 durch die IP-Adresse deines Servers. Dafür muss Port 6443 von deinem Rechner aus erreichbar sein, am besten über VPN.

Weitere Nodes hinzufügen
#

Für mehr Leistung oder Ausfallsicherheit hängst du weitere Server als Worker an. Auf dem ersten Server liest du zuerst den Token aus:

sudo cat /var/lib/rancher/k3s/server/node-token

Auf dem neuen Node führst du dann diesen Befehl aus und ersetzt die IP-Adresse und den Token:

curl -sfL https://get.k3s.io | K3S_URL=https://IP-des-ersten-Servers:6443 K3S_TOKEN=dein-token sh -

Nach kurzer Zeit taucht der neue Node bei kubectl get nodes auf.

Erste App veröffentlichen
#

Deployment und Service anlegen
#

kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80

Über Traefik erreichbar machen
#

Leg eine Datei web-ingress.yaml an und ersetze die Domain durch deine eigene:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
spec:
  rules:
    - host: web.deine-domain.de
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80
kubectl apply -f web-ingress.yaml

Zeigt der DNS-Eintrag web.deine-domain.de auf deinen Server, siehst du im Browser die Startseite von Nginx. Zum schnellen Testen ohne Domain geht auch kubectl port-forward svc/web 8080:80 und dann http://localhost:8080.

Weitere Befehle für den Alltag findest du in meiner Übersicht der Kubernetes-Befehle.

k3s aktualisieren
#

Für ein Update führst du das Installationsskript einfach noch einmal aus. Es aktualisiert k3s auf die aktuelle stabile Version und behält deine Daten:

curl -sfL https://get.k3s.io | sh -

Bei mehreren Nodes aktualisierst du zuerst den Server und danach die Worker, mit demselben Befehl wie beim Hinzufügen.

k3s deinstallieren
#

k3s bringt eigene Skripte zum Entfernen mit:

/usr/local/bin/k3s-uninstall.sh

Auf Worker-Nodes heißt das Skript k3s-agent-uninstall.sh.

Beim Deinstallieren werden alle Daten des Clusters gelöscht, auch die deiner Apps. Sichere vorher alles, was du noch brauchst.
Kubernetes - Dieser Artikel ist Teil einer Serie.
Teil 1: Dieser Artikel

Verwandte Artikel