Skip to content

Helm + Crossplane on Azure

A decision-driven guide for provisioning Azure infrastructure using Helm charts that render Crossplane Managed Resources from the provider-family-azure ecosystem.

This is not a generic tutorial. It captures one coherent model — with the reasoning, trade-offs, and real CRDs — so you can build on it or deliberately deviate from it.


What This Covers

SectionWhat You Learn
Crossplane ConceptsHow MRs, Compositions, XRDs, and Claims actually work — with diagrams
The DecisionWhy we chose Helm + direct MRs over Compositions, and when to change that
Getting StartedInstall Crossplane, providers, credentials, and deploy your first chart
Chart ReferenceEvery template in azure-base/ explained with the real provider CRD fields
Environment StrategyHow values-dev.yaml vs values-prod.yaml works, what changes between environments
When to AbstractThe exact checklist and steps for graduating from direct MRs to Compositions

The One-Sentence Philosophy

Helm renders real Azure Managed Resources. Crossplane reconciles them. No Compositions until you've proven you need them.


Azure Resources Provisioned

The sample azure-base chart creates a complete landing zone:


Providers Used

Sub-ProviderVersionAPI GroupResources
provider-family-azurev2.3.0azure.upbound.ioResourceGroup
provider-azure-networkv2.3.0network.azure.upbound.ioVirtualNetwork, Subnet, SecurityGroup, SubnetNetworkSecurityGroupAssociation
provider-azure-storagev2.3.0storage.azure.upbound.ioAccount, Container
provider-azure-keyvaultv2.3.0keyvault.azure.upbound.ioVault

All from the Upbound Marketplace.


Quick Start

bash
# 1. Install Crossplane
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm install crossplane crossplane-stable/crossplane \
  --namespace crossplane-system --create-namespace --wait

# 2. Install Azure providers
kubectl apply -f setup/providers.yaml

# 3. Configure credentials
kubectl apply -f setup/provider-config.yaml

# 4. Deploy dev environment
helm install azure-base-dev ./charts/azure-base \
  -f ./charts/azure-base/values-dev.yaml

# 5. Watch resources provision
kubectl get managed -w

Released under the MIT License.