Initial: Add all homelab manifests

This commit is contained in:
2026-03-20 00:05:50 +00:00
commit b538e87d69
33 changed files with 3036 additions and 0 deletions

154
docs/02-k3s-installation.md Normal file
View File

@@ -0,0 +1,154 @@
# 02 — k3s Installation
**Datum:** 2026-03-16
**Version:** v1.34.5+k3s1
**Container Runtime:** containerd 2.1.5-k3s1
---
## Cluster-Übersicht
| Node | Rolle | IP |
|-----------|----------------|------------------|
| rnk-cp01 | control-plane | 192.168.11.170 |
| rnk-wrk01 | agent (worker) | 192.168.11.171 |
| rnk-wrk02 | agent (worker) | 192.168.11.172 |
---
## Voraussetzungen
- KVM + libvirt installiert (siehe `01-kvm-libvirt.md`)
- Bridge `br0` auf allen Nodes konfiguriert (siehe `01-network-bridge.md`)
- SSH-Zugang von rnk-cp01 zu rnk-wrk01 und rnk-wrk02 ohne Passwort
- Internetverbindung auf allen Nodes
---
## Installation
### 1. k3s Server auf rnk-cp01
```bash
curl -sfL https://get.k3s.io | sh -s - server \
--node-ip=192.168.11.170 \
--tls-san=192.168.11.170 \
--flannel-iface=br0 \
--write-kubeconfig-mode=644
```
| Flag | Erklärung |
|------|-----------|
| `--node-ip` | IP-Adresse die dieser Node im Cluster advertised |
| `--tls-san` | IP ins TLS-Zertifikat aufnehmen (für externe kubectl-Zugriffe) |
| `--flannel-iface=br0` | Flannel CNI nutzt br0 statt des physischen Interfaces |
| `--write-kubeconfig-mode=644` | kubeconfig für nicht-root User lesbar |
> Hinweis: `--advertise-addr` existiert in k3s v1.34+ nicht mehr. Der korrekte Flag ist `--tls-san`.
**Status prüfen:**
```bash
sudo systemctl is-active k3s
```
### 2. Node-Token auslesen
```bash
sudo cat /var/lib/rancher/k3s/server/node-token
```
Der Token wird für den Agent-Join benötigt.
### 3. k3s Agent auf rnk-wrk01 und rnk-wrk02
Von rnk-cp01 per SSH, beide Worker parallel:
```bash
TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)
# rnk-wrk01
ssh mtkadmin@192.168.11.171 "curl -sfL https://get.k3s.io | \
K3S_URL=https://192.168.11.170:6443 \
K3S_TOKEN='$TOKEN' \
sh -s - agent \
--node-ip=192.168.11.171 \
--flannel-iface=br0" &
# rnk-wrk02
ssh mtkadmin@192.168.11.172 "curl -sfL https://get.k3s.io | \
K3S_URL=https://192.168.11.170:6443 \
K3S_TOKEN='$TOKEN' \
sh -s - agent \
--node-ip=192.168.11.172 \
--flannel-iface=br0" &
wait
```
---
## Verifikation
```bash
kubectl get nodes -o wide
```
Erwartete Ausgabe:
```
NAME STATUS ROLES AGE VERSION INTERNAL-IP
rnk-cp01 Ready control-plane ... v1.34.5+k3s1 192.168.11.170
rnk-wrk01 Ready <none> ... v1.34.5+k3s1 192.168.11.171
rnk-wrk02 Ready <none> ... v1.34.5+k3s1 192.168.11.172
```
---
## Kubeconfig
Die kubeconfig liegt auf rnk-cp01 unter:
```
/etc/rancher/k3s/k3s.yaml
```
Für externen Zugriff (z.B. vom Laptop) kopieren und Server-IP anpassen:
```bash
scp mtkadmin@192.168.11.170:/etc/rancher/k3s/k3s.yaml ~/.kube/config
sed -i 's/127.0.0.1/192.168.11.170/' ~/.kube/config
```
---
## Nützliche Befehle
```bash
# Alle Nodes anzeigen
kubectl get nodes -o wide
# System-Pods prüfen
kubectl get pods -n kube-system
# k3s Logs (Server)
sudo journalctl -u k3s -f
# k3s Logs (Agent)
sudo journalctl -u k3s-agent -f
# k3s deinstallieren (Server)
sudo k3s-uninstall.sh
# k3s deinstallieren (Agent)
sudo k3s-agent-uninstall.sh
```
---
## Ergebnis
Alle drei Nodes sind im Status `Ready`:
```
NAME STATUS ROLES VERSION INTERNAL-IP CONTAINER-RUNTIME
rnk-cp01 Ready control-plane v1.34.5+k3s1 192.168.11.170 containerd://2.1.5-k3s1
rnk-wrk01 Ready <none> v1.34.5+k3s1 192.168.11.171 containerd://2.1.5-k3s1
rnk-wrk02 Ready <none> v1.34.5+k3s1 192.168.11.172 containerd://2.1.5-k3s1
```