Unpin matter-server, otbr, music-assistant from k8s-edge (shrink edge to USB-only) #82

Merged
k.renner merged 1 commits from worktree-edge-unpin-nonusb into master 2026-06-27 16:44:29 +00:00
3 changed files with 24 additions and 27 deletions
+11 -11
View File
@@ -16,26 +16,26 @@ spec:
labels:
app.kubernetes.io/name: matter-server
annotations:
# Multus attaches a second NIC (net1) on k8s-edge's v30iot VLAN
# via macvlan (see network-attachment.yaml). Matter device
# Multus attaches a second NIC (net1) on the v30iot VLAN via
# macvlan (see network-attachment.yaml). Matter device
# commissioning and discovery need real L2 presence on the IoT
# subnet — multicast send/receive — which a Cilium-managed pod
# IP or a LoadBalancer Service IP cannot provide. The NAD pins
# 10.2.30.226 statically; the nodeSelector below keeps the pod
# on k8s-edge, the only node with the v30iot bridge.
# 10.2.30.226 statically and uses master: eth1, which is the
# v30iot interface on every node (k8s-1/2/3 and k8s-edge alike),
# so this pod is no longer tied to k8s-edge.
k8s.v1.cni.cncf.io/networks: matter-server-iot
spec:
# Cluster pod network is the primary attachment (eth0, used by HA
# → matter-server via the ClusterIP Service and matter-server →
# OTBR via OTBR's ClusterIP Service). The macvlan attachment
# above is additive, not a replacement.
nodeSelector:
topology.kubernetes.io/zone: edge
tolerations:
- key: workload-class
operator: Equal
value: pinned
effect: NoSchedule
#
# No nodeSelector/toleration: this pod only needs v30iot (present
# on all nodes), not the edge USB devices. Dropping the
# workload-class=pinned toleration lets the edge taint keep it off
# the (tiny) edge box, reserving that node for the USB-bound
# home-assistant + zwave-js pods.
containers:
- name: matter-server
# Use the HAOS-published image from `ghcr.io/matter-js/...`,
@@ -17,8 +17,8 @@ spec:
labels:
app.kubernetes.io/name: music-assistant
spec:
# Host networking attaches MA to the edge node's L2 VLANs
# directly. The node's second NIC is on v30iot, so the pod sits
# Host networking attaches MA to the node's L2 VLANs directly.
# Every node's second NIC (eth1) is on v30iot, so the pod sits
# on the IoT VLAN with the audio clients (Snapcast / SlimProto /
# Chromecast). Those protocols sync audio across group members
# and require all members to share an L2 broadcast domain;
@@ -30,13 +30,12 @@ spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
enableServiceLinks: false
nodeSelector:
topology.kubernetes.io/zone: edge
tolerations:
- key: workload-class
operator: Equal
value: pinned
effect: NoSchedule
# No nodeSelector/toleration: MA only needs a node on v30iot (all
# of them) for audio-sync L2, not the edge USB devices. It's the
# heaviest of the formerly edge-pinned pods (2Gi limit), so
# dropping the workload-class=pinned toleration — which lets the
# edge taint keep it off the tiny edge box — is the main capacity
# win for this step.
containers:
- name: music-assistant
image: ghcr.io/music-assistant/server:2.9.4 # {"$imagepolicy": "flux-system:music-assistant"}
+5 -7
View File
@@ -21,13 +21,11 @@ spec:
# the IoT VLAN for mDNS/SRP advertisements and RA listening.
k8s.v1.cni.cncf.io/networks: otbr-iot
spec:
nodeSelector:
topology.kubernetes.io/zone: edge
tolerations:
- key: workload-class
operator: Equal
value: pinned
effect: NoSchedule
# No nodeSelector/toleration: OTBR only needs v30iot L2 presence
# (macvlan master: eth1, present on every node), not the edge USB
# devices, and its Thread RCP is reached over the network
# (slzb-thread.renner.uno). Dropping the workload-class=pinned
# toleration lets the edge taint keep it off the tiny edge box.
containers:
# The Thread RCP lives on a SLZB-06 over Ethernet at
# slzb-thread.renner.uno:6638 (Serial-over-IP). otbr-agent's