📋 Prerequisites
🎯 Affected Service(s)
UI Service
🚦 Impact/Severity
High — the UI loads but cannot create or modify anything
🐛 Bug Description
The nextjs process in the kagent-ui pod is killed with SIGILL (illegal instruction) on a Raspberry Pi 4 (Cortex-A72). nginx loses its upstream and returns 502, which the browser surfaces as "An unexpected response was received from the server."
This is the same failure as #1505, which was closed as not_planned after it could not be reproduced on an ARM64 Mac. Reporting it again because it still occurs on 0.9.12 (that issue was 0.8.0-beta6), and because the CPU feature data below explains why an Apple Silicon machine would not reproduce it.
The crash is triggered by Server Actions, not at startup. The pod reports 1/1 Running and read-only pages work fine — the process only dies when a POST arrives. That distinction may be why this looked intermittent before:
| Request |
Result |
GET / |
200 |
GET /models, GET /api/agents |
200 |
POST /models/new |
502 |
POST /mcp/new |
502 |
🔍 Root cause evidence
The node's CPU does not implement the LSE atomics added in ARMv8.1:
Model : Raspberry Pi 4 Model B Rev 1.4
Features : fp asimd evtstrm crc32 cpuid
Note the absence of atomics. Apple Silicon and most ARM64 servers (Graviton, Ampere) do implement it, so the published arm64 image runs there and fails only on older ARMv8.0 cores like the Cortex-A72. Node.js is v24.18.0 in the image.
supervisord shows the process being restarted on each POST:
WARN exited: nextjs (terminated by SIGILL; not expected)
INFO spawned: 'nextjs' with pid 8
✓ Ready in 0ms
WARN exited: nextjs (terminated by SIGILL; not expected)
And the corresponding nginx error:
[error] upstream prematurely closed connection while reading response header
from upstream, client: 10.42.0.72, request: "POST /models/new HTTP/1.1",
upstream: "http://127.0.0.1:8001/"
🔄 Steps To Reproduce
- Install kagent 0.9.12 on a k3s cluster whose nodes are Raspberry Pi 4 (arm64, Debian 12 bookworm, kernel
6.12.34+rpt-rpi-v8)
- Open the UI and load any page — this works
- Click through to any action that submits a form (for example New Model or New MCP Server)
- The browser shows "An unexpected response was received from the server", and the pod logs show the SIGILL above
✅ Expected Behaviour
Either the published linux/arm64 image runs on ARMv8.0 cores, or the constraint is documented and the image advertises a more specific platform so it is not silently pulled onto unsupported hardware.
💡 Possible direction
The likely culprit is a native dependency (or a Node build) compiled with -march targeting ARMv8.1+. Building the UI image for the ARMv8.0 baseline would cover Pi 4 and similar boards. I have not tried to isolate which module emits the trapping instruction — happy to run something specific in this environment if that would help.
🌍 Environment
- kagent: 0.9.12 (chart and images)
- Kubernetes: k3s v1.35.7+k3s1
- Nodes: 2 × Raspberry Pi 4 Model B Rev 1.4, arm64, Debian 12 (bookworm), kernel
6.12.34+rpt-rpi-v8
- containerd 2.2.5-k3s2
- Node.js in image: v24.18.0
- Everything else in kagent works: the controller, the agents and the A2A endpoints are all healthy on the same nodes, and the agents are usable through their A2A APIs. Only the UI's Next.js process is affected.
📋 Prerequisites
🎯 Affected Service(s)
UI Service
🚦 Impact/Severity
High — the UI loads but cannot create or modify anything
🐛 Bug Description
The
nextjsprocess in thekagent-uipod is killed with SIGILL (illegal instruction) on a Raspberry Pi 4 (Cortex-A72). nginx loses its upstream and returns 502, which the browser surfaces as "An unexpected response was received from the server."This is the same failure as #1505, which was closed as
not_plannedafter it could not be reproduced on an ARM64 Mac. Reporting it again because it still occurs on 0.9.12 (that issue was 0.8.0-beta6), and because the CPU feature data below explains why an Apple Silicon machine would not reproduce it.The crash is triggered by Server Actions, not at startup. The pod reports
1/1 Runningand read-only pages work fine — the process only dies when a POST arrives. That distinction may be why this looked intermittent before:GET /GET /models,GET /api/agentsPOST /models/newPOST /mcp/new🔍 Root cause evidence
The node's CPU does not implement the LSE atomics added in ARMv8.1:
Note the absence of
atomics. Apple Silicon and most ARM64 servers (Graviton, Ampere) do implement it, so the publishedarm64image runs there and fails only on older ARMv8.0 cores like the Cortex-A72. Node.js isv24.18.0in the image.supervisord shows the process being restarted on each POST:
And the corresponding nginx error:
🔄 Steps To Reproduce
6.12.34+rpt-rpi-v8)✅ Expected Behaviour
Either the published
linux/arm64image runs on ARMv8.0 cores, or the constraint is documented and the image advertises a more specific platform so it is not silently pulled onto unsupported hardware.💡 Possible direction
The likely culprit is a native dependency (or a Node build) compiled with
-marchtargeting ARMv8.1+. Building the UI image for the ARMv8.0 baseline would cover Pi 4 and similar boards. I have not tried to isolate which module emits the trapping instruction — happy to run something specific in this environment if that would help.🌍 Environment
6.12.34+rpt-rpi-v8