Operate2 min read

Configure split runtime with Helm

Define and validate separate Helm-managed web, scheduler, worker, and status-projector roles.

Prerequisites

Read Runtime roles, calculate resources and connections for every replica, and use an image supporting split roles. Configure stable secrets and a direct database URL.

Prepare the configuration

Set runtime.mode: split, enable the migration Job, and define Web, Scheduler, General Worker, Critical Worker, Bulk Worker, and Status Projector replicas/resources/pools/probes/termination/PDBs. Direct ingress only to Web. Set database.maxApplicationConnections to the reviewed ceiling.

Keep migration and non-Web roles on direct PostgreSQL. Add PgBouncer only for Web.

Deploy split runtime

Lint, render, and inspect the chart. The integrated Deployment must be absent. Install/upgrade and require the migration hook to complete before all role rollouts become ready.

sh
kubectl -n opsknight get job,deployment,pod -w

Verify every role

Confirm migration success, Web readiness, scheduler heartbeat, progress in all worker lanes, status projection, and no integrated ownership. Run a synthetic incident through notification, acknowledgement, resolution, and projection while observing database connections.

Operate and scale in production

Alert on each role and lane. Scale only after checking oldest age, throughput, resource saturation, provider limits, and connection headroom. Keep critical work isolated and preserve graceful termination.

Troubleshooting

A role is missing: inspect rendered enablement/replica values and chart schema errors.

A role CrashLoops: inspect its Secret mapping, runtime role, database route, resources, and prior logs.

Queues grow with Ready Pods: investigate heartbeat, lane routing, provider/database bottlenecks, and throughput; readiness alone is insufficient.

Change or undo the configuration

Upgrade one reviewed values revision at a time. To return to integrated, stop split ownership before starting integrated and run full acceptance.

Next steps

Last updated for v2.0.0

Edit this page on GitHub