Radius: One Application Definition Across Three Clouds
Radius separates developer concerns from operator concerns through two primitives: resource types and recipes. Developers declare what their application needs. Operators encode infrastructure decisions, security requirements, and cost controls inside recipes. Developers never modify application definitions when targeting a new environment. Tsai deployed a front-end container with a Redis cache and an AI model locally using tiny llama, then pointed the same definition at an AKS environment running a GPT-4o nano model. No source code changed. The environment resolved the right infrastructure automatically.
Deploying to AWS Without Changing the App
Pointing the same application definition at an AWS environment, Radius provisioned a MemoryDB cluster for the cache and an AWS Bedrock instance for the AI model. The rad app graph command confirmed the AWS-specific resources. Three environments, three distinct infrastructure stacks, zero changes to the application definition or source code. The application graph shows every resource and every dependency after each deployment, giving operators a clear picture of what is actually running.
Custom Resource Types at Millennium bcp: Compliance as an Interface
Millennium bcp is a bank with CMDB, ITSM approval workflows, and strict compliance rules. Out-of-the-box Radius types did not cover those needs, so the team built custom resource types. Guedes frames custom types using familiar programming concepts: resource types are interfaces, recipes are implementations, environments provide dependency injection. A custom CMDB type accepts an application ID and returns allowed capabilities and required cost-center tags. Platform users register the type as an OCI artifact, then code against the interface without knowing what backend system fulfills it.
Short-Lived Implementations, Stable Contracts
The Millennium bcp team also added custom resource types for observability, database engines, and GCP and on-premises private cloud targets via Terraform. The key insight from production: the interface has a long life cycle, implementations change frequently. Operators push new recipe versions weekly. Developers do not notice because the contract is stable. Guedes says this also resolved ownership ambiguity. Before Radius, responsibility matrices for shared systems were unclear. The interface-plus-recipe pattern made it explicit what developers own and what operators own.
Headlamp Plugin: Radius Day-2 Operations Without a New Tool
Operators at Millennium bcp already use Headlamp as their Kubernetes dashboard. Adding another UI for Radius day-2 operations would slow adoption. The team published a Radius plugin to the Headlamp plugin catalog. Operators install it, and Radius applications appear in the same Headlamp interface alongside pods and other Kubernetes resources. Drilling into an application shows container resources and their details in the standard Headlamp style. No new tool, no new login, no context switch. The plugin surfaces the same Radius application graph data that the Radius dashboard shows.
Q&A
Does Radius detect and reconcile drift when infrastructure changes outside of a deployment? Radius tracks deployment state but has no active reconciliation loop. Drift detection routes through the underlying tool, Terraform provider for Terraform-based recipes, or Flux for GitOps-style CD. ▶ 26:39
Notable Quotes
We also did not want to put another new tool uh with any of those roles, the operators, the dela and such. Nuno Guedes · ▶ 22:00
contracts are stable, implementations have very short life cycles and honestly nobody cares because different concerns are equally serviced Nuno Guedes · ▶ 15:16
we’ve taken the exact same application definition and deployed it across three environments with uh different infrastructure provisioned in all three environments all without me having to modify my application my application definition or source code. Will Tsai · ▶ 09:46
radius biggest value is the fact that it is a translation layer Nuno Guedes · ▶ 26:52
Key Takeaways
- One Radius application definition deployed unchanged to local, AKS, and AWS environments.
- Custom resource types let Millennium bcp encode CMDB, ITSM, and observability requirements as stable interfaces.
- The Headlamp plugin brings Radius application graphs into an existing Kubernetes dashboard with no new tooling.
About the Speaker(s)
Nuno Guedes is Head of Public Cloud at Millennium bcp, Portugal’s largest privately-owned bank, and a Microsoft MVP for Azure. He leads cloud-native transformation work focused on containers and serverless, with a track record of solving compliance-heavy infrastructure challenges through platform engineering patterns.
Will Tsai is a Principal Product Manager at Microsoft on the Azure Incubations team, where he builds open-source projects that address developer challenges in cloud-native environments. Before Microsoft he held product and program management roles at Amazon.