☸ Kubernetes im Heimlabor

Kurs › Folge 04

Die Hardware: was du wirklich brauchst

Mindestanforderungen, Netzplan und die Alternative in virtuellen Maschinen — mein Aufbau ist nur ein Beispiel.

Das Video zu dieser Folge ist noch nicht veröffentlicht. Die Notizen stehen trotzdem schon hier.

Was du danach kannst

  • die Mindestanforderungen fuer einen Knoten einschaetzen — echte Rechner wie virtuelle
  • feste Adressen und eindeutige Namen sauber vergeben
  • erklaeren, warum nur die Control Plane eine schnelle Platte braucht
  • Maschinen aus der Ferne finden, aufwecken und herunterfahren, ohne davorzustehen

Was ein Knoten wirklich braucht

Control Plane Worker
CPU-Kerne 2 (kubeadm bricht darunter ab) 2
RAM 4 GB, angenehm ab 8 4 GB
Platte SSD — nicht verhandelbar egal, SSD ist netter
Netz Gigabit über Kabel Gigabit über Kabel

Das ist keine Empfehlung für gute Ausstattung, sondern die Untergrenze, ab der es überhaupt läuft. Mein eigenes Labor liegt genau darauf: ausrangierte Bürorechner von 2010 mit zwei Kernen und vier Gigabyte.

Der Vorteil dieser Enge: Was hier läuft, läuft überall. Und die Folgen über Requests, Limits und Eviction werden ehrlicher als jedes ausgedachte Beispiel — der Speicher ist wirklich knapp.

Die eine Komponente, bei der man nicht spart

Die Platte der Control Plane. Der Grund steht in Folge 3: etcd zwingt jede Änderung mit fsync auf das Medium, bevor sie als erledigt gilt.

Medium fsync
Festplatte 7200 U/min 5–15 ms
SATA-SSD 0,1–1 ms
NVMe 0,02–0,1 ms

Der Sprung von der Festplatte zur SSD ist gewaltig. Der von SATA-SSD zu NVMe ist für ein Labor bedeutungslos. Eine gebrauchte SSD für 25 € reicht.

Dieselbe Übung in virtuellen Maschinen

Du brauchst keine drei Rechner. Drei bis vier VMs auf einem Wirt mit 16 GB RAM tun es genauso — die Befehle sind identisch, das Cluster merkt keinen Unterschied.

Wichtig ist nur: Netzwerk auf „Bridge", nicht NAT. Sonst erreichen die Knoten einander nicht.

Was dir dann fehlt, ist der Stromstecker-Versuch aus Folge 29 — den ersetzt du durch das Anhalten einer VM.

Namen und Adressen

Zwei Dinge, die man am Anfang festlegt und danach nie wieder anfasst:

Eindeutige, kleingeschriebene Namen. kubeadm nimmt den Hostnamen als Knotennamen. Zwei Maschinen mit demselben Namen können nicht beide beitreten, und Großbuchstaben lässt Kubernetes nicht zu (RFC 1123).

Feste Adressen. Entweder statisch auf dem Knoten oder — einfacher — als Reservierung im Router. Ein Knoten, der nach dem Neustart eine andere Adresse hat, zerlegt das Cluster, und die Fehlersuche sieht aus wie ein Kubernetes-Problem.

Dazu die Bereiche, die sich nicht überschneiden dürfen:

  • Heimnetz: z. B. 192.168.178.0/24
  • Pod-CIDR: 10.244.0.0/16
  • Service-CIDR: 10.96.0.0/12

Liegt dein Heimnetz auf 10.x, musst du das Pod-CIDR ändern.

Maschinen finden, ohne davorzustehen

Sobald mehr als zwei Kisten dastehen, stellt sich eine Frage, die in keinem Tutorial vorkommt: Welches Blech ist eigentlich w3?

Die Antwort in einem echten Rechenzentrum: Der Name sagt nichts über den Ort — die Verknüpfung tut es. Drei Ebenen, alle ohne Bildschirm:

1. Der Knoten trägt seinen Ort als Label

sudo dmidecode -s system-serial-number
kubectl label node w3-k8n hardware.serial=7XKQ2M3 standort=regal-rechts
kubectl get nodes -L hardware.serial,standort

Kubernetes kennt die Hardware übrigens schon halb:

