Skip to main content
Version: 0.1.0-rc.5

Controller Split

Diagram

Controller split

Workload, admin operations, and status are separated so high-churn reconciliation, long-running workflows, and API status writes do not block each other.

Reference table

Controller responsibilities

Controller responsibilities.
ControllerPrimary roleWhy it stays separate
AdminOpsRuns upgrades and backups.Long-running workflows should not block pod recovery or normal reconciliation.
StatusAggregates state and writes status updates.Serializing status writes avoids ResourceVersion conflicts and keeps conditions stable.
OpenBaoRestoreReconciles destructive restore workflows.Restore needs its own lock-aware control surface instead of riding on normal cluster reconcile loops.
ProvisionerReconciles OpenBaoTenant onboarding and namespace scaffolding.Tenant guardrails belong to Day 0 provisioning, not to the cluster workload loop.
Restore controller

Restores are reconciled through the separate OpenBaoRestore controller, which orchestrates restore Jobs and acquires the cluster operation lock before destructive work starts.

App Orchestration And Managers

Diagram

App-layer orchestration

Controllers hand off to narrow app-layer facades first, then into focused managers and shared lifecycle services. This keeps import surfaces small and responsibilities explicit.

Reference table

Manager boundaries

Manager boundaries.
ManagerScopeKey reason for separation
Cert ManagerHandles operator-managed, ACME, and external TLS interactions.TLS integration has its own dependency model and readiness surface.
Init ManagerCoordinates initialization when self-init is disabled.Bootstrap logic is security-sensitive and distinct from normal steady-state reconcile work.
Upgrade / Backup / Restore ManagersRun lock-aware disruptive operations.These workflows share lifecycle helpers but own different risk profiles and side effects.
Provisioner ManagerOnboards tenant namespaces and guardrails.Tenant governance belongs to provisioning time, not to the cluster workload loop.
Boundary contract

Controller import surfaces are intentionally narrow and enforced by generated architecture-boundary rules from .ast-grep/policy/architecture-boundaries.yml.

Deep dives

Prerelease documentation

This version tracks a prerelease build. Features and behavior may change before the next stable release.

Was this page helpful?

Use Needs work to open a structured GitHub issue for this page. The Yes button only acknowledges the signal locally.