Aufbau Eines Kubernetes ML Cluster Auf SBCs - Teil 1

Aus irgendeinem Grund hatte ich entschieden Fedora CoreOS für die “control plane” (wir sagen nicht mehr Master ), also versuchen wir mal das zum Laufen zu bringen.

Einstieg in Fedora CoreOS

CoreOS ist ein unveränderliches Betriebssystem, das bedeutet einloggen und administrieren ist nicht, sondern alles wird deklarativ gemacht. Also scheiben wir in bester DevOps-Tradition eine yaml Datei die das Betriebssystem beschreibt, und schieben diese an ein Programm dass dann die Installation übernimmt. Jede Änderung am “Urzustand”, also auch jede Softwareinstallation, erfordert ein neues OS Image. Da ich aus der Ansible-Welt komme, sollte sich das ganz natürlich anfühlen, aber ein wenig gewöhnungsbedürftig ist es trotzdem.

Der Versuchsaufbau

Wir gehen nicht gleich in die Vollen, sondern fangen mit einem kleinen Versuchsaufbau an: Eine einzelne VM mit einem Grundsystem.

Wir brauchen ein “ignition file”, also schnappen wir uns eins aus der Dokumentation :

1variant: fcos
2version: 1.4.0
3passwd:
4  users:
5    - name: core
6      ssh_authorized_keys:
7        - ssh-rsa AAAA...

In meinem Fall brauche ich einen ssh Schlüssel auf dem Host, weil die VM sich mit dem default libvirt-Netzwerk verbindet, und das erlaubt keinen Zugriff von außerhalb. Daran arbeiten wir später.

(… nebenbei muss ich ein Ethernet Verbindungsproblem mit NetworkManager autonegotiation auf RTL8125B debuggen. Alles ist standardmäßig kaputt (defective by default) …)

(… und dann noch ein Fehler mit sssd auf Fedora 35: ‘DB version too old’ wenn man einen Benutzer zu einer Gruppe hinzufügt. Alles ist von Grund auf kaputt …)

Mit ‘butane’ (aus den Repos) können wir ein ignition file aus der yaml generieren. Das .bu in der Dokumentation kann man getrost ignorieren, eine .yaml Datei funktioniert auch.

Das Ergebnis

Nachdem ich qemu r/x Rechte auf mein gesamtes Homeverzeichnis gegeben habe startet es auch endlich. Hier das Bash Skript dazu:

 1#!/bin/bash
 2IGNITION_CONFIG="/absolute/path/to/simple.ign"
 3IMAGE="/absolute/path/to/image.qcow"
 4VM_NAME="fcos-test-01"
 5VCPUS="2"
 6RAM_MB="2048"
 7DISK_GB="10"
 8STREAM="stable"
 9
10virt-install --connect="qemu:///system" --name="${VM_NAME}" --vcpus="${VCPUS}" --memory="${RAM_MB}" \
11        --os-variant="fedora-coreos-$STREAM" --import --graphics=vnc \
12        --disk="size=${DISK_GB},backing_store=${IMAGE}" \
13        --qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${IGNITION_CONFIG}"

Im Grunde einfach aus der Dokumentation kopiert, aber ich hab noch die ‘–graphics=vnc’ Option verwendet. Da gibt mir virt-installer zwar eine Warnung aus, weil virt-manager nicht installiert ist, aber dadurch kann ich mit cockpit auf die VM Konsole zugreifen. Aus irgendeinem Grund schließt die Installation nie ab, aber ich kann jetzt die VM über SSH erreichen. Kaputt ist der Grundzustand.

1[jan@h2fed fcosdeploy]$ ssh core@192.168.122.248
2
3Fedora CoreOS 34.20211031.3.0
4Tracker: https://github.com/coreos/fedora-coreos-tracker
5Discuss: https://discussion.fedoraproject.org/c/server/coreos/
6
7[core@localhost ~]$ 

Hier noch ein Screenshot von cockpit-machines, mit Zugriff auf die VM. Nicht sonderlich spektakulär, aber gerade darum geht es.

Screenshot von cockpit

Das reicht für diesen Teil. Diese kleinen Dinge kosten wahnsinnig viel Zeit. Aber wenigstens weiß ich jetzt dass ich FCOS ausführen und auf die VMs mit cockpit zugreifen kann. Im nächsten Teil versuche ich diese einfache Konfiguration mit Ansible zu automatisieren.


Aufbau Eines Kubernetes ML Cluster Auf SBCs - Teil 0
Aufbau Eines Kubernetes ML Cluster Auf SBCs - Teil 2