How Cost Calculations Work
Thoras calculates potential savings by comparing your current resource allocations with forecasted recommendations. The calculation involves three main components:1. Determining Average Node Cost
Thoras establishes a baseline “average node cost per hour” for your cluster:- Node Discovery - Collects node information similar to the output from
kubectl get nodes -oyaml - Metadata Extraction - Parses labels to identify:
- Cloud provider (AWS, GCP, Azure, etc.)
- Instance type (e.g.,
m7g.medium,n2-standard-4) - Capacity type (on-demand or spot)
- Price Matching - Matches node details against pricing data to determine hourly cost, CPU cores, and memory
- Cluster Averaging - Averages cost, cores, and memory across all nodes to establish cluster-wide baseline
t3.xlarge).
Note: This approach provides ballpark estimates rather than precise billing
figures. The goal is directional guidance on how rightsizing workloads impacts
your overall cloud spend. On EKS, you can have Thoras collect your real billed
spend instead — see AWS Cost Explorer.
2. Calculating Workload-Level Savings
For each workload, Thoras compares original controller specifications (e.g. Deployment, StatefulSet, ArgoRollout) against forecasted resource recommendations: Over-provisioned workloads (positive delta):- Current requests exceed predicted usage
- Labeled as waste in recommendation mode
- Labeled as savings in autonomous mode
- Current requests fall below predicted usage
- Tracked as Resources Needed (recommendation mode) or Resources Added (autonomous mode)
- Thoras recommends increasing resources to improve stability
3. Cluster-Wide Cost Impact
Thoras aggregates workload-level changes across your entire cluster:- Sum wasted or saved CPU and memory across workloads on instance-based nodes
- Express each as a fraction of the average node:
- Aggregate CPU core reduction ÷ average node cores
- Aggregate memory reduction ÷ average node memory
- Use the larger of the two, since the binding resource determines how many nodes are needed
- Multiply by average node hourly cost to estimate cluster savings
- Add the EKS Fargate savings or waste, which are priced per pod
EKS Fargate Pricing
On EKS, Thoras recognizes Fargate nodes by theeks.amazonaws.com/compute-type: fargate label. Fargate bills each pod for the
vCPU and memory it is provisioned, not for the node size Kubernetes reports, so
Thoras prices Fargate pods separately from the average node:
- Current cost uses the size AWS records on the pod in its
CapacityProvisionedannotation (for example0.25vCPU 0.5GB). - Original and recommended costs size the pod as Fargate would: the larger of the init and long-running container requests, plus 256 MB for Fargate’s Kubernetes components, rounded up to the next supported vCPU and memory combination.
- Rates are the on-demand Linux rates for the pod’s region. EKS Fargate does not offer Spot, Arm or Windows pods, and Thoras does not price the additional ephemeral storage beyond the included 20 GB.
Rounding and Savings
Because Fargate rounds every pod up to a supported size, a smaller request does not always lower the bill. For example, reducing a pod from 1 vCPU and 1.5 GB to 0.6 vCPU and 1.2 GB still provisions 1 vCPU and 2 GB, so Thoras reports no savings for it. Savings appear only when a recommendation moves the pod to a smaller billable size, and recommendations that need a larger size are reported as resources added or needed, never as savings.Missing or Partial Pricing
Thoras never prices a Fargate pod with the average node. When a pod cannot be priced, the dashboard shows the cost as unavailable, or marks a total as partial: the amount shown then covers only the pods that could be priced. When nothing in an amount can be priced, it is shown as unavailable rather than $0; a $0 amount always means the priced inputs add up to zero. This happens when:- A pod has no
CapacityProvisionedannotation yet, or it cannot be parsed. - A pod’s node is not visible to Thoras, so its compute type is unknown.
- Thoras has no Fargate rates for the pod’s region.
- Thoras watches only some namespaces and the pod on a Fargate node is outside them. The node is still shown as Fargate in the node summary, but without a price.
- A workload has no active vertical recommendation, or its original configuration cannot be determined, so its recommended or original cost cannot be sized. Its current cost is still reported.
History
Fargate costs are recorded with each new metrics sample, for the collection interval it represents; a retried collection is counted once. History before the upgrade that adds Fargate pricing, and periods when samples were not collected, contain no Fargate costs, and Thoras does not reconstruct them from older data. Within a period, Fargate costs are averaged over all of the workload’s samples, like average-node costs, so a brief Fargate period affects only its own share of the period. History uses retained five-minute buckets for recent hours, hourly buckets for approximately a month, and daily buckets for older periods. At range boundaries, a bucket is included when its start falls inside the selected range. Older history therefore has coarser time precision; Thoras does not spread a sample’s cost across the empty portion of a bucket.Idle Spend
For Fargate, requested spend uses the pod’s provisioned size. Used spend estimates the supported billable size needed by its measured usage, including Fargate’s memory overhead. Usage within the same billable tier produces no idle-dollar estimate. Missing usage or pricing makes that portion unavailable. CPU and memory usage charts continue to show the physical resource measurements. Node-price overrides and billing calibration apply only to the EC2 portion of a mixed workload. Fargate uses the regional rates recorded with each sample.Sourcing Pricing Data
Because Thoras operates in an air-gapped environment without real-time cloud API access, pricing data comes from a built-in static price list that is periodically updated in product releases. This includes the regional EKS Fargate rates, taken from the AWS Price List. These estimates do not require AWS credentials; collecting your actual billed spend with AWS Cost Explorer is a separate, optional feature.Handling Spot Pricing
Spot instance pricing fluctuates based on supply and demand. Rather than tracking real-time spot prices, Thoras uses published average savings percentages from cloud providers. For example, according to AWS EC2 Spot Instance Advisor, a spotm7g.medium provides an average 59% savings over on-demand pricing (as
of February 5, 2026).
Note: Your actual spot costs may differ from dashboard estimates because
Thoras uses static averages rather than current market rates.
Preemptible Instances
Preemptible instances (GCP’s predecessor to their spot offering) are priced using spot pricing data as a proxy. While not exact, the two pricing models are typically close. Your actual preemptible costs may vary from dashboard estimates.Overriding Average Node Cost
You can manually override the calculated average node cost when:- Your cluster uses an bespoke instance types
- You have custom pricing agreements or reserved instance discounts
- You want more precise cost calculations based on your actual billing
What’s Included (and What’s Not)
Included in cost calculations:- CPU and memory resource costs
- Node-level infrastructure pricing
- Reserved instance or savings plan discounts, including Compute Savings Plans applied to Fargate
- Committed use discounts (GCP)
- Custom pricing agreements
- Fargate ephemeral storage beyond the included 20 GB
Horizontal Scaling Savings and Waste
Vanilla HPA is reactive by design. To protect against sudden traffic spikes, teams typically run workloads at 20-30% utilization. Thoras’s predictive horizontal scaling allows workloads to run at much higher instantaneous utilization (80-90%) by scaling proactively based on forecasts. However, Thoras uses vanilla HPA as a safety backstop, always scaling to the higher value between the Thoras forecast and vanilla HPA’s recommendation. Realizing savings from this improved utilization requires increasing HPA’s target utilization metric, which is a manual configuration change. Because savings depend on customer action to adjust HPA settings, cost estimates exclude horizontal scaling savings.Mixed Instance Types
Thoras handles heterogeneous clusters gracefully:- Mixed capacity types - Averages across spot and on-demand instances
- Multiple instance types - Blends pricing across different machine types
- Multi-cloud - Averages across cloud providers if nodes span multiple clouds

