|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
|
# edge-host — bare-metal Arch N100 (replaces the k8s-edge Talos VM)
|
|
|
|
|
# edge-host — bare-metal Arch thin client (replaces the k8s-edge Talos VM)
|
|
|
|
|
|
|
|
|
|
Runs the hardware-bound services that used to be pinned to the `k8s-edge`
|
|
|
|
|
Talos node (opentofu `vm_153_k8s_edge.tf`), plus the new CAN bridge:
|
|
|
|
@@ -11,8 +11,13 @@ Talos node (opentofu `vm_153_k8s_edge.tf`), plus the new CAN bridge:
|
|
|
|
|
|
|
|
|
|
Everything else that once lived on k8s-edge (HA core, matter-server, OTBR,
|
|
|
|
|
music-assistant) already moved to the general node pool and stays in the
|
|
|
|
|
cluster — they need VLAN L2 presence, not USB, so a single LAN NIC on the
|
|
|
|
|
N100 is sufficient.
|
|
|
|
|
cluster — they need VLAN L2 presence, not USB, so a single LAN NIC is
|
|
|
|
|
sufficient.
|
|
|
|
|
|
|
|
|
|
The deployed unit is a **Dell Wyse 3040** (Atom x5-Z8350, 2 GB RAM) on a
|
|
|
|
|
~7.3 GB internal **eMMC** (`/dev/mmcblk0`) — see "Logging & eMMC" for the
|
|
|
|
|
flash-wear handling that hardware implies. The installer also supports an
|
|
|
|
|
N100/NVMe box; it autodetects the target disk, so either works.
|
|
|
|
|
|
|
|
|
|
Rationale for leaving Kubernetes for the CAN part: the stock Talos kernel
|
|
|
|
|
ships with `CONFIG_CAN` unset (siderolabs/talos#7686), so SocketCAN cannot
|
|
|
|
@@ -24,8 +29,9 @@ Build and boot the dedicated installer image — see
|
|
|
|
|
`images/edge-host-iso/README.md`. Short version:
|
|
|
|
|
|
|
|
|
|
1. `sudo pacman -S archiso && sudo images/edge-host-iso/build.sh`
|
|
|
|
|
2. Write ISO to a USB stick, boot the N100 from it, run `edge-install`
|
|
|
|
|
(partitions the NVMe, installs the ansible-ready base system with SSH
|
|
|
|
|
2. Write ISO to a USB stick, boot the target box from it, run `edge-install`
|
|
|
|
|
(partitions the internal disk — NVMe if present, else the eMMC; the
|
|
|
|
|
installer autodetects — installs the ansible-ready base system with SSH
|
|
|
|
|
keys, DHCP, docker — asks for confirmation before wiping).
|
|
|
|
|
3. Add the DHCP reservation/DNS entry for `edge-1.srv.renner.uno` on the
|
|
|
|
|
UDM, confirm `ssh root@edge-1.srv.renner.uno` works.
|
|
|
|
@@ -69,7 +75,7 @@ The Z-Wave network keys do NOT need separate handling — they live in
|
|
|
|
|
## Cutover checklist (service downtime: minutes, do per-service)
|
|
|
|
|
|
|
|
|
|
Preparation:
|
|
|
|
|
- [ ] `vault.yml` populated (above), play runs green against the N100
|
|
|
|
|
- [ ] `vault.yml` populated (above), play runs green against edge-1
|
|
|
|
|
- [ ] CAN: Innomaker adapter connected to the VX3 external CAN port,
|
|
|
|
|
`ip -details link show can0` shows `state ERROR-ACTIVE bitrate 250000`,
|
|
|
|
|
`candump can0 -n 5` shows frames
|
|
|
|
@@ -78,7 +84,7 @@ zwave-js (order matters — never two servers on one radio):
|
|
|
|
|
- [ ] Copy the store out of the PVC while the pod still runs:
|
|
|
|
|
`kubectl -n home-assistant exec deploy/zwave-js -- tar cf - -C /usr/src/app store | tar xf - -C /opt/edge-host/zwave-js/`
|
|
|
|
|
- [ ] Scale down in-cluster: `kubectl -n home-assistant scale deploy/zwave-js --replicas 0`
|
|
|
|
|
- [ ] Move the ZWA-2 stick to the N100, `docker compose up -d zwave-js`
|
|
|
|
|
- [ ] Move the ZWA-2 stick to edge-1, `docker compose up -d zwave-js`
|
|
|
|
|
- [ ] Point HA `zwave_js` integration at `ws://edge-1.srv.renner.uno:3000`
|
|
|
|
|
- [ ] Nodes alive in the UI on :8091 → remove the flux kustomization
|
|
|
|
|
`home-assistant-zwavejs` + PVC in a follow-up PR
|
|
|
|
|