Committing to AWS compute capacity through Savings Plans or Reserved Instances can save 40-70% versus On-Demand pricing, but choosing the wrong commitment type or size can lock you into wasted spend. Dynamic EKS workloads that scale with traffic and use Spot instances require a fundamentally different commitment strategy than traditional VM-based infrastructure.
Key Takeaways
- Compute Savings Plans offer more flexibility than Reserved Instances for dynamic EKS fleets
- Savings Plans apply to Fargate and Lambda; Reserved Instances do not
- Spot instances don’t count toward Savings Plan or RI commitments—commit only for baseline On-Demand capacity
- Start with conservative commitments at 50-60% of baseline and increase gradually based on usage data
- Combine Savings Plans for steady-state workloads with Spot for burst capacity to maximize savings
Understanding Reserved Instances vs Savings Plans
Reserved Instances (RIs)
Reserved Instances are capacity reservations for specific instance types in specific regions. You commit to paying for a particular instance (e.g., m5.large in us-east-1) for 1 or 3 years, and AWS gives you a discount (typically 30-60% for 1-year, up to 70% for 3-year commitments).
How they work:
- Purchase an RI for m5.large, us-east-1, Linux
- AWS billing automatically applies the RI discount to matching instances
- If you run 10× m5.large but only bought 5 RIs, 5 instances get the discount and 5 pay On-Demand
- RIs are region-specific but can float across AZs (regional RIs)
Key constraints:
- Instance type specific (m5.large RI doesn’t apply to m5.xlarge)
- Cannot change instance family (m5 to c5 requires selling in RI marketplace)
- Does not apply to Fargate or Lambda
- Risk of waste if workload patterns change
Compute Savings Plans
Savings Plans are commitments to spend a certain dollar amount per hour (e.g., $10/hour) on compute, regardless of instance type, region, or even service. AWS applies discounts automatically to any eligible usage up to your commitment level.
How they work:
- Commit to $10/hour of compute spend for 1 or 3 years
- AWS applies the commitment to EC2, Fargate, and Lambda usage automatically
- Covers any instance type, any region, any OS
- Discount rates similar to RIs (30-66% for 1-year, up to 72% for 3-year)
Key advantages for EKS:
- Flexibility across instance families (covers m5, c5, r6i, Graviton, etc.)
- Applies to Fargate pods and Lambda functions
- Automatically adapts as you change instance types (e.g., migrate to Graviton)
- Simpler management (no need to track specific instance types)
EC2 Instance Savings Plans
A middle ground: commit to a dollar amount per hour for a specific instance family (e.g., m5) in a specific region. More flexible than RIs (covers m5.large, m5.xlarge, etc.) but less flexible than Compute Savings Plans.
When to use: If you know you’ll stay within one instance family (e.g., general-purpose m-family) but want size flexibility, EC2 Instance Savings Plans offer slightly higher discounts than Compute Savings Plans.
Feature Comparison Matrix
| Feature | Reserved Instances | EC2 Instance Savings Plans | Compute Savings Plans |
|---|---|---|---|
| Discount range (1-year) | 30-60% | 33-66% | 30-66% |
| Instance type flexibility | No (locked to type) | Yes (within family) | Yes (any type) |
| Instance family flexibility | No | No | Yes |
| Region flexibility | No (regional RIs only) | No | Yes |
| Applies to Fargate | No | No | Yes |
| Applies to Lambda | No | No | Yes |
| Covers Spot instances | No | No | No |
| Change/sell commitment | Yes (RI marketplace) | No | No |
| Best for | Stable, predictable workloads | Single instance family, flexible sizes | Dynamic, multi-family, or Fargate |
Why Compute Savings Plans Win for EKS
EKS workloads are inherently dynamic:
- Autoscaling changes instance counts hourly (HPA scales pods, Cluster Autoscaler/Karpenter scales nodes)
- Karpenter provisions diverse instance types (m5.large one hour, r6i.xlarge the next)
- Teams migrate to new instance families (x86 to Graviton, older to newer generations)
- Some workloads run on Fargate while others use EC2
Reserved Instances lock you into specific instance types that may not match what Karpenter provisions or what your workloads need next month. Compute Savings Plans adapt automatically—they apply to whatever instances your cluster actually uses.
Example scenario:
- Month 1: You run 50× m5.large instances
- Month 2: Karpenter diversifies to m5a.large and m6i.large for better Spot availability
- Month 3: You migrate some workloads to Fargate
With RIs, the m5.large reservation becomes underutilized in month 2-3. With Compute Savings Plans, the $X/hour commitment automatically applies to m5a, m6i, and Fargate without intervention.
Calculating Your Baseline Commitment
The core principle: only commit for your steady-state baseline. Use Spot and On-Demand for everything above baseline.
Step 1: Identify Baseline Usage
Baseline is the minimum compute you run 24/7, even during low-traffic periods.
Pull 30-90 days of historical usage from Cost Explorer:
aws ce get-cost-and-usage \ --time-period Start=2024-11-01,End=2025-02-01 \ --granularity HOURLY \ --metrics UsageQuantity \ --group-by Type=DIMENSION,Key=INSTANCE_TYPE \ --filter '{ "Dimensions": { "Key": "SERVICE", "Values": ["Amazon Elastic Compute Cloud"] } }' Plot hourly instance-hours. The baseline is the minimum sustained usage (typically the lowest 10th percentile).
Example data:
- Peak: 200 instance-hours/hour (during business hours)
- Off-peak: 80 instance-hours/hour (nights/weekends)
- Absolute minimum: 70 instance-hours/hour
Baseline recommendation: Start with 60-70 instance-hours/hour (80-90% of minimum). This leaves headroom for unexpected dips and ensures you don’t over-commit.
Step 2: Convert to Dollar Commitment
Calculate the On-Demand cost of your baseline usage.
Example: Baseline of 70 instance-hours/hour, average instance type m5.large ($0.096/hour):
Hourly baseline cost = 70 instances × $0.096 = $6.72/hour Use AWS Savings Plans recommendations tool to see exact discount rates for your usage patterns.
Conservative approach: Start with a commitment covering 50-60% of baseline. For the example above:
Initial commitment = $6.72 × 0.6 = $4.03/hour (~$2,950/month) After 60-90 days, analyze utilization and purchase additional Savings Plans if you’re consistently exceeding commitment.
Step 3: Account for Spot Usage
Spot instances do NOT count toward Savings Plans or RIs. If 50% of your capacity is Spot, your commitment should only cover the On-Demand/RI-eligible portion.
Example adjustment:
- Total baseline: 70 instance-hours/hour
- Spot percentage: 50%
- On-Demand baseline: 35 instance-hours/hour
- Commitment: 35 × $0.096 × 0.6 = $2.02/hour (~$1,475/month)
This prevents paying for commitments on capacity you’ll run as Spot anyway.
Combining Savings Plans with Spot
The optimal EKS cost strategy layers three pricing models:
- Compute Savings Plans for baseline On-Demand capacity (30-40% of total)
- Spot instances for burst and interruptible workloads (50-60% of total)
- On-Demand for anything above Savings Plan commitment and Spot fallback (10-20%)
Example cluster cost breakdown:
| Capacity Type | Percentage | Cost (normalized) | Effective Rate |
|---|---|---|---|
| Savings Plan covered | 35% | $3,360 | $0.040/hour (60% discount) |
| Spot instances | 55% | $2,640 | $0.020/hour (80% discount) |
| On-Demand (above commitment) | 10% | $960 | $0.096/hour (no discount) |
| Total | 100% | $6,960 | $0.039/hour avg |
Compared to 100% On-Demand at $0.096/hour = $18,470/month, this hybrid approach saves 62%.
Coverage Strategy: How Much to Commit
Conservative (Recommended for New Clusters)
- Coverage target: 50-60% of baseline On-Demand usage
- Rationale: Leaves room for workload changes, prevents over-commitment
- Review cadence: Quarterly, increase commitment as usage stabilizes
Moderate (Stable Workloads)
- Coverage target: 70-80% of baseline On-Demand usage
- Rationale: Captures most baseline savings while retaining flexibility
- Review cadence: Quarterly adjustments
Aggressive (Mature, Predictable Fleets)
- Coverage target: 90-100% of baseline On-Demand usage
- Rationale: Maximum discount for highly predictable workloads
- Risk: Over-commitment if baseline drops (e.g., product pivot, migrations)
Warning: Avoid purchasing 3-year commitments until you have 12+ months of stable usage data. Start with 1-year commitments and renew annually.
Monitoring and Adjusting Commitments
Track Utilization Rate
AWS Cost Explorer shows Savings Plans utilization percentage. Target: >95% utilization.
aws ce get-savings-plans-utilization \ --time-period Start=2025-01-01,End=2025-02-01 \ --granularity MONTHLY - >98% utilization: You may be under-committed; consider increasing
- 85-95% utilization: Healthy range
- <80% utilization: Over-committed; wait for commitment to expire before adding more
Track Coverage Percentage
Coverage shows what percentage of eligible On-Demand usage is covered by Savings Plans.
aws ce get-savings-plans-coverage \ --time-period Start=2025-01-01,End=2025-02-01 \ --granularity MONTHLY - <50% coverage: Opportunity to purchase more Savings Plans
- 50-70% coverage: Typical for dynamic EKS workloads
- >80% coverage: Risk of over-commitment unless workload is very stable
Set Up Alerts
Create CloudWatch alarms for Savings Plans utilization dropping below 85%:
aws cloudwatch put-metric-alarm \ --alarm-name savings-plan-underutilization \ --metric-name SavingsPlansUtilization \ --namespace AWS/SavingsPlans \ --statistic Average \ --period 86400 \ --threshold 85 \ --comparison-operator LessThanThreshold Common Mistakes
Purchasing 3-year commitments too early. You lock in prices before optimizing workloads. Start with 1-year, measure savings, then commit longer-term.
Committing for Spot-eligible capacity. Spot doesn’t count toward Savings Plans. Calculate baseline as On-Demand-only usage.
Buying RIs for Karpenter-managed clusters. Karpenter provisions diverse instance types dynamically—RIs lock you into specific types. Use Compute Savings Plans instead.
Not accounting for growth. If you’re scaling 20% per quarter, your baseline will outgrow commitments quickly. Review and adjust quarterly.
Ignoring Fargate in commitment strategy. If you run Fargate pods, Compute Savings Plans apply but RIs don’t. Missing opportunity for savings.
Decision Framework
Choose Compute Savings Plans if:
- You run EKS with Karpenter (dynamic instance provisioning)
- You use Fargate or plan to in the future
- You’re migrating between instance families (e.g., x86 to Graviton)
- You run workloads across multiple regions
- You value flexibility over maximum discount
Choose EC2 Instance Savings Plans if:
- You know you’ll stay within one instance family (e.g., m5 only)
- You want slightly higher discounts than Compute Savings Plans
- You don’t use Fargate
Choose Reserved Instances if:
- You run very stable workloads with fixed instance types
- You want the ability to sell unused capacity in the RI marketplace
- You’re certain instance types won’t change for 1-3 years
Reality for most EKS users: Compute Savings Plans offer the best balance of discount and flexibility.
Implementation Checklist
- Gather 60-90 days of usage data from Cost Explorer
- Calculate baseline On-Demand usage (exclude Spot)
- Start conservative: Purchase Savings Plans covering 50-60% of baseline
- Monitor utilization weekly for first month, then monthly
- Adjust quarterly: Increase commitment if utilization >95%
- Layer Spot aggressively for burst capacity (50-70% of total fleet)
- Review annually: Consider 3-year commitments only after 12+ months of stable usage
Conclusion
For dynamic EKS workloads, Compute Savings Plans offer the best commitment strategy—they provide flexibility across instance types, families, and services (including Fargate) while delivering discounts comparable to Reserved Instances. Start by identifying your baseline On-Demand usage excluding Spot, commit conservatively at 50-60% of that baseline, and increase gradually based on utilization data. Never commit for Spot-eligible capacity, and avoid 3-year commitments until you have at least 12 months of stable usage patterns. The optimal EKS cost structure layers Compute Savings Plans for baseline, Spot for burst capacity, and On-Demand as overflow—typically achieving 60-70% total savings versus pure On-Demand pricing. Monitor utilization monthly, adjust commitments quarterly, and resist the temptation to over-commit based on peak usage or growth projections.