155 lines
3.5 KiB
Markdown
155 lines
3.5 KiB
Markdown
# 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
|
|
```
|