Environment setup
This page covers provisioning the Azure infrastructure for the OpenLM Platform using Azure Kubernetes Service (AKS) and managed Azure services.
For detailed sizing and service specifications, see Requirements.
Infrastructure components
The Azure deployment uses the following managed services:
| Component | Azure service | Purpose |
|---|---|---|
| Kubernetes | Azure Kubernetes Service (AKS) | Container orchestration |
| SQL database | Azure SQL Managed Instance | Identity, operational, and reporting data |
| Cache | Azure Cache for Redis | Caching and session storage |
| Persistent storage | Azure Managed Disks | Kafka, MongoDB, and other stateful services (~400 GB) |
Kafka and MongoDB run inside the Kubernetes cluster using Helm charts and Azure Managed Disks for persistence, rather than as Azure managed services.
Network provisioning
Use Azure CNI networking mode for AKS.
| Item | Requirement |
|---|---|
| Virtual network (VNet) | Minimum /22 CIDR block (for example, 10.0.0.0/22) |
| IP capacity | 1,024 addresses – approximately 400 needed for pods, nodes, and growth |
| Planned pods | ~143 |
| Planned nodes | 6–7 |
AKS cluster
Node pools
Create three node pools:
| Node pool | Purpose | VM size | Count | Max pods per node |
|---|---|---|---|---|
| System | Kubernetes system pods | 4 vCPU, 16 GB RAM (for example, Standard_D4ds_v4) | 2 | 30 |
| Main | Core application workloads | 4 vCPU, 16 GB RAM | 2 | 70 |
| Reporting | Reporting workloads | 4 vCPU, 16 GB RAM | 3 | 30 |
Use Kubernetes version 1.32.9 or another AKS-supported version matching your release policy.
Node labels
Apply labels to nodes for workload scheduling:
kubectl label node <system-node> openlm.com/role=system
kubectl label node <main-node-1> openlm.com/role=main-workload
kubectl label node <main-node-2> openlm.com/role=main-workload
kubectl label node <report-node-1> openlm.com/role=reporting-workload
kubectl label node <report-node-2> openlm.com/role=reporting-workload
kubectl label node <report-node-3> openlm.com/role=reporting-workload
Managed services
Azure SQL Managed Instance
| Setting | Requirement |
|---|---|
| Tier | General Purpose |
| Compute | 4 vCores minimum |
| Storage | 256 GB minimum |
| Scaling | Increase based on user volume, reporting load, and data retention |
Azure Cache for Redis
| Setting | Requirement |
|---|---|
| Tier | C2 |
| Cache size | 2.5 GB |
Azure Managed Disks
Managed disks are provisioned automatically by AKS when storage classes are configured. Approximately 400 GB total is needed for Kafka, MongoDB, and other stateful services.
In-cluster infrastructure services
Kafka and MongoDB are not provisioned as Azure managed services on this path – they run inside the AKS cluster, backed by Azure Managed Disks. Create their namespace first:
kubectl create namespace openlm-infrastructure
Kafka
Deploy Kafka from the Helm chart in the deployment package:
helm install kafka <kafka-chart>.tgz -f values.yaml -n openlm-infrastructure
Set the storage class and per-broker volume size in values.yaml before installing. Allow roughly 250 GB per broker.
Alternatively, use Confluent Cloud through the Azure Marketplace and point the platform at its bootstrap servers instead of installing in-cluster. Azure Event Hubs with the Kafka protocol layer is not supported.
MongoDB
Deploy MongoDB inside the Kubernetes cluster using the Helm chart provided in the deployment package. Azure Managed Disks provide the underlying persistent storage.
helm install mongodb <mongodb-chart>.tgz -f values.yaml -n openlm-infrastructure
MongoDB Atlas through the Azure Marketplace is a supported managed alternative.
Verify
kubectl get pods -n openlm-infrastructure
All pods should be Running before you continue.
Next steps
Once infrastructure is provisioned:
- Configure
kubectlto connect to the AKS cluster:az aks get-credentials --resource-group <resource-group> --name <cluster-name> - Complete the Prerequisites checklist
- Proceed to Platform installation