Radius control-plane configuration
July 13, 2026 ยท View on GitHub
Purpose
This guide explains where Radius control-plane configuration lives and how to change it for local development or a Helm-based installation. The Go option types are the schema source of truth; the checked-in development YAML and Helm templates show complete configurations.
Prerequisites
- Complete the repository prerequisites.
- For local process debugging, complete the setup in Running and debugging the control plane locally.
- For Kubernetes configuration changes, install Helm.
Steps
1. Choose the configuration surface
Use the development YAML for a service that runs as a local process:
| Service | Development configuration |
|---|---|
| UCP | cmd/ucpd/ucp-dev.yaml |
| Applications RP | cmd/applications-rp/applications-rp-dev.yaml |
| Dynamic RP | cmd/dynamic-rp/dynamicrp-dev.yaml |
| Controller | cmd/controller/controller-dev.yaml |
For Kubernetes installations, configuration is rendered from deploy/Chart/templates/<service>/configmaps.yaml with values from deploy/Chart/values.yaml. Do not add configuration under deploy/Chart/charts; that directory does not exist.
2. Update shared service options
The development files combine shared host options with service-specific settings. Use the option types linked below instead of treating this page as a manually duplicated schema:
| YAML section | Source of truth | Current values or shape |
|---|---|---|
environment | hostoptions.EnvironmentOptions | name, roleLocation |
databaseProvider | databaseprovider.Options | Provider is apiserver, inmemory, or postgresql |
queueProvider | queueprovider.QueueProviderOptions | Provider is apiserver or inmemory; includes a queue name |
secretProvider | secretprovider.SecretProviderOptions | Provider is kubernetes or inmemory |
metricsProvider | metricsservice.Options | enabled, serviceName, and nested prometheus.path / prometheus.port |
server, workerServer, ucp | pkg/armrpc/hostoptions | HTTP listener, async worker, and UCP connection settings |
For example, local services commonly use Kubernetes API server storage and expose Prometheus settings in this shape:
databaseProvider:
provider: apiserver
apiserver:
context: ""
namespace: radius-testing
queueProvider:
provider: apiserver
name: radius
apiserver:
context: ""
namespace: radius-testing
secretProvider:
provider: kubernetes
metricsProvider:
enabled: false
serviceName: ucp
prometheus:
path: /metrics
port: 9091
Use a direct UCP connection only for local process debugging:
ucp:
kind: direct
direct:
endpoint: http://localhost:9000/apis/api.ucp.dev/v1alpha3
Kubernetes deployments use the chart-rendered UCP connection instead of the local endpoint.
3. Configure supported environment overrides
Some behavior is read directly from the process environment:
| Environment variable | Purpose |
|---|---|
SKIP_ARM | Set to true to disable Azure Resource Manager integration |
ARM_AUTH_METHOD | Selects UCPCredential, Managed, ServicePrincipal, or Cli authentication |
AZURE_CLIENT_ID | Service-principal client ID |
AZURE_CLIENT_SECRET | Service-principal client secret |
AZURE_TENANT_ID | Service-principal tenant ID |
MSI_ENDPOINT / IDENTITY_ENDPOINT | Signals that managed identity is available |
RADIUS_LOGGING_JSON | Selects the development or production log profile |
RADIUS_LOGGING_LEVEL | Overrides the configured log level |
The logging environment variables take precedence over the equivalent logging.json and logging.level YAML values. See Logging for logging conventions.
4. Render or run the changed configuration
For a Helm change, render the chart and inspect the generated ConfigMaps:
helm template radius deploy/Chart
For a local development change, restart the affected process through the debug workflow:
make debug-stop
make debug-start
make debug-status
Verification
helm template radius deploy/Chartsucceeds after a chart configuration change.make debug-startstarts every local component after a development configuration change.make debug-statusreports the affected component as running.- The service log contains no YAML decoding or unknown-provider errors.
Troubleshooting
- The service rejects a provider name. Check the provider constants linked in Update shared service options; provider names are lowercase.
- A local service cannot reach UCP. Compare its
ucp.direct.endpointwithcmd/ucpd/ucp-dev.yaml; the development endpoint includes/apis/api.ucp.dev/v1alpha3. - A Helm edit does not change the installed configuration. Confirm you changed the appropriate
deploy/Chart/templates/<service>/configmaps.yamltemplate or the value that feeds it, then render the chart before reinstalling. - Logging ignores the YAML value. Unset
RADIUS_LOGGING_JSONorRADIUS_LOGGING_LEVEL; environment values take precedence.