| title | Minimum Single Node Cluster Blueprint | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| description | Minimal deployment of Azure IoT Operations on a single-node, Arc-enabled Kubernetes cluster using minimum required resources while maintaining functionality | |||||||||
| author | Edge AI Team | |||||||||
| ms.date | 2025-06-07 | |||||||||
| ms.topic | reference | |||||||||
| keywords |
|
|||||||||
| estimated_reading_time | 3 |
This blueprint provides a minimal deployment of Azure IoT Operations (AIO) on a single-node, Arc-enabled Kubernetes cluster. It is designed to use the minimum required resources while still providing a functional edge deployment with Azure IoT Operations. Please follow general blueprint recommendations from blueprints README.md.
This blueprint deploys:
- A Linux VM host in Azure (minimum size)
- A K3s Kubernetes cluster on the VM
- Azure Arc connection for the cluster
- Minimal cloud resources required by AIO (Key Vault, Storage, etc.)
- Core Azure IoT Operations components
The resulting architecture provides a functional edge-to-cloud solution with the minimal resource footprint.
To minimize resource usage, the following components are excluded:
-
Cloud Resources:
- Cloud Observability (monitoring resources)
- Cloud Messaging (Event Grid, Event Hubs, Service Bus)
- AKS & ACR (cloud-side Kubernetes and container registry)
-
Edge Resources:
- Edge Observability (monitoring on the edge)
- Edge Messaging (advanced messaging features)
-
Optional Features:
- Processor and Simulation OPC operators
- Advanced security features
- Diagnostic settings
- High availability features
This blueprint is available in two implementation options:
- Terraform - Infrastructure as Code using HashiCorp Terraform
- Bicep - Infrastructure as Code using Azure Bicep
Choose the implementation that best fits your team's expertise and existing pipelines.
This blueprint consists of the following key components:
- Main Configuration (
main.tf): Orchestrates the deployment workflow and module dependencies - Variables (
variables.tf): Defines input parameters with descriptions and defaults - Outputs (
outputs.tf): Exposes important resource information for future reference - Versions (
versions.tf): Specifies provider versions and requirements
| Module | Purpose | Source Location |
|---|---|---|
cloud_resource_group |
Creates resource groups | ../../../src/000-cloud/000-resource-group/terraform |
cloud_security_identity |
Handles identity and security resources | ../../../src/000-cloud/010-security-identity/terraform |
cloud_data |
Creates data storage resources | ../../../src/000-cloud/030-data/terraform |
cloud_vm_host |
Creates the VM host for the cluster | ../../../src/000-cloud/051-vm-host/terraform |
edge_cncf_cluster |
Deploys K3s Kubernetes cluster | ../../../src/100-edge/100-cncf-cluster/terraform |
edge_iot_ops |
Installs Azure IoT Operations | ../../../src/100-edge/110-iot-ops/terraform |
Beyond the basic required variables, this blueprint supports these key configurations:
| Variable | Description | Default | Notes |
|---|---|---|---|
environment |
Environment type | Required | "dev", "test", "prod", etc. |
resource_prefix |
Prefix for resource naming | Required | Short unique alphanumeric string (max 8 chars recommended) |
location |
Azure region location | Required | "eastus2", "westus3", etc. |
instance |
Deployment instance number | "001" |
For multiple deployments |
should_get_custom_locations_oid |
Auto-retrieve Custom Locations OID | true |
Set to false when providing custom_locations_oid |
custom_locations_oid |
Custom Locations SP Object ID | null |
Required for Arc custom locations |
should_create_anonymous_broker_listener |
Enable anonymous MQTT listener | false |
For dev/test only, not secure for production |
For additional configuration options, review the variables in variables.tf.
This blueprint also provides a Bicep implementation with the following components:
- Main Template (
bicep/main.bicep): The primary deployment template that orchestrates the overall solution - Types Definition (
bicep/types.core.bicep): Defines core parameter types and structures used throughout the deployment
The Bicep implementation follows the same architecture as the Terraform version, providing a native Azure Resource Manager (ARM) approach to deploying the same resources with minimal resource consumption.
| Module | Purpose | Source Location |
|---|---|---|
cloudResourceGroup |
Creates the resource group | ../../../src/000-cloud/000-resource-group/bicep |
cloudSecurityIdentity |
Handles identity and security | ../../../src/000-cloud/010-security-identity/bicep |
cloudData |
Creates data storage resources | ../../../src/000-cloud/030-data/bicep |
cloudVmHost |
Creates the VM host for the cluster | ../../../src/000-cloud/051-vm-host/bicep |
edgeCncfCluster |
Deploys K3s Kubernetes cluster | ../../../src/100-edge/100-cncf-cluster/bicep |
edgeIotOps |
Installs Azure IoT Operations | ../../../src/100-edge/110-iot-ops/bicep |
The Bicep implementation uses a streamlined parameter approach with a Common object type:
| Parameter | Description | Default | Notes |
|---|---|---|---|
common.resourcePrefix |
Prefix for resource naming | Required | Short unique alphanumeric string (max 8 chars recommended) |
common.location |
Azure region location | Required | "eastus2", "westus3", etc. |
common.environment |
Environment type | Required | "dev", "test", "prod", etc. |
common.instance |
Deployment instance number | Required | For multiple deployments |
resourceGroupName |
Resource group name | Auto-generated | Uses pattern: rg-{prefix}-{environment}-{instance} |
adminPassword |
VM admin password | Required | Important: always pass this securely |
customLocationsOid |
Custom Locations SP Object ID | Required | Needed for Arc custom locations feature |
shouldCreateAnonymousBrokerListener |
Enable anonymous MQTT listener | false |
For dev/test only |
shouldInitAio |
Deploy initial AIO components | true |
Controls deployment of initial AIO components |
shouldDeployAio |
Deploy AIO instance components | true |
Controls deployment of AIO instance components |
IMPORTANT: We highly suggest using this project's integrated dev container to get started quickly with Windows-based systems and also works well with nix-compatible environments.
Refer to the Environment Setup section in the Root README for detailed instructions on setting up your environment.
Ensure you have the following prerequisites:
- Sufficient quota for a VM in your target region
- At least 8 GB of RAM per VM, recommended 16 GB of RAM per VM
- Registered resource providers (see deployment instructions)
- Appropriate permissions to create resources
Follow detailed deployment instructions from the blueprints README.md, Detailed Deployment Workflow
This blueprint deploys a minimal configuration. If you need additional capabilities, consider:
- For observability features, deploy the
edge_observabilitymodule - For messaging features, deploy the
edge_messagingmodule - For additional operators, modify the
edge_iot_opsmodule variables
🤖 Crafted with precision by ✨Copilot following brilliant human instruction, then carefully refined by our team of discerning human reviewers.