PI Series - How to Install Docker, Tailscale, K3s, and Cilium on a Rockchip Arm Development Board
This article was last updated on: May 17, 2026 am
Overview
I picked up a few cheap Purple PI OH development boards during the 618 sale (just over 500 RMB for 3 boards 🤑). These boards are similar to Raspberry Pi, based on the Rockchip RK3566 arm64 chip. Here’s what they look like:
I bought them to use as home servers or a home lab. The main considerations were:
Cheap
Highly hackable
Low power consumption
Minimal heat dissipation, silent operation
The Arm64 ecosystem is decent enough nowadays
Here are the specs (selected highlights):
SOC: RockChip RK3566
CPU: Quad-core 64-bit Cortex-A55, up to 1.8GHz
Up to 8GB high-speed LPDDR4 at up to 1066Mbps (I got the 2GB version)
Storage: 8GB eMMC by default (optional 16GB/32GB/64GB) (I got the 16GB version)
1x HDMI 2.0 supporting 4K@60Hz or 1080P@120Hz
1x auto-negotiating Gigabit Ethernet port
WiFi and Bluetooth wireless connectivity
1x USB 3.0 and 3x USB 2.0 onboard
Ultra-compact PCB size: 85mm × 56mm
Supported operating systems:
Android 11
Debian 10
Buildroot + QT
OpenHarmony 3.2
Ubuntu
Kylin OS
After flashing the official Debian 10 image, I found that Docker/Tailscale/K3s/Cilium couldn’t be installed. Why is that?
Root Cause Analysis
Many development board operating systems don’t have UEFI and can’t be installed directly using the ISO images from the official Debian Linux website. Instead, they use a custom-compiled Debian Linux.
The compiled Debian includes U-Boot as the bootloader, along with integrated drivers for the board’s specific chipset and interfaces.
The official custom-compiled Debian Linux only enables a small subset of kernel configuration options. However, Docker/Tailscale/K3s/Cilium all rely heavily on kernel-level features that aren’t enabled in the official Debian image. This means we need to compile the kernel ourselves following the official “Linux SDK Compilation Guide.”
Tailscale is designed for broad compatibility and primarily uses userspace implementations. It can run via a SOCKS5 proxy without any kernel configuration. For normal operation, it only depends on a single kernel option:
1 2
# Tailscale CONFIG_TUN=y
If you’re using WireGuard or other software with heavier kernel dependencies, please look up their specific kernel configuration requirements.
Kernel Configurations Required by K3s
K3s has a well-designed CLI that can directly check kernel configuration requirements. Here’s the output from my compiled Debian 10:
Verifying binaries in /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin: - sha256sum: good - aux/ip6tables: symlink to xtables-legacy-multi - aux/ip6tables-restore: symlink to xtables-legacy-multi - aux/ip6tables-save: symlink to xtables-legacy-multi - aux/iptables: symlink to xtables-legacy-multi - aux/iptables-restore: symlink to xtables-legacy-multi - aux/iptables-save: symlink to xtables-legacy-multi - links: good
System: - /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin/aux iptables v1.8.8 (legacy): ok - swap: disabled - routes: ok
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.232/modules.dep.bin' modprobe: FATAL: Module configs not found in directory /lib/modules/4.19.232 info: reading kernel config from /proc/config.gz ...
Additionally, Cilium has strict kernel version requirements — some Cilium features depend on newer kernel versions. Please refer to the official documentation for details.
Modifying Kernel Configuration and Compiling
The Linux SDK is generally provided by the official vendor. The directory structure for Rockchip-based Linux SDKs is fairly consistent. I’ll use Purple Pi OH as an example here. If you have a similar need with a different Rockchip board, you should be able to find the corresponding directory quickly.
The kernel configuration file is typically located at: xxxxxxx/kernel/arch/arm64/configs/xxxxx_linux_defconfig
Append the kernel configuration options listed above to the end of this file (make sure to deduplicate), then save.
Then simply compile:
1
./build.sh kernel
After compilation, a boot.img image will be generated in the ./rockdev directory.
Then use the Rockchip flashing tool RKDevTool.exe to flash just the boot.img.
│ Compiling is really resource-intensive — it takes a lot of time, CPU, and disk space 😂
Potential Issues
Partition Size Exceeded
During compilation, I encountered an error about the recovery partition exceeding its size limit:
After spending a weekend tinkering with the Rockchip arm64 development board, I can finally run Docker, K3s, Tailscale, and Cilium on a board with just 2GB of RAM. 🎉🎉🎉
As I mentioned before, Arm development boards have these advantages:
Cheap
Highly hackable
Low power consumption
Minimal heat dissipation, silent operation
The Arm64 ecosystem is decent enough nowadays
However, compared to x86, the ecosystem for these Arm boards is still quite lacking — no BIOS/UEFI, and installing the software mentioned above requires tweaking kernel parameters, compiling, and flashing. It’s exhausting…
x86 also has these advantages:
Cheap
Highly hackable
But the x86 ecosystem is so much more mature — it’s far less hassle.
Compared to x86, Arm’s real strengths are low power consumption and minimal heat. But now Intel chips like the N100, with a TDP of just 6W, are also very power-efficient and can be passively cooled for silent operation. Arm’s advantages are dwindling…
So here’s my recommendation: if you want a hassle-free, silent, low-power setup, go with an x86 mini PC first; if you want to tinker and still want silent, low-power operation, go with various Arm Pi boards or TV boxes; if you don’t care about power consumption or noise and want high specs, try a used x86 server. 😂😂😂