ARM Support¶
This page documents the public ARM validation path for Productive K3S Profiles and the host preparation steps that were required in the retained Raspberry Pi validation.
Publicly validated case¶
The retained public ARM validation used:
- Raspberry Pi 5 Model B Rev
1.1 - Ubuntu
24.04Desktop onarm64 - one single-node host
4CPU cores- about
7.7 GiBRAM
That hardware profile completed:
make -C scenarios/edge/onprem-basic-arm preflightmake -C scenarios/edge/onprem-basic-arm upmake -C scenarios/edge/onprem-basic-arm validate
The full stack still has tighter margins on that size of machine than on a larger x86 host, so the public guidance about higher RAM for a smoother full-stack experience still applies.
Control-machine expectations¶
The machine running productive-k3s-profiles needs:
bashsshscppython3jqtarcurlsha256summake
ARM host preparation¶
The validated host preparation was intentionally small:
- Install or enable
openssh-server. - Add an SSH public key for the remote user.
- Configure
sudo NOPASSWDfor that user. - Ensure
curlis installed. - Confirm the host has working Internet access before bootstrap starts.
1. Enable openssh-server¶
On the ARM host:
2. Add your SSH public key¶
From the control machine:
Copy the public key to the ARM host user:
Then verify from the control machine:
3. Configure sudo NOPASSWD¶
On the ARM host:
Add:
Validate:
4. Ensure curl¶
On the ARM host:
5. Confirm outbound Internet access¶
The bootstrap downloads the k3s binary directly from upstream release URLs. If Wi-Fi or upstream routing drops, the install can appear stuck while downloading.
On the ARM host:
getent hosts github.com
curl -I -L --max-time 20 https://github.com
curl -4 -I -L --max-time 30 'https://github.com/k3s-io/k3s/releases/latest'
Example scenario configuration¶
Create:
Then fill in your own values:
ONPREM_SERVER_IP=<host-or-ip>
ONPREM_AGENT_IPS=
ONPREM_SSH_USER=<user>
ONPREM_SSH_PORT=22
ONPREM_SSH_KEY_PATH=/path/to/id_ed25519
PRODUCTIVE_K3S_SOURCE=remote
Avoid embedding private path or hostname assumptions into shared docs or profiles. The example above intentionally keeps those values generic.