ODROID N2 Mainline Kernel
Single Board Computer (SBC) wie der Raspberry Pi oder die ODROID-Serie eignen sich sehr gut als stromsparende und hinreichend performante Maschinen für Container-Hosting mit Docker oder Kubernetes.
In dem Artikel "Kubernetes auf Odroid N2" wurde die Einrichtung von Kubernetes auf ODROID N2 mit Arch Linux ARM beschrieben.
Der von Hardkernel, dem Hersteller der ODROIDs, bereitgestellte Kernel basiert auf einem alten Stand und wurde durch zusätzliche Treiber und Patches für den ODROID N2 kompatibel gemacht.
Leider bringt der verwendete Kernel einige Nachteile mit sich:
So gibt es zum Teil Abstürze und Instabilitäten.
Der Prometheus Node-Exporter führt zu einem sofortigen Absturz, so dass an Metrikmonitoring gar nicht zu denken ist. (Hier scheint das Problem in der dynamischen Taktung zu liegen cpufreq_cpu_get
, taucht im Stacktrace stets auf.)
Abhilfe schafft der sogenannte Mainline-Kernel. Das ist ein nicht gepatchter Kernel und kann seit Linux 5.5 prinzipiell verwendet werden, da die Unterstützung der verwendeten Hardwarekomponenten des ODROID N2 in diesem enthalten ist.
Arch Linux ODROID-N2 Mainline Kernel
Zur Installation des Mainline Linux Kernel sind lediglich zwei Schritte notwendig:
Aktualisierung der boot.ini
, Installation des Mainline Kernel und Deinstallation des odroid Kernels.
Zunächst wird die boot.ini
aktualisiert.
Die Datei liegt im Ordner /boot/
und bekommt folgenden Inhalt:
boot.ini
für Mainline KernelODROIDN2-UBOOT-CONFIG setenv bootlabel "ArchLinux EMMC" # Default Console Device Setting setenv condev "console=ttyAML0,115200n8 console=tty1" # on both # Boot Args setenv bootargs "root=/dev/mmcblk${devno}p2 rootwait rw ${condev} ${amlogic} no_console_suspend fsck.repair=yes net.ifnames=0 hdmimode=1080p60hz clk_ignore_unused" # Set load addresses setenv dtb_loadaddr "0x20000000" setenv loadaddr "0x1080000" setenv initrd_loadaddr "0x3080000" # Load kernel, dtb and initrd load mmc ${devno}:1 ${loadaddr} /Image load mmc ${devno}:1 ${dtb_loadaddr} /dtbs/amlogic/meson-g12b-odroid-n2.dtb load mmc ${devno}:1 ${initrd_loadaddr} /initramfs-linux.uimg #fdt addr ${dtb_loadaddr} # boot booti ${loadaddr} ${initrd_loadaddr} ${dtb_loadaddr}
Anschließend kann der Mainline Kernel von ArchLinux ARM oder einer beliebigen Quelle installiert werden.
Im Beispiel wird das Aarch64 Paket gewählt, also ein 64bit System.
$ pacman -S linux-aarch64
Anschließend erfolgt ein Reboot, um den neuen Kernel zu aktivieren.
Bisher läuft Kubernetes, CRI-O und der Mainline Kernel stabil und performant.
Zur Zeit leider nicht verfügbar ist der Hardware-Watchdog, so dass im Falle eines Kernel-Crashes kein automatischer Reboot erfolgt.
Zu den Themen Kubernetes, Docker und Cloud Architektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:
Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.