kubectl get node w3-k8n -o jsonpath='{.status.nodeInfo.systemUUID}'
sudo dmidecode -s system-uuid          # dieselbe Kennung

2. Die Maschine zeigt sich selbst

sudo ethtool -p enp0s25 30

Die LED am Netzwerkanschluss blinkt 30 Sekunden — und die am Switch gleich mit. Das ist im Rechenzentrum das Standardmittel, um einen Port zu identifizieren; auf richtigen Servern macht dasselbe eine blaue Leuchte am Gehäuse, angesteuert per ipmitool chassis identify.

Ohne ethtool geht es auch mit Bordmitteln:

sudo dd if=/dev/sda of=/dev/null bs=1M count=2000    # Plattenleuchte flackert

3. Wenn gar nichts mehr geht: Ein managed Switch zeigt, an welchem Port welche MAC-Adresse zuletzt gesehen wurde. So findet man auch eine Maschine, die nicht mehr startet.

Wake-on-LAN

Der Rechner ist aus — und ein Teil von ihm hört trotzdem zu.

Die Netzwerkkarte hängt an der Standby-Schiene des Netzteils, derselben, die den Einschaltknopf versorgt. Sie bekommt weiter ein paar Milliwatt und wartet auf ein einziges Muster: sechs Byte FF, gefolgt von der eigenen MAC-Adresse, sechzehnmal hintereinander. Kein Betriebssystem, kein Prozessor, keine IP — nur ein Chip, der ein Muster erkennt und dann die Leitung zum Einschaltknopf schließt.

Das Verfahren stammt von 1997 und hat sich seither nicht geändert.

sudo apt install -y wakeonlan
wakeonlan 00:25:64:F2:96:FD

Voraussetzungen, in dieser Reihenfolge geprüft:

  1. Steckerleiste an — ohne Standby-Strom hört niemand zu
  2. BIOS: Wake on LAN auf LAN Only
  3. Im System: sudo ethtool enp0s25 | grep Wake-on muss g zeigen

Manche Karten vergessen den dritten Punkt beim Herunterfahren. Dann gehört ethtool -s enp0s25 wol g in eine kleine systemd-Einheit.

Und der Nebeneffekt: Du kannst das Labor guten Gewissens ausschalten, wenn du nicht daran arbeitest. Bei 20–30 Watt je Maschine ist das über Wochen ein spürbarer Unterschied.

Zum Nachlesen

Eine geordnete Übersicht über die offizielle Dokumentation steht unter Nachlesen.

Befehle aus dieser Folge

  • lscpu
  • free -h
  • lsblk -d -o NAME,SIZE,ROTA,MODEL
  • sudo dmidecode -s system-serial-number
  • sudo ethtool -p enp0s25 30
  • wakeonlan 00:25:64:F2:96:FD

Begriffe

Control Plane
der Knoten, der das Cluster steuert — hier zaehlt die Schreiblatenz der Platte
Worker
Knoten fuer die Arbeitslasten — hier zaehlen Kerne und Speicher
CIDR
der Adressbereich, aus dem Pods und Services ihre IPs bekommen
Wake-on-LAN
die Netzwerkkarte bleibt im Standby wach und startet den Rechner auf ein Magic Packet hin
Magic Packet
sechs Byte FF, dann sechzehnmal die eigene MAC-Adresse

Übung — mach es selbst

Erfasse deine eigene Hardware — und mach sie auffindbar.

  1. Auf jedem Knoten: lscpu, free -h, lsblk -d -o NAME,SIZE,ROTA,MODEL. Die Spalte ROTA ist die wichtigste: 1 heisst drehende Platte.
  2. Seriennummer auslesen: sudo dmidecode -s system-serial-number
  3. Beides als Label an den Knoten haengen: kubectl label node <name> hardware.serial=<nr> standort=<wo>
  4. Anzeigen lassen: kubectl get nodes -L hardware.serial,standort
  5. sudo ethtool -p <schnittstelle> 30 — und nachsehen, welche Kiste blinkt. Stimmt es mit dem Label ueberein?

Zusatz: Fahre einen Knoten herunter und wecke ihn per Wake-on-LAN wieder auf. Wenn es nicht klappt, sind es fast immer diese drei: Steckerleiste aus, BIOS-Einstellung fehlt, oder ethtool | grep Wake-on zeigt d.