Installation von k3s auf Bare Metal - Schritt-für-Schritt-Anleitung mit Terraform
Installation von little k3s Kubernetes auf einem Homelab-Cluster
Hier ist eine Schritt-für-Schritt-Anleitung zur Installation eines 3-Knoten-K3s-Clusters auf Bare-Metal-Servern (1 Master + 2 Worker).
Diese Anleitung setzt voraus, dass Sie mit einer minimalen Linux-Installation (z. B. Ubuntu 22.04 oder Debian) auf jedem Server beginnen und Ihre Steuerungsebene und Workloads selbst hosten möchten.
K3s ist eine leichte Variante von Kubernetes und eignet sich gut für dieses kleine Homelab.
⚙️ Cluster-Topologie
Node Name | Rolle | Hostname/IP |
---|---|---|
master-1 |
Server (Steuerungsebene) | 192.168.1.100 |
worker-1 |
Agent (Worker-Knoten) | 192.168.1.101 |
worker-2 |
Agent (Worker-Knoten) | 192.168.1.102 |
✅ Voraussetzungen
🧱 Hardware (Minimum):
- CPU: 2 Kerne
- RAM: 2GB+ pro Knoten
- Festplatte: 20GB+ pro Knoten
🛠 Betriebssystem-Anforderungen:
- Linux (Ubuntu 22.04, Debian 12, etc.)
curl
,ssh
undsudo
installiert- Root- oder sudo-Zugriff
🧼 Saubere Netzwerkkonfiguration:
-
Stellen Sie sicher, dass alle Knoten sich gegenseitig per IP oder Hostnamen auflösen und ping können.
-
Deaktivieren Sie Swap:
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Schritt-für-Schritt-Installation
📍Schritt 1: Installieren Sie K3s auf der Steuerungsebene (master-1)
curl -sfL https://get.k3s.io | sh -
Nach der Installation:
sudo cat /var/lib/rancher/k3s/server/node-token
- Dies gibt Ihnen den Join-Token, der für die Worker-Knoten benötigt wird.
Bestätigen Sie, dass der Cluster läuft:
sudo kubectl get nodes
k3s
enthält einkubectl
, das alsk3s kubectl
installiert oder alskubectl
verknüpft ist.
📍Schritt 2: Installieren Sie K3s-Agents (worker-1 & worker-2)
Wiederholen Sie dies auf jedem Worker-Knoten:
Ersetzen Sie <MASTER_IP>
und <NODE_TOKEN>
durch die Werte aus Schritt 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Beispiele:
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍Schritt 3: Überprüfen Sie den Cluster von master-1
kubectl get nodes
Sie sollten sehen:
NAME STATUS ROLES AGE VERSION
master-1 Ready control 5m v1.29.2+k3s1
worker-1 Ready <none> 2m v1.29.2+k3s1
worker-2 Ready <none> 2m v1.29.2+k3s1
🔐 (Optional) Hochverfügbarkeit (HA) aktivieren
Für produktionsähnliche HA (optional in Homelabs):
- Verwenden Sie eine externe Datenbank (z. B. MySQL/PostgreSQL/etcd).
- Führen Sie mehrere Server-Knoten mit der
--server
-Flag und einer gemeinsamen Datenbank aus. - Siehe: K3s HA-Dokumentation
🧪 Testen Sie eine Bereitstellung
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Überprüfen Sie den Zugriff über curl http://<worker-ip>:<port>
oder richten Sie MetalLB für externe LoadBalancer-IPs ein.
🧰 Hilfreiche Hinweise
-
Kubeconfig:
/etc/rancher/k3s/k3s.yaml
- Kopieren Sie es auf Ihren lokalen Rechner und führen Sie
export KUBECONFIG=...
aus, um es remote zu verwalten.
- Kopieren Sie es auf Ihren lokalen Rechner und führen Sie
-
Systemd-Dienste:
sudo systemctl status k3s
sudo systemctl status k3s-agent
(auf den Workern)
💡 Extras (Optional)
-
K9s: Terminal-Benutzeroberfläche zur Verwaltung von Kubernetes:
brew install k9s
odersudo snap install k9s
-
Dashboard: Aktivieren Sie es mit Manifesten:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB: Fügen Sie Load-Balancing-Unterstützung für Bare-Metal hinzu:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Bereinigung
Um K3s zu entfernen:
# Auf dem Master:
/usr/local/bin/k3s-uninstall.sh
# Auf dem Worker:
/usr/local/bin/k3s-agent-uninstall.sh
Installieren Sie einen 3-Knoten-Bare-Metal-K3s-Cluster mit Terraform
Hier ist eine Terraform-Vorlage, die Ihnen hilft, einen 3-Knoten-Bare-Metal-K3s-Cluster bereitzustellen, vorausgesetzt, Sie verwalten bereits bereitgestellte Linux-Server (z. B. in Ihrem LAN/Heimlabor) über SSH und Ansible. Terraform wird Ansible-Playbooks aufrufen, um K3s zu installieren.
🧱 Annahmen
-
Sie haben bereits:
- 3 Server mit festen IPs, die per SSH zugänglich sind.
- SSH-Zugriff (schlüsselbasiert).
- Terraform und Ansible lokal installiert.
-
Ziel-Betriebssystem: Ubuntu/Debian (kann angepasst werden).
-
Sie verwenden Terraform
local-exec
oder Ansible-Provisioner-Plugin (wir verwenden hierlocal-exec
für die Portabilität).
📁 Verzeichnisstruktur
k3s-cluster/
├── main.tf
├── inventory.ini
├── ansible/
│ └── install_k3s.yml
└── variables.tf
📄 variables.tf
variable "master_ip" {
default = "192.168.1.100"
}
variable "worker_ips" {
default = ["192.168.1.101", "192.168.1.102"]
}
variable "ssh_user" {
default = "your_user"
}
variable "ssh_private_key" {
default = " /.ssh/id_rsa"
}
📄 main.tf
provider "null" {}
resource "null_resource" "install_k3s" {
provisioner "local-exec" {
command = "ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.ini ansible/install_k3s.yml --private-key ${var.ssh_private_key} -u ${var.ssh_user}"
}
triggers = {
always_run = "${timestamp()}"
}
}
📄 inventory.ini
[masters]
192.168.1.100
[workers]
192.168.1.101
192.168.1.102
[all:vars]
ansible_python_interpreter=/usr/bin/python3
📄 ansible/install_k3s.yml
---
- hosts: masters
become: yes
tasks:
- name: Installieren Sie den k3s-Master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Holen Sie sich den node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Fügen Sie den Worker dem Cluster hinzu
shell: |
curl -sfL https://get.k3s.io | K3S_URL=https://{{ hostvars['192.168.1.100']['ansible_host'] }}:6443 K3S_TOKEN={{ hostvars['192.168.1.100']['node_token']['stdout'] }} sh -
Hinweis: Sie müssen möglicherweise die IP- oder Token-Variablen-Zugriffsanweisungen je nach Ansible-Version anpassen. Sie können den Token auch auf dem Master generieren und in eine Datei speichern, bevor Sie die Worker-Installation ausführen.
🚀 Wie man es ausführt
Aus dem Verzeichnis k3s-cluster/
:
terraform init
terraform apply
🧰 Verbesserungen (Optional)
- Verwenden Sie dynamische Inventar-Generierung (z. B. von DHCP/dnsmasq).
- Fügen Sie die MetalLB-Bereitstellung über Ansible hinzu.
- Fügen Sie Hostnamen und HA-Funktionen hinzu.
- Ersetzen Sie es durch eine Ansible-Rolle wie
xanmanning.k3s
für mehr Flexibilität.
Nützliche Links
- https://k3s.io/
- Kubernetes-Cheatsheet
- Installieren Sie Kubernetes mit Kubespray
- Terraform-Cheatsheet - Nützliche Befehle und Beispiele
- Kubernetes-Distributionen - Kurzer Überblick über kubeadm, k3s, MicroK8s, Minikube, Talos Linux und RKE2
- Vergleich von Kubernetes-Distributionen für ein 3-Knoten-Homelab
- Wie man Ubuntu 24.04 installiert & nützliche Tools
- Docker-Cheatsheet
- Docker Compose Cheatsheet - Die nützlichsten Befehle mit Beispielen