This guide helps you troubleshoot issues where modules are not starting, connecting, or behaving as expected.
Scope: the Kubernetes operator only. The external runtime in this repository has no CRDs and no controllers; nothing here applies to it.
The CapabilityBinding is the source of truth for what should be running.
kubectl get capabilitybindings -l bindery.platform/world=<world-name>Look for:
-
Root Bindings: the synthetic
system.rootcapability. These ensure entry-point modules start. -
Global Bindings:
Scope=realm. These point to shared services. -
Status: the
CapabilityBindingCRD prints aPhasecolumn from.status.phase, but no controller writes that field — it will be empty. The signals that are actually written are theRuntimeReadycondition in.status.conditionsand the resolved endpoint in.status.provider.endpoint:kubectl get capabilitybinding <name> -o jsonpath='{.status.provider.endpoint}{"\n"}' kubectl get capabilitybinding <name> \ -o jsonpath='{range .status.conditions[?(@.type=="RuntimeReady")]}{.status} {.reason}{"\n"}{end}'
- Check Booklet: Is the module listed?
- Check CapabilityResolver:
- Did it create a binding?
- If not, check
WorldInstancestatus forModuleManifestNotFoundor resolution errors. kubectl describe world <world-name>
- Check RuntimeOrchestrator:
- If binding exists, is there a Deployment?
kubectl get deployment -l bindery.platform/module=<module-name>- If no deployment, check
RuntimeOrchestratorlogs. Does the module havebindery.dev/runtime-imageannotation?
- Check Init Containers:
- We inject a
wait-for-depsinit container. - If the pod is stuck in
Init:0/1, it means a dependency is not reachable. - Check logs:
kubectl logs <pod> -c wait-for-deps
- We inject a
- Check Dependency Services:
- Are the Services for the required modules up?
kubectl get svc
If a global service is missing:
- Check the
Realmresource. - Check
RealmControllerlogs. - Verify
CapabilityBindingwithScope=realmexists.
Registered in controllers/metrics.go:
bindery_controller_reconcile_total,bindery_controller_reconcile_error_totalbindery_capabilityresolver_unresolved_requiredbindery_capabilityresolver_bindings_created_total,bindery_capabilityresolver_bindings_updated_total,bindery_capabilityresolver_bindings_deleted_totalbindery_capabilityresolver_resolution_duration_secondsbindery_runtimeorchestrator_deployment_duration_seconds
make run-controller disables the metrics listener; use
make run-controller-with-metrics to expose :8080.
If a world will not scale, or will not scale back, read the clamp semantics in
../standards/shard-autoscaling.md first:
minShards only raises and maxShards only lowers, and status.currentShards
lags one reconcile pass. Lowering minShards alone will not shrink a world that
has already grown.