Reduce Azure container costs across AKS, ACI, Container Apps, and serverless by right-sizing nodes, adopting Spot infrastructure, selecting the right platform per workload, and applying commitment discounts.
Container services sprawl is a top cost driver in Azure environments. Organizations adopt AKS for orchestration, ACI for burst workloads, Container Apps for event-driven microservices, and Azure Functions for serverless compute -- often running all four simultaneously across multiple subscriptions. Each platform has a different pricing model, and without deliberate governance the result is over-provisioned node pools, idle clusters running around the clock, platform mismatches where a cheaper service would suffice, and missing commitment discounts on the underlying compute.
Based on what we typically see, the most effective optimizations fall into six categories: right-sizing pods and nodes to eliminate wasted capacity, adopting Spot and interruptible infrastructure for fault-tolerant workloads, selecting the correct platform per workload instead of defaulting to AKS for everything, applying Reserved Instances and Savings Plans to the underlying VMs, scheduling non-production clusters to stop outside business hours, and establishing cost visibility through namespace-level chargeback and budget alerts. Spotto's cloud optimization platform continuously identifies these overprovisioned container configurations and platform mismatches, surfacing targeted recommendations that can reduce container costs by 40-70% without impacting workload performance.
Key Takeaways at a Glance:
Azure container costs are distributed across compute, networking, storage, and platform fees. Unlike a single VM where cost attribution is straightforward, container costs fragment across node pools, load balancers, persistent volumes, container registries, and egress charges. This fragmentation makes it difficult to identify waste without dedicated tooling.
Common container cost problems:
| Platform | Pricing Model | Best For | Control Plane Cost | Typical Monthly (Small Workload) |
|---|---|---|---|---|
| AKS | VM node pools (pay for VMs) | Complex multi-service workloads, stateful apps, custom networking | Free (Standard tier: $0.10/hr) | $200-$2,000+ |
| ACI | Per-second vCPU + memory | Short-lived tasks, burst compute, sidecar containers | None | $5-$500 |
| Container Apps | Per-second vCPU + memory (consumption) or dedicated plan | HTTP APIs, event-driven microservices, background processors | None (consumption) | $0-$300 |
| Azure Functions | Per-execution + GB-seconds (consumption) or premium plan | Event triggers, lightweight APIs, scheduled tasks | None (consumption) | $0-$200 |
| ARO (Azure Red Hat OpenShift) | VM node pools + ARO service fee | Enterprises requiring OpenShift compatibility, Red Hat support | ~$0.35/hr per worker node | $1,500-$10,000+ |
Key insight: The cheapest container platform depends entirely on your workload pattern. A workload that handles 10 requests per minute does not need AKS. A workload that handles 10,000 requests per second with custom networking likely does. Matching platform to workload is the single highest-leverage optimization.
AKS Cost Optimization Priority Flowchart
==========================================
[Start] Is this workload running on AKS?
|
+-- Does it NEED AKS? (custom networking, stateful, multi-service)
| |
| +-- NO --> Evaluate Container Apps or Functions (potential 60-80% savings)
| |
| +-- YES --> Continue to AKS optimizations
| |
| +-- [1] Are node pools right-sized?
| | |
| | +-- Avg CPU < 40% --> Right-size VMs or enable cluster autoscaler
| | +-- Avg CPU 40-70% --> OK, move to next check
| | +-- Avg CPU > 70% --> Consider scaling up (performance risk)
| |
| +-- [2] Are Spot node pools used for fault-tolerant workloads?
| | |
| | +-- NO --> Add Spot node pool for batch, dev/test, stateless (60-90% savings)
| | +-- YES --> Move to next check
| |
| +-- [3] Are commitment discounts applied to baseline nodes?
| | |
| | +-- NO --> Apply 1-year RI or Savings Plan (30-40% savings)
| | +-- YES --> Move to next check
| |
| +-- [4] Is Arm64 viable for any workloads?
| | |
| | +-- YES --> Migrate to Dpsv6/Epsv6 Arm64 nodes (20-30% cheaper)
| | +-- NO --> Move to next check
| |
| +-- [5] Are dev/test clusters running 24/7?
| | |
| | +-- YES --> Schedule cluster stop/start (65-75% savings)
| | +-- NO --> Move to next check
| |
| +-- [6] Are PV storage tiers aligned to workload needs?
| | |
| | +-- Premium on non-critical --> Downgrade to Standard (40-60% savings)
| | +-- Aligned --> Move to next check
| |
| +-- [7] Is namespace-level cost visibility in place?
| |
| +-- NO --> Enable AKS Cost Analysis add-on + budgets
| +-- YES --> Optimization complete, monitor for driftRight-sizing is the foundation of container cost optimization. In Kubernetes, waste occurs at two levels: the gap between pod resource requests and actual usage, and the gap between node capacity and the sum of pod requests. Both gaps compound -- oversized pod requests lead to underutilized nodes, which lead to more nodes than necessary.
Pod-level right-sizing:
resources.requests and resources.limits against actual P95 usage from Prometheus/Container InsightsNode-level right-sizing:
ACI right-sizing:
Container Apps scale-to-zero:
Container Apps on the consumption plan can scale to zero replicas when there is no traffic. This is the primary cost advantage over AKS for low-traffic workloads.
| Scenario | AKS Cost (3-node minimum) | Container Apps Cost (scale-to-zero) | Savings |
|---|---|---|---|
| API with 100 req/day | ~$350/mo (3x D2s_v5) | ~$5/mo | 99% |
| API with 10K req/day | ~$350/mo (3x D2s_v5) | ~$30/mo | 91% |
| API with 1M req/day | ~$350/mo (3x D2s_v5) | ~$180/mo | 49% |
| API with 10M req/day | ~$700/mo (3x D4s_v5) | ~$900/mo | AKS cheaper |
Crossover point: Container Apps becomes more expensive than AKS at approximately 5-10M requests per day for a typical API workload. Below that threshold, scale-to-zero economics strongly favour Container Apps. Above it, AKS with right-sized nodes and commitment discounts is more cost-effective.
Azure Spot VMs offer 60-90% discounts compared to on-demand pricing. AKS supports Spot node pools natively, and ACI supports Spot container groups for batch workloads. The trade-off is that Spot resources can be evicted with 30 seconds notice when Azure needs the capacity.
AKS Spot node pool pricing (East US, representative):
| VM SKU | On-Demand ($/hr) | Spot Price ($/hr) | Discount | Monthly Savings (per node) |
|---|---|---|---|---|
| D4s_v5 (4 vCPU, 16 GB) | $0.192 | $0.038 | 80% | ~$112 |
| D8s_v5 (8 vCPU, 32 GB) | $0.384 | $0.077 | 80% | ~$224 |
| D16s_v5 (16 vCPU, 64 GB) | $0.768 | $0.154 | 80% | ~$447 |
| E8s_v5 (8 vCPU, 64 GB) | $0.504 | $0.101 | 80% | ~$294 |
Workloads suitable for Spot node pools:
ACI Spot containers:
ACI also supports Spot pricing for container groups. Spot ACI is priced at up to 70% less than regular ACI. Suitable for batch jobs, data processing, and any workload that can tolerate interruption. Unlike AKS Spot nodes, ACI Spot containers do not automatically restart -- your orchestration logic must handle re-submission.
# Create an AKS Spot node pool
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name spotnodepool \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--node-vm-size Standard_D4s_v5 \
--node-count 3 \
--min-count 0 \
--max-count 10 \
--enable-cluster-autoscaler \
--labels kubernetes.azure.com/scalesetpriority=spot \
--node-taints kubernetes.azure.com/scalesetpriority=spot:NoSchedule
# Deploy workload with Spot toleration
# In your Kubernetes deployment YAML:
# spec:
# tolerations:
# - key: "kubernetes.azure.com/scalesetpriority"
# operator: "Equal"
# value: "spot"
# effect: "NoSchedule"
# affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: "kubernetes.azure.com/scalesetpriority"
# operator: "In"
# values:
# - "spot"Failure mode warning: Never run stateful workloads (databases, message brokers) on Spot nodes unless they have built-in replication and can survive node eviction. Spot eviction gives only 30 seconds notice. Use eviction-policy: Delete to ensure evicted nodes are replaced cleanly by the autoscaler.
Platform selection is the highest-leverage optimization because it determines the baseline cost structure. Migrating a workload from the wrong platform to the right one can deliver 50-90% savings without any code changes.
ARO to AKS migration:
Azure Red Hat OpenShift (ARO) carries a per-worker-node service fee on top of VM costs. For organizations that do not require OpenShift-specific features (Operator Hub, Red Hat support, OpenShift Routes), migrating to AKS eliminates the ARO service fee entirely. The underlying Kubernetes workloads are largely compatible.
| Component | ARO (4 workers, D8s_v5) | AKS Free Tier (4 nodes, D8s_v5) | AKS + Spot (2 on-demand + 2 Spot) |
|---|---|---|---|
| Compute (VMs) | $1,119/mo | $1,119/mo | $671/mo |
| Control plane (3 masters) | $840/mo (included in ARO) | $0 (Free tier) | $0 (Free tier) |
| ARO service fee | $1,022/mo ($0.35/hr x 4 workers) | $0 | $0 |
| Infrastructure VMs (masters) | $840/mo (3x D8s_v5) | $0 (managed) | $0 (managed) |
| Load balancer | $18/mo | $18/mo | $18/mo |
| Total | $3,839/mo | $1,137/mo | $689/mo |
Functions to AKS consolidation:
While Functions is cheaper than AKS for low-volume workloads, organizations that run dozens of Function Apps on Premium plans may be paying more than consolidating those workloads onto a right-sized AKS cluster. The crossover point is typically 10-15 Premium Function App instances -- at that scale, a single AKS cluster with appropriate node sizing is cheaper and provides better resource utilization.
Arm64 node pools:
Azure offers Arm64-based VMs (Dpsv6, Epsv6 series) that provide approximately 20-30% better price-performance than equivalent x86 VMs. For workloads that run on Linux containers with Arm64-compatible images, migrating to Arm64 node pools reduces cost per vCPU-hour.
| Comparison | x86 (D4s_v5) | Arm64 (Dpsv6 equivalent) | Savings |
|---|---|---|---|
| vCPU / Memory | 4 vCPU / 16 GB | 4 vCPU / 16 GB | -- |
| On-demand price | ~$0.192/hr | ~$0.154/hr | ~20% |
| Monthly (730 hrs) | ~$140 | ~$112 | ~$28/node |
Prerequisite: Your container images must be built for linux/arm64. Most Go, Java, Node.js, and Python workloads compile cleanly for Arm64. Check your base images and any native dependencies before migrating. Use multi-arch Docker builds to maintain compatibility across both architectures.
AKS node pools are backed by standard Azure VMs, which means they qualify for Reserved Instances (RIs) and Azure Savings Plans. For predictable baseline workloads, commitment discounts are one of the simplest and most impactful optimizations -- no code changes, no architecture changes, just a purchasing decision.
RI and Savings Plan comparison for AKS node VMs:
| Commitment Type | 1-Year Discount | 3-Year Discount | Flexibility | Best For |
|---|---|---|---|---|
| Reserved Instance | ~30-40% | ~55-65% | Locked to VM family + region (instance size flexibility within family) | Stable AKS clusters with predictable node sizes |
| Compute Savings Plan | ~25-35% | ~45-55% | Applies across VM families, regions, and services (AKS, VMs, Functions Premium) | Organizations evolving their AKS node sizes or adding new clusters |
Azure Hybrid Benefit (AHB) for Windows containers:
Organizations running Windows containers on AKS Windows node pools can apply Azure Hybrid Benefit to eliminate the Windows Server license cost component of the VM price. This typically saves 40-45% on Windows node VMs. AHB requires existing Windows Server licenses with active Software Assurance or Windows Server subscription.
ACI and Container Apps commitment plans:
# Check current AKS node pool VM SKUs to plan commitment purchases
az aks nodepool list \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--query "[].{Name:name, VmSize:vmSize, Count:count, Mode:mode, Priority:scaleSetPriority}" \
-o table
# Output example:
# Name VmSize Count Mode Priority
# system Standard_D4s_v5 3 System Regular
# workerpool Standard_D8s_v5 5 User Regular
# spotpool Standard_D8s_v5 4 User Spot
#
# Commitment recommendation:
# - Cover the 3 system nodes (D4s_v5) with RIs (stable, predictable)
# - Cover 3-4 of the 5 workerpool nodes with Savings Plan (allows flexibility)
# - Do NOT cover Spot nodes (they are already 60-80% discounted)
# Apply Azure Hybrid Benefit to Windows node pool
az aks nodepool update \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name winnodepool \
--enable-ahubImportant: Do not purchase commitment discounts for Spot node pool VMs. Spot VMs already receive a 60-90% discount. Reservations and Savings Plans should only cover on-demand (Regular priority) node pool VMs. Over-purchasing commitments leads to idle reserved capacity that wastes money.
AKS supports stopping and starting clusters, which deallocates all node pool VMs while preserving the cluster configuration and persistent volumes. For dev/test and staging clusters that are only needed during business hours, this eliminates compute costs during nights and weekends.
AKS Cluster Start/Stop Savings Model
======================================
Scenario: Dev/test AKS cluster, 3x D4s_v5 nodes
On-demand cost: 3 x $0.192/hr = $0.576/hr
Running 24/7: $0.576 x 730 hrs = $420/mo
Running 10hrs x 5 days: $0.576 x 217 hrs = $125/mo
Savings: $295/mo (70%)
For 5 dev/test clusters: $1,475/mo savings = $17,700/year
# Stop a cluster (deallocates all node VMs)
az aks stop --resource-group myResourceGroup --name myDevCluster
# Start a cluster (reallocates node VMs)
az aks start --resource-group myResourceGroup --name myDevCluster
# Automate with Azure Automation or Logic Apps:
# Schedule stop at 7 PM, start at 7 AM, skip weekendsFailure mode warning: Do not stop production clusters. Cluster stop deallocates all VMs and terminates all running workloads. This feature is designed exclusively for non-production environments. For production cost optimization, use the cluster autoscaler to scale down during off-peak hours instead.
Storage and egress costs are often overlooked in container environments but can represent 10-25% of the total container bill, particularly for stateful workloads and multi-region deployments.
Persistent Volume tier alignment:
Kubernetes StorageClasses in AKS default to Premium SSD (managed-premium) or Premium SSD v2. Many workloads (logging, archival, low-IOPS databases) do not need Premium performance and can run on Standard SSD or even Standard HDD.
| Disk Tier | 256 GB Monthly Cost | Max IOPS | Best For |
|---|---|---|---|
| Premium SSD (P15) | ~$38/mo | 1,100 | Production databases, latency-sensitive workloads |
| Standard SSD (E15) | ~$19/mo | 500 | General workloads, web servers, dev/test databases |
| Standard HDD (S15) | ~$8/mo | 500 | Logging, backups, archival, low-priority batch |
Cross-region egress optimization:
Without namespace-level cost visibility, container cost optimization is a one-time effort that drifts. Establishing continuous visibility ensures that savings are maintained and new waste is caught early.
AKS Cost Analysis add-on:
Budget alerts:
Managed Prometheus and Grafana:
Namespace governance:
# Enable AKS Cost Analysis add-on
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--enable-cost-analysis
# Create a resource quota for a namespace
kubectl apply -f - <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-alpha-quota
namespace: team-alpha
spec:
hard:
requests.cpu: "8"
requests.memory: 32Gi
limits.cpu: "16"
limits.memory: 64Gi
pods: "50"
EOF
# Set up budget alert via Azure CLI
az consumption budget create \
--budget-name aks-monthly-budget \
--amount 5000 \
--category cost \
--resource-group myResourceGroup \
--time-grain monthly \
--start-date 2026-02-01 \
--end-date 2027-01-31| Recommendation | Typical Savings | Complexity |
|---|---|---|
| Right-size pod resource requests | 15-30% | Medium |
| Right-size AKS node pool VM SKUs | 10-25% | Medium |
| Enable cluster autoscaler | 10-20% | Low |
| Add Spot node pools for fault-tolerant workloads | 60-90% per node | Medium |
| ACI Spot for batch workloads | 50-70% | Low |
| Migrate low-traffic APIs from AKS to Container Apps | 60-95% | High |
| Migrate ARO to AKS | 70-90% | High |
| Consolidate Functions Premium to AKS | 20-40% | High |
| Migrate to Arm64 node pools | 20-30% | Medium |
| Apply Reserved Instances to baseline AKS nodes | 30-40% (1yr) / 55-65% (3yr) | Low |
| Apply Compute Savings Plans | 25-35% (1yr) / 45-55% (3yr) | Low |
| Azure Hybrid Benefit for Windows nodes | 40-45% | Low |
| Schedule dev/test cluster stop/start | 65-75% | Low |
| Downgrade PV from Premium to Standard SSD | 40-60% per disk | Low |
| Downgrade PV from Standard SSD to Standard HDD | 50-60% per disk | Low |
| Reduce cross-region egress | Variable (depends on traffic) | Medium |
| Enable AKS Cost Analysis add-on | Indirect (enables other savings) | Low |
| Enforce namespace resource quotas | Indirect (prevents drift) | Low |
| Terminate orphaned ACI container groups | 100% of orphaned spend | Low |
Use AKS when you need full Kubernetes control -- custom networking (CNI), service meshes, stateful workloads, multi-container pod patterns, or more than 10 tightly coupled microservices. Use Container Apps for HTTP APIs, event-driven processors, and background workers that benefit from scale-to-zero and do not require custom Kubernetes primitives. Use ACI for short-lived batch jobs, sidecar containers for existing services, and burst compute that runs for minutes to hours.
Check node-level CPU and memory utilization over a 14-day period using Container Insights or Prometheus. If average node CPU utilization is below 40% and average memory utilization is below 50%, your nodes are likely over-provisioned. Also compare pod resource requests against actual P95 usage -- a large gap indicates that pod requests are inflated, which cascades into over-provisioned nodes.
Yes, for stateless workloads with multiple replicas behind a load balancer. The key requirements are: at least 3 replicas spread across Spot and on-demand node pools, graceful shutdown handling (preStop hooks), and pod disruption budgets to ensure minimum availability during evictions. Do not run databases, message brokers, or single-replica stateful services on Spot nodes.
The ARO service fee alone is ~$0.35/hr per worker node, which adds ~$255/mo per node on top of VM costs. Additionally, ARO requires dedicated master node VMs that you pay for, while AKS provides the control plane as a managed service (free on the Free tier). For a 4-worker-node cluster, migrating from ARO to AKS typically saves $2,700-$3,200/mo -- a 70-85% reduction.
Use Reserved Instances if your AKS node pools use consistent VM SKUs and you do not plan to change them. RIs provide the deepest discounts (up to 65% for 3-year). Use Savings Plans if you expect to evolve your node pool configurations -- changing VM families, adding new clusters, or shifting workloads between services. Savings Plans provide slightly lower discounts but much greater flexibility.
The AKS cluster autoscaler automatically adjusts the number of nodes in a node pool based on pending pod requests. When pods cannot be scheduled due to insufficient resources, the autoscaler adds nodes. When nodes are underutilized and their pods can be rescheduled elsewhere, the autoscaler removes nodes. This eliminates the need to over-provision for peak load -- you only pay for the nodes you need at any given time.
Yes, for Windows node pools. AHB eliminates the Windows Server license cost from the VM price, saving approximately 40-45%. This requires existing Windows Server licenses with active Software Assurance. For Linux node pools, AHB does not apply, but you can use Azure Hybrid Benefit for Linux (RHEL/SUSE) if you have qualifying subscriptions.
ACI charges per-second for allocated vCPU and memory, regardless of actual utilization. Review the actual resource consumption of your ACI containers using Azure Monitor metrics. Reduce the allocated vCPU and memory to match peak actual usage plus a 15% buffer. Common over-provisioning: allocating 4 vCPU and 16 GB memory for a container that uses 0.5 vCPU and 2 GB at peak.
The AKS Free tier provides a managed Kubernetes control plane at no cost with a financially backed SLA of 99.5%. The Standard tier ($0.10/hr, ~$73/mo) provides a 99.95% uptime SLA and additional features like the Uptime SLA, Cluster Autoscaler profile customization, and planned maintenance windows. For production clusters, the Standard tier is recommended. For dev/test clusters, the Free tier is sufficient and saves $73/mo per cluster.
Spotto continuously monitors your Azure container fleet -- AKS clusters, ACI container groups, Container Apps environments, and Functions apps -- to identify over-provisioned nodes, platform mismatches, missing commitment discounts, idle dev/test clusters, and orphaned resources. Rather than running one-off audits, Spotto provides ongoing visibility and prioritized recommendations, making it straightforward to maintain optimized container costs as your environment evolves.
Before
$52,000/mo
12 AKS clusters (one per tenant), all D8s_v5 nodes, 3-node minimum, no autoscaler, no Spot, on-demand pricing, running 24/7 including dev/test
After
$19,500/mo
Right-sized to D4s_v5 where appropriate, Spot pools for dev workloads, autoscaler enabled, 4 dev clusters scheduled stop/start, 1-year RIs on production baseline
Actions taken: Analyzed per-tenant utilization and found 8 of 12 clusters running below 35% CPU. Down-sized 8 clusters from D8s_v5 to D4s_v5. Added Spot node pools for non-critical workloads. Enabled cluster autoscaler on all clusters (min 2, max 8). Scheduled 4 dev/test clusters to stop outside business hours. Purchased 1-year RIs for the 8 production system node pools.
Before
$5,645/mo
Single ARO cluster with 4 D8s_v5 worker nodes, 3 master nodes, ARO service fee, all on-demand
After
$561/mo
AKS Free tier, 2 on-demand D4s_v5 + 2 Spot D4s_v5, 1-year Savings Plan on baseline nodes
Actions taken: Confirmed no OpenShift-specific dependencies (no Operators, no OpenShift Routes). Migrated Kubernetes manifests to AKS (minimal changes required). Eliminated ARO service fee and master node costs. Right-sized from D8s_v5 to D4s_v5 based on actual utilization. Added Spot pool for stateless workloads. Applied 1-year Savings Plan to the 2 baseline on-demand nodes.
Before
$28,000/mo
All 22 microservices on a single large AKS cluster (12x D8s_v5), 8 Premium SSD PVs, cross-region service mesh, 15 Azure Functions on Premium plan
After
$12,600/mo
Core services on right-sized AKS (6x D4s_v5 + 4 Spot), 5 low-traffic APIs moved to Container Apps, PV tiers aligned, Functions consolidated, same-region routing
Actions taken: Profiled all 22 microservices and identified 5 low-traffic APIs (<5K req/day) suitable for Container Apps. Migrated those 5 services to Container Apps with scale-to-zero. Right-sized the AKS cluster from 12x D8s_v5 to 6x D4s_v5 + 4 Spot D4s_v5. Downgraded 5 PVs from Premium to Standard SSD. Consolidated 15 Functions Premium apps into 4 + moved 6 to the AKS cluster. Fixed cross-region service mesh to route within the same region.
Before
$7,800/mo
6 dev/test AKS clusters running 24/7, each 3x D4s_v5, Standard tier, no Spot, orphaned ACI groups from manual testing
After
$1,900/mo
Consolidated to 3 clusters, all Free tier, Spot nodes only, business-hours scheduling, automated ACI cleanup
Actions taken: Consolidated 6 dev/test clusters to 3 using namespace isolation. Downgraded all 3 from Standard to Free tier. Switched all node pools to Spot VMs (acceptable for dev/test). Implemented business-hours scheduling (stop 7 PM, start 7 AM, skip weekends). Deployed automated ACI cleanup that terminates container groups older than 4 hours. Cleaned up 23 orphaned ACI groups.
Before
$12,000/mo
8x D16s_v5 nodes, over-requested pod resources (4 CPU requested, 0.8 actual), Premium SSD for all PVs, no commitment discounts, x86 only
After
$5,800/mo
Right-sized pods, 4x D8s_v5 on-demand + 2 Spot, Arm64 node pool for stateless workers, 1-year RI on baseline, Standard SSD for non-critical PVs
Actions taken: Right-sized pod resource requests from 4 CPU to 1 CPU based on P95 utilization data. This reduced the required node count from 8 to 4 on-demand. Added 2 Spot nodes for overflow capacity. Migrated stateless worker pods to Arm64 (Dpsv6) node pool for 20% cost reduction. Applied 1-year RI to the 4 baseline nodes. Downgraded 3 non-critical PVs from Premium SSD to Standard SSD. Saved $175/mo on storage alone.
Every optimization should have a clear rollback path:
kubectl cordon and kubectl drain to move workloads safely. The original node pool can be recreated in 5-10 minutes.The challenges outlined in this article — oversized node pools, wrong platform selections, missing commitment discounts, idle dev/test clusters — are the same ones our customers work through across their Azure environments. The difference is they use Spotto to surface these opportunities automatically, rather than running the analysis by hand.
Spotto continuously analyzes your Azure container fleet — AKS clusters, ACI groups, Container Apps, and Functions — to detect over-provisioned nodes, platform mismatches, missing discounts, and idle resources, giving you clear recommendations to cut container costs across every subscription.
Free TrialDisclaimer: This article is provided for informational purposes only and does not constitute professional advice. Azure pricing, features, and service behaviour may have changed since publication. Always validate recommendations against your specific environment and consult Microsoft's official documentation before making changes to production infrastructure. Spotto is not liable for any actions taken based on the content of this article.