Resolved

Azure subscription restrictions prevent cost-optimized AKS deployment

Azure
AKS
Kubernetes
Cost Optimization
VM SKUs
DevOps
Cloud

Azure Kubernetes Service (AKS) deployment failed due to enterprise-level restrictions on B-series VMs, forcing a budget overrun from $85/month to $220/month. Solutions included quota adjustments, serverless alternatives, or local execution.

Issue

The deployment of an Azure Kubernetes Service (AKS) cluster using cost-optimized B-series VMs (Standard_B2s) failed due to subscription restrictions. The error indicated that these VMs were not available in the subscription, despite being the only option within the $85/month budget. This forced a shift to more expensive alternatives (e.g., Standard_G1 at ~$150/month), exceeding the budget by 3× and rendering the original architecture unviable.

Culprit

The subscription had enterprise-level restrictions blocking all B-series VMs (burstable, cost-optimized instances) across regions. This restriction was not accounted for in pre-flight validation, leading to deployment failures. The architecture assumed the availability of B-series VMs based on public documentation, but actual subscription quotas were never verified.

Solution

  1. Submit a quota increase request for B-series VMs in the target region via the Azure Portal.
  2. Wait for approval (typically 1-3 business days) before resuming deployment.
  3. Resume deployment once quotas are updated, maintaining the original architecture.

Option 2: Fallback to Serverless Alternatives

Replace AKS with Azure Container Instances (ACI) for serverless execution:

  • Reduced CPU/memory usage (e.g., 1 vCPU, 1GB RAM).
  • Pay-per-second billing to stay within budget.
  • Tradeoff: Loses Kubernetes orchestration but meets cost constraints.

Option 3: Local Development with Cloud Services

Run the MCP server locally while accessing cloud services (e.g., Azure OpenAI) via environment variables:

  • Cost: Limited to Azure OpenAI usage (~$30-40/month).
  • Tradeoff: Manual local management and no cloud compute.

Preventive Measures

  1. Pre-flight validation: Added a script to check VM SKU availability before deployment.
  2. Terraform validation: Implemented a null_resource to enforce runtime validation of VM SKUs.

Current Status

87% of resources were deployed ($65/month) while awaiting quota approval:

  • Foundation Layer: Virtual networks, Key Vault, and monitoring (22/22 resources).
  • Application Layer: ACR, Azure OpenAI, and managed identities (11/16 resources).
  • Blocked: AKS cluster (5/38 resources).

The solution ensures budget adherence while maintaining flexibility for future quota adjustments.