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 examples | Detected provider |
|---|---|
t3.micro, m5.xlarge, c5.2xlarge, r5.4xlarge | AWS |
e2-standard-4, n2-highmem-8, c2-standard-30 | GCP |
Standard_D4s_v3, Standard_B2ms, Standard_F8s_v2 | Azure |
s-4vcpu-8gb, g-8vcpu-32gb, c-16 | DigitalOcean |
cx21, cpx31, ccx13 | Hetzner |
DEV1-S, GP1-M, PRO2-L | Scaleway |
k3s, local, or unrecognised patterns | Self-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 type | Providers | Typical saving |
|---|---|---|
| On-demand / standard | All | Baseline |
| Spot / preemptible | AWS, GCP, Azure | 60–90% cheaper |
| Reserved / committed use | AWS, GCP | 20–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:
| Provider | Default CPU fraction | Default memory fraction |
|---|---|---|
| AWS (general purpose) | 50% | 50% |
| AWS (compute-optimised) | 60% | 40% |
| AWS (memory-optimised) | 40% | 60% |
| GCP (general purpose) | 50% | 50% |
| Azure | 50% | 50% |
| DigitalOcean | 50% | 50% |
| Hetzner | 50% | 50% |
| Scaleway | 50% | 50% |
| Self-hosted | Configurable | Configurable |
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.
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:
| Provider | Strategy | Cache TTL |
|---|---|---|
| AWS | Live API (runs-on.com) | 15 minutes |
| GCP | Static table + region multipliers | Built-in |
| Azure | Live API (prices.azure.com) | 6 hours |
| DigitalOcean | Live API (/v2/sizes) | 24 hours |
| Hetzner | Static table (EUR) | Built-in |
| Scaleway | Static table (EUR) | Built-in |
| Self-hosted | Fixed 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
| Provider | Pricing accuracy | Spot support | Source currency | Notes |
|---|---|---|---|---|
| AWS | Real-time | Yes | USD | Broadest instance type coverage |
| GCP | Near real-time | Yes (preemptible) | USD | Region multipliers from us-central1 |
| Azure | Real-time | Yes | USD | 6-hour cache |
| DigitalOcean | Real-time | No | USD | Requires optional API token |
| Hetzner | Static | No | EUR | Location-independent pricing |
| Scaleway | Static | No | EUR | Kapsule-specific instance families |
| Self-hosted | Fixed | No | Configurable | User-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.
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.