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

Steps

1. Choose the configuration surface

Use the development YAML for a service that runs as a local process:

ServiceDevelopment configuration
UCPcmd/ucpd/ucp-dev.yaml
Applications RPcmd/applications-rp/applications-rp-dev.yaml
Dynamic RPcmd/dynamic-rp/dynamicrp-dev.yaml
Controllercmd/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 sectionSource of truthCurrent values or shape
environmenthostoptions.EnvironmentOptionsname, roleLocation
databaseProviderdatabaseprovider.OptionsProvider is apiserver, inmemory, or postgresql
queueProviderqueueprovider.QueueProviderOptionsProvider is apiserver or inmemory; includes a queue name
secretProvidersecretprovider.SecretProviderOptionsProvider is kubernetes or inmemory
metricsProvidermetricsservice.Optionsenabled, serviceName, and nested prometheus.path / prometheus.port
server, workerServer, ucppkg/armrpc/hostoptionsHTTP 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 variablePurpose
SKIP_ARMSet to true to disable Azure Resource Manager integration
ARM_AUTH_METHODSelects UCPCredential, Managed, ServicePrincipal, or Cli authentication
AZURE_CLIENT_IDService-principal client ID
AZURE_CLIENT_SECRETService-principal client secret
AZURE_TENANT_IDService-principal tenant ID
MSI_ENDPOINT / IDENTITY_ENDPOINTSignals that managed identity is available
RADIUS_LOGGING_JSONSelects the development or production log profile
RADIUS_LOGGING_LEVELOverrides 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/Chart succeeds after a chart configuration change.
  • make debug-start starts every local component after a development configuration change.
  • make debug-status reports 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.endpoint with cmd/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.yaml template or the value that feeds it, then render the chart before reinstalling.
  • Logging ignores the YAML value. Unset RADIUS_LOGGING_JSON or RADIUS_LOGGING_LEVEL; environment values take precedence.