Why · what AIO deployment looks like today, and the gaps Scale Kit and Launchpad fill
Step 1 — Prepare the cluster
Before any AIO command runs, the cluster and subscription have to be in a very specific shape. The list isn't long — it's just precise, undocumented in one place, and easy to get wrong.
Per-cluster prerequisites · in the order you actually do them
16 itemsMicrosoft.ExtendedLocation RP registered (custom locations)
Silent 'resource not found' downstream if missing
Microsoft.IoTOperations RP registered
Per-subscription one-time, easy to miss in new subs
Microsoft.DeviceRegistry RP registered
Same
Microsoft.SecretSyncController RP registered
Same
Azure CLI + azure-iot-ops extension installed
Version drift across operators causes silent flag differences
Azure CLI connectedk8s extension installed
Required before any Arc connect command runs
kubectl + helm installed, kubeconfig pointed at the cluster
Per-laptop setup; no central enforcement
Kubernetes cluster (AKS EE / K3s / RKE2)
Distro choice not obvious; some break on AIO updates
Connected to Azure Arc with custom locations enabled
Two-step enable; easy to forget --enable-custom-locations
OIDC issuer enabled on the cluster
Required before identity federation works
Workload identity federation enabled
Same az connectedk8s update — but separate flag
User-assigned managed identity for AIO components
Two MIs needed, often confused
User-assigned managed identity for AIO secrets
Distinct from the components MI
Azure Key Vault in the same tenant (RBAC mode)
Access-policy mode silently breaks secret sync
Storage account with hierarchical namespace
Schema Registry create fails without HNS enabled
Schema Registry resource
Resource ID feeds into az iot ops create later