fix(trmnl): request an explicit device LB address, document the sidekiq race #481

Merged
k.renner merged 1 commits from fix-trmnl-lb-address into master 2026-08-10 21:08:54 +00:00
2 changed files with 24 additions and 2 deletions
+14 -2
View File
@@ -9,8 +9,19 @@
#
# Same shape as home-assistant-bgp: a dedicated address on the Cilium BGP
# pool rather than a TLS-less Ingress, which would be a new pattern for this
# repo. The device is provisioned with the HOSTNAME, not the address, so the
# lease can move without re-provisioning hardware.
# repo. The device is provisioned with the HOSTNAME, not the address.
#
# The address is requested explicitly, matching every other LB service here.
# Left to allocate freely, Cilium IPAM handed out the first free address in
# the pool block (10.2.99.0-10.2.99.255) — which is 10.2.99.0, the base
# address of the range. Each LB address is advertised to the UDM as its own
# BGP route so that is routable in principle, but a .0 host address is the
# kind of thing constrained embedded IP stacks get wrong, and the TRMNL
# firmware is the single client that has to work here. Not worth the risk
# for an address nobody chose on purpose.
#
# .89 continues the existing sequence (.81-.88 are in use) and matches the
# fd99::89 that IPAM had already picked for v6.
apiVersion: v1
kind: Service
metadata:
@@ -21,6 +32,7 @@ metadata:
lb-pool: bgp
annotations:
external-dns.alpha.kubernetes.io/hostname: trmnl-device.renner.uno
lbipam.cilium.io/ips: "10.2.99.89,fd99::89"
spec:
type: LoadBalancer
externalTrafficPolicy: Local
+10
View File
@@ -124,6 +124,16 @@ spec:
envFrom:
- configMapRef:
name: terminus-config
# EXPECTED on a fresh deploy: this container loses the race against
# the web container's migration and exits 1 with
# `PG::UndefinedTable: relation "account" does not exist`, then
# comes up healthy on the restart once the schema exists.
# Observed on first deploy 2026-08-10; converged in ~1s. There is
# no upstream ordering hook, and gating it behind an initContainer
# that probes for a specific table would couple us to Terminus's
# schema. So this is left to Kubernetes' restart, deliberately —
# a single sidekiq restart shortly after a rollout is benign. More
# than a couple, or restarts long after a rollout, are NOT this.
env:
# No APP_SETUP here — see the web container.
- name: DATABASE_URL