Design ser8 as the primary ops plane, not only the o11y host #506
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/infrastructure#506
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kai called out that moving only the old kai-server
observabilitynamespace underuses ser8 dramatically. ser8 has roughly 1.86x kai-server's RAM and is already documented as the ops/o11y plane, but the current cleanup threads are still piecemeal.Current context:
coilyco-flight-deck/infrastructure#505now tracks retiring the old kai-server observability namespace after ser8 coverage is verified.coilyco-bridge/deploy#51tracks migrating glitchtip/signoz/vmsingle deploy ownership.coilyco-bridge/deploy#114tracks splitting the old shared observability ownership bucket.Please produce a practical placement plan for ser8 as the primary ops plane, beyond just moving the o11y namespace.
Classify current and near-term workloads into:
For each candidate, include:
infrastructurevsdeploy).Acceptance: the result is an actionable roadmap with concrete follow-up issues, not just "move observability."
🔎 ward agent advisor
ward agent advisor --harness codexran a one-shot standard research pass on this question:Recommendation
Treat
ser8as the primary ops plane, but do it as a layered placement program, not a single "move observability" event.The repo evidence already points that way:
docs/FEATURES.mddescribesser8as the independent ops-plane cluster and warm standby.coilyco-bridge/deploy/docs/o11y.mdsays new observability signals belong onser8, and kai-server'sobservabilitynamespace is the retiring stack.ser8:git-state-watch,flux-readiness-watch,fleet-converge,agentic-os-pin-converge, plus the host-levelresticreceiver/prune flow.infrastructure#314already tracks moving CI runners off kai-server, which is the other major ops-plane workload.The right design is:
Classification
App plane stays on kai-server
thermal-heartbeat,process-memory-heartbeat,agent-health-heartbeat, and the kai-server-sidenode-stats-mcpsurface should stay local to the producer host. Why: they read local/proc, sensors, journals, GPU state, or host namespaces. Implications: tiny RAM/disk, but they must be repointed to ser8 sinks where applicable. Follow-up:coilyco-flight-deck/infrastructureissue to repoint every local producer to ser8 endpoints and document any intentional drops.personal-dashboardis closer to "host-local dashboard" than shared ops plane. Keep it on kai-server unless a replacement dashboard is deliberately designed on ser8. Implications: low resource cost, but do not expand it as a ser8 dependency by accident. Follow-up: none now.Ops plane should move to ser8
57GRAM class,857Gfree disk noted inser8-k3s.md). Dependencies: producer repoints first, preserve-or-waive historical data explicitly, then remove kai-server replicas. Follow-up: continuecoilyco-flight-deck/infrastructure#505plus the deploy-owned per-stack work undercoilyco-bridge/deploy#51.deploy/docs/o11y.mdexplicitly says GlitchTip is the destination and tracks the ser8 move separately. Implications: moderate RAM, persistent Postgres/Valkey disk, and backup planning matter more than CPU. Dependencies: CloudNativePG/operator prerequisites on ser8, backup plan, app DSN cutover sequencing. Follow-up:coilyco-bridge/deployissue for the service move ifdeploy#51does not already cover GlitchTip runtime placement in enough detail.forgejo-runner,forgejo-runner-deploy, andforgejo-runner-tap-writerbelong on ser8. Why:infrastructure#314already identifies them as ops-plane workloads and moving them removes kai-server restart blast radius from CI. Implications: moderate RAM/ephemeral disk use, plus cross-cluster registry/network design needs care. Dependencies: resolve runner-to-registry path and any host-executor assumptions before moving. Follow-up:coilyco-flight-deck/infrastructure#314is the right umbrella.forgejo-issuesand likelysignoz-mcpshould live on ser8. Why: they are meta-services over the fleet, not product apps.forgejo-issuesis a pure ops surface (Windmill + Postgres + NocoDB), andsignoz-mcpreads ser8 SigNoz anyway, so keeping it on kai-server adds an unnecessary hop and ties ops visibility to the app plane. Implications: light-to-moderate RAM, persistent disk forforgejo-issues, negligible disk forsignoz-mcp, mostly tailnet/internal traffic. Dependencies: service manifests live incoilyco-bridge/deploy, so this is deploy-owned placement work. Follow-up:coilyco-bridge/deployissues forforgejo-issuesplacement on ser8 andsignoz-mcpplacement on ser8.coilyco-ops-summonshould move to ser8, alongside existing ser8 timers likegit-state-watch,fleet-converge,flux-readiness-watch, andagentic-os-pin-converge. Why: these are operator workflows, and several already use the "run on ser8, probe kai-server" pattern. Implications: low RAM/disk, mostly API/network traffic. Dependencies: none beyond systemd/ansible rollout. Follow-up:coilyco-flight-deck/infrastructureissue to move remaining bot/automation timers from kai-server to the ser8 ops host.docs/issue-corpus-rollout-runner.md. Follow-up:coilyco-flight-deck/infrastructureissue if the dormant runner work is revived.coilyco-flight-deck/infrastructuredesign issue.Keep split / external vantage
infrastructure#232/ current rollout path, but do not "move Gatus to ser8 only".node-stats-mcpshould stay per-node (kai-serverandser8) because it reads node-local state. Why: centralizing it would lose the host-local contract. Implications: tiny footprint, but keep both surfaces. Follow-up: none.coilyco-flight-deck/infrastructure#395remains the right tracker.Retire instead of move
observabilitylegacy. Do not spend design energy relocating dead panes. Follow-up: bundle the final deletion withinfrastructure#505once verified absent or unused.coilyco-flight-deck/infrastructure#505.docs/FEATURES.mdalready marks the current Forgejo<->GitHubpush --mirrortimers as being replaced by the safer mirror-sync path. Recommendation: do not migrate the old timers to ser8 as a long-term pattern. Retire them once the safer replacement is live. Follow-up:coilyco-flight-deck/infrastructureunder the existing mirror-sync work, not a new ser8-move issue.coily-audit-dashboard- explicitly called out as kai-server coily-retention only. Recommendation: retire with the remaining kai-server coily dependency rather than moving it. Follow-up: tie to the existing coily-retention/gaming retirement work.Safe order
Use this order to improve reliability without turning ser8 into one fragile blob:
coilyco-ops-summon,signoz-mcp, and similar readers/bots are low-risk wins that reinforce ser8 as the operator home.forgejo-issuesis a good example: useful on the ops plane, but it introduces its own Postgres/Windmill persistence and should follow the earlier stateless moves.Suggested follow-up issues
These look like the concrete child tracks the roadmap needs:
coilyco-flight-deck/infrastructure- "Repoint kai-server local telemetry producers to ser8 and delete kai-server observability bridge surfaces". Scope:thermal-heartbeat,process-memory-heartbeat,agent-health-heartbeat, NodePorts, tailscale proxies, ward verbs, docs.coilyco-flight-deck/infrastructure- "Evacuate Forgejo runners from kai-server to the ser8 cluster". This already exists as#314; it should be treated as part of the primary-ops-plane program.coilyco-flight-deck/infrastructure- "Move remaining bot/automation timers from kai-server to the ser8 ops host". Scope:coilyco-ops-summonfirst, plus any other read-only background automation still living on kai-server.coilyco-flight-deck/infrastructure- "Decide whether ser8 needs external-secrets for long-lived ops services". This becomes more important as more persistent services move.coilyco-bridge/deploy- "Placesignoz-mcpon ser8 instead of kai-server". It is an ops reader for ser8's trace/log plane.coilyco-bridge/deploy- "Placeforgejo-issueson ser8 as an ops-plane mirror". Scope: node placement, storage, tailnet access, and any secret-handling implications.coilyco-bridge/deploy- continue the existing per-stack observability ownership and placement work underdeploy#51, with GlitchTip explicitly called out as the last heavy stateful move.Open questions
personal-dashboardmay be worth keeping local, whilecoily-audit-dashboardlooks like pure retirement material.Risks
forgejo-issues, and GlitchTip should be separate waves.Bottom line
The actionable plan is:
ser8the default home for shared ops services.That is the practical shape that uses ser8 as the primary ops plane without collapsing everything into one new single point of failure.
Researched and posted automatically by
ward agent advisor --harness codex(ward#179). This is one-shot research, not a carried change - verify before acting on it.— Codex, via
ward agent🔎 ward agent advisor
ward agent advisor --harness codexran a one-shot standard research pass on this question:Recommendation
Treat
ser8as the default home for shared operator services, but keep the app plane and external vantage points deliberately split. The repo evidence supports this: deploy docs already callser8the canonical ops and o11y plane,kai-serverthe app plane, and the old kai-serverobservabilitynamespace a retiring stack. The practical plan is not move everything to ser8. It is move shared ops state and readers there, keep producer-local probes local, keep reachability multi-vantage, and retire legacy surfaces once producers are repointed.Decisions
kai-serverremains the app plane for public and user-facing services, app-local registries and ingress, game-adjacent workloads, Open WebUI, backend, Eco, ComfyUI front door, and most public or Authelia-gated MCP surfaces that are part of the app serving path.ser8becomes the default for shared ops services: VictoriaMetrics, vmalert, SigNoz, GlitchTip, Gatus aggregation, issue/status mirrors, CI and deploy runners where the identity model fits, background fleet automation, backup receivers, and operator dashboards.node-stats-mcpshould stay per-node, and host-local SigNoz should remain loopback-only for high-detail local debugging.Classification
App Plane Stays On Kai-Server
thermal-heartbeat,process-memory-heartbeat,agent-health-heartbeat, GPU heartbeat, and node-local MCPs should stay on the host they observe. Their sinks should point at ser8 where applicable.signozansible role is intentionally separate from shared ser8 SigNoz because it can carry full local request and response bodies. Keep it loopback-only and do not fold it into the shared ops plane.Ops Plane Should Move Or Stay On Ser8
infrastructure#505,deploy#51, anddeploy#114.infrastructure#395.infrastructure#314is the right umbrella.coilyco-ops-summonand fleet automation - The repo already runsgit-state-watch,fleet-converge,flux-readiness-watch, andagentic-os-pin-convergeon ser8. Move remaining read-only bot and automation timers there using the same user-systemd and ansible-managed pattern.signoz-mcp- It reads ser8 SigNoz but currently serves from kai-server. Move it to ser8 or document why it stays. The blocker is secret delivery because ser8 lacks external-secrets today.forgejo-issues- This is an ops mirror, not an app. It should move to ser8 after secrets and backups are clear. Expect moderate persistent disk for Postgres plus Windmill and NocoDB, and steady Forgejo API traffic every 15 minutes.Keep Split Or External Vantage
NET_RAW. Keep ser8 and kai-server instances, then add tower and fleet rows as separate vantage points. Ser8 can own Tier-2 aggregation, but Tier-1 pages and Telegram pages should survive a ser8 o11y outage.node-stats-mcp- Keep one per node. The kai-server surface can remain public auth-gated plus tailnet-direct, and ser8 should stay tailnet-direct only.Retire Instead Of Move
forgejo-issues, which now documents itself as the replacement for the old git-rendered issue corpus. Do not revive the old runner unless there is still a distinct offline-corpus requirement.Safe Order
coilyco-ops-summon,signoz-mcp, and similar stateless readers are low-risk once secrets are solved.forgejo-issuesand any remaining GlitchTip state only after backup and restore paths are written down.Follow-Up Issues To De-Duplicate
coilyco-flight-deck/infrastructure- Repoint kai-server local telemetry producers to ser8 and delete legacy kai-server observability bridge surfaces. This extendsinfrastructure#505.coilyco-flight-deck/infrastructure- Finish the Forgejo runner ser8 design underinfrastructure#314, with explicit registry, PVC, DinD, and deploy-runner identity decisions.coilyco-flight-deck/infrastructure- Decide whether ser8 should run external-secrets before more long-lived services move there.coilyco-flight-deck/infrastructure- Movecoilyco-ops-summonand any remaining read-only bot timers to the ser8 user-systemd pattern.coilyco-flight-deck/infrastructure- Add backup and restore coverage for stateful ser8 ops services, especially GlitchTip andforgejo-issues.coilyco-bridge/deploy- Move or explicitly pinsignoz-mcpplacement. It reads ser8 SigNoz, but current access iskai-server:30083.coilyco-bridge/deploy- Moveforgejo-issuesto ser8 as the private ops mirror after secrets and backups are decided.coilyco-bridge/deploy- Wire Gatus Tier-2 scraping into ser8 vmagent or document why annotations remain documentary.coilyco-bridge/deploy- Continuedeploy#51anddeploy#114for observability ownership, with GlitchTip treated as the heavier stateful tail of the move.Open Questions
signoz-mcp, Gatus, vmalert, GlitchTip, andforgejo-issuesall need secrets?forgejo-issues- Is the old issue-corpus runner still needed, or has the Postgres-backed mirror fully replaced it?Risks
Bottom line: make ser8 the primary ops plane for shared operator state and automation, but keep kai-server as the app plane and keep independent observation paths alive. The roadmap should improve reliability wave by wave: guardrails, o11y repoints, runner design, lightweight ops readers, stateful mirrors, then retirement cleanup.
Researched and posted automatically by
ward agent advisor --harness codex(ward#179). This is one-shot research, not a carried change - verify before acting on it.— Codex, via
ward agent