Cloud Provider Pricing

CostPilot supports eight cloud providers and Kubernetes distributions out of the box. For each provider, it fetches real or static pricing data, maps that pricing to the nodes in your cluster, and uses the resulting per-node hourly cost as the basis for all cost allocation calculations.

This page explains the shared concepts that apply across all providers — auto-detection, pricing types, CPU/memory cost ratios, and custom overrides.

How provider pricing works

Provider auto-detection

When CostPilot receives metrics from a cluster, it inspects the instance type field on each node and matches it against known naming patterns for each cloud provider:

Pattern examplesDetected provider
t3.micro, m5.xlarge, c5.2xlarge, r5.4xlargeAWS
e2-standard-4, n2-highmem-8, c2-standard-30GCP
Standard_D4s_v3, Standard_B2ms, Standard_F8s_v2Azure
s-4vcpu-8gb, g-8vcpu-32gb, c-16DigitalOcean
cx21, cpx31, ccx13Hetzner
DEV1-S, GP1-M, PRO2-LScaleway
k3s, local, or unrecognised patternsSelf-hosted

Auto-detection means you do not need to configure a provider explicitly for most clusters. If your cluster uses a non-standard or renamed instance type, you can override the provider in Nodes → Clusters.

Pricing types

Most cloud providers offer more than one pricing model. CostPilot tracks the pricing type on each node independently, so a mixed cluster — with both on-demand and spot nodes — is handled correctly.

Pricing typeProvidersTypical saving
On-demand / standardAllBaseline
Spot / preemptibleAWS, GCP, Azure60–90% cheaper
Reserved / committed useAWS, GCP20–40% cheaper

Spot and preemptible prices are fetched at ingestion time and stored alongside the metric record. This ensures that historical cost data reflects what was actually paid, even as spot prices fluctuate.

CPU and memory cost split

A node has a single hourly price, but that cost covers both CPU and memory capacity. CostPilot splits the node cost into a CPU fraction and a memory fraction before allocating to pods.

The default split ratio varies by provider and instance family, since different instance types have different CPU-to-memory ratios built into their pricing:

ProviderDefault CPU fractionDefault memory fraction
AWS (general purpose)50%50%
AWS (compute-optimised)60%40%
AWS (memory-optimised)40%60%
GCP (general purpose)50%50%
Azure50%50%
DigitalOcean50%50%
Hetzner50%50%
Scaleway50%50%
Self-hostedConfigurableConfigurable

Once split, CPU cost is allocated to pods proportionally to their CPU requests, and memory cost is allocated proportionally to their memory requests. See Cost Allocation Model for the full calculation.

Note

You can override the CPU/memory split ratio per cluster in Nodes → Clusters → Cost configuration. This is useful for memory-optimised instance families where memory cost is proportionally higher.

Pricing fetch strategies

Different providers use different approaches for delivering pricing data:

ProviderStrategyCache TTL
AWSLive API (runs-on.com)15 minutes
GCPStatic table + region multipliersBuilt-in
AzureLive API (prices.azure.com)6 hours
DigitalOceanLive API (/v2/sizes)24 hours
HetznerStatic table (EUR)Built-in
ScalewayStatic table (EUR)Built-in
Self-hostedFixed rate (configurable)N/A

Static tables are bundled with CostPilot and updated with each release. For providers with live APIs, CostPilot caches the response to avoid rate-limiting and reduce latency on the hot ingestion path.

Provider comparison

ProviderPricing accuracySpot supportSource currencyNotes
AWSReal-timeYesUSDBroadest instance type coverage
GCPNear real-timeYes (preemptible)USDRegion multipliers from us-central1
AzureReal-timeYesUSD6-hour cache
DigitalOceanReal-timeNoUSDRequires optional API token
HetznerStaticNoEURLocation-independent pricing
ScalewayStaticNoEURKapsule-specific instance families
Self-hostedFixedNoConfigurableUser-configured flat rate

Custom pricing overrides

For any cluster, you can override the automatically fetched pricing with a custom per-node hourly rate. This is useful when:

  • You have negotiated custom pricing with your cloud provider
  • Your instance type is not in CostPilot’s pricing database
  • You want to model future pricing changes before they take effect
  • You are running on a provider not yet natively supported

To configure a custom rate, go to Nodes → Clusters, select the cluster, and open the Cost configuration panel. Enter your per-node hourly rate. This rate will be applied to all nodes in the cluster regardless of their instance type.

Warning

Custom pricing overrides the entire pricing lookup for that cluster. If your cluster has nodes of different instance types with different costs, a single flat rate will not accurately reflect the true per-node cost. Use custom pricing on homogeneous clusters, or consider splitting mixed clusters into separate node groups.

Source currencies and display currency

Different providers publish pricing in different currencies — most use USD, while Hetzner and Scaleway publish in EUR. CostPilot fetches pricing in the provider’s source currency and converts it at ingestion time for internal calculations.

All cost figures are displayed in your account’s configured display currency (set in Settings → General, defaulting to EUR). If you need costs in a specific currency for finance reporting, update your display currency there.

For custom pricing overrides, enter the rate in your configured display currency.