{"record":{"id":"4262164d4197013c","repo":"microsoft/aspire","slug":"aspireradius091","errorCode":"ASPIRERADIUS091","errorMessage":"The Radius control plane in Kubernetes context '{kubeContext}' is v{controlPlaneVersion}, but this integration requires v{MinimumControlPlaneVersion} or later. Deploying to an older control plane appears to succeed while silently discarding the recipe pack, leaving every backing resource without a recipe. Run 'rad upgrade kubernetes' to bring the control plane up to date, then deploy again. Diagnostic: ASPIRERADIUS091.","messagePattern":"The Radius control plane in Kubernetes context '(.+?)' is v(.+?), but this integration requires v(.+?) or later\\. Deploying to an older control plane appears to succeed while silently discarding the recipe pack, leaving every backing resource without a recipe\\. Run 'rad upgrade kubernetes' to bring the control plane up to date, then deploy again\\. Diagnostic: ASPIRERADIUS091\\.","errorType":"error_code","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Radius/Publishing/RadiusDeploymentPipelineStep.cs","lineNumber":221,"sourceCode":"                cancellationToken).ConfigureAwait(false);\n\n            if (version is not { ExitCode: 0 } versionResult)\n            {\n                logger.LogDebug(\"Could not run 'rad version --output json'; skipping the control plane version check.\");\n                return;\n            }\n\n            if (!TryParseControlPlaneVersion(versionResult.StandardOutput, out var controlPlaneVersion) || controlPlaneVersion is null)\n            {\n                logger.LogDebug(\n                    \"Could not determine the Radius control plane version in Kubernetes context '{KubeContext}'; skipping the control plane version check.\",\n                    kubeContext);\n                return;\n            }\n\n            if (controlPlaneVersion < MinimumControlPlaneVersion)\n            {\n                throw CreateUnsupportedControlPlaneException(controlPlaneVersion, kubeContext);\n            }\n\n            logger.LogInformation(\n                \"Radius control plane v{ControlPlaneVersion} detected in Kubernetes context '{KubeContext}'.\",\n                controlPlaneVersion,\n                kubeContext);\n        }\n        finally\n        {\n            try\n            {\n                kubeConfigHome.Delete(recursive: true);\n            }\n            catch (Exception ex) when (ex is IOException or UnauthorizedAccessException)\n            {\n                // Best effort: a leaked temp kubeconfig must never fail an otherwise valid deploy.\n            }\n        }","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Radius/Publishing/RadiusDeploymentPipelineStep.cs#L203-L239","documentation":"VerifyControlPlaneVersionAsync probes the Radius control plane in the target Kubernetes context and throws this error when its version is older than MinimumControlPlaneVersion. The message explains why old control planes are dangerous for Aspire: deploying to them can appear to succeed while the recipe pack is silently discarded, leaving every backing resource without a recipe (diagnostic ASPIRERADIUS091). It instructs running 'rad upgrade kubernetes' before deploying again.","triggerScenarios":"Running the Radius deployment pipeline step against a Kubernetes context whose Radius control plane reports a version below the integration's MinimumControlPlaneVersion — detected via rad/publisher version probing of the context's control plane deployment.","commonSituations":"Long-lived cluster whose Radius control plane was never upgraded after installing a newer Aspire integration; pinning an old rad CLI or old control-plane Helm chart; cluster fleet with mixed Radius versions where an outdated context is targeted; upgrading the Aspire Radius integration (raising MinimumControlPlaneVersion) without upgrading the cluster.","solutions":["Run 'rad upgrade kubernetes' (with the correct kube context) to bring the control plane to a supported version, then deploy again","Verify with 'rad version' that the control plane version meets the integration's minimum","Ensure the kube context you deploy to is the intended, up-to-date one (kubectl config get-contexts / kubectl config use-context)","Update the rad CLI itself first, since upgrades are driven by the CLI's supported chart versions"],"exampleFix":"// before: deploying to a stale cluster\nrad version  // control plane v0.30 < required\n\n// after: upgrade the control plane, then redeploy\nkubectl config use-context my-cluster\nrad upgrade kubernetes\nrad version  // confirm >= minimum\naspire publish","handlingStrategy":"validation","validationCode":"# Verify the control plane version before deploying\nrad version  # compare 'control plane' version against the integration minimum\n# if outdated:\n#   kubectl config use-context <target-context>\n#   rad upgrade kubernetes","typeGuard":null,"tryCatchPattern":"try\n{\n    await pipeline.ExecuteAsync(context, ct);\n}\ncatch (Exception ex) when (ex.Message.Contains(\"ASPIRERADIUS091\"))\n{\n    logger.LogError(\"Upgrade the Radius control plane with 'rad upgrade kubernetes', then redeploy.\");\n    throw;\n}","preventionTips":["Pin and regularly upgrade the Radius control plane on all target clusters","After upgrading the Aspire Radius integration, upgrade the control plane before deploying","Verify 'rad version' per kube context in pre-deploy checks"],"tags":["radius","kubernetes","versioning","upgrade","diagnostics"],"backgroundTag":"unsupported-control-plane-version","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}