Cost Visibility Pricing Modes
Cost Visibility measures allocated and used CPU, memory, GPU and storage with no configuration. Turning that into money takes one of two pricing modes: your cloud's published prices (the default), or your own rates in a price sheet. This page says which one each kind of cluster can use, and how to switch. How priced and unpriced hours read on the Cost tab is on Cost.
When to use it
- You want to know whether a cluster will be priced before you install, or why it reads Not priced: What your cluster is priced from.
- Spot nodes on AWS read at On-Demand rates: Spot prices on AWS.
- You are moving between modes, such as removing a price sheet: Every mode, by manifest.
Before you start
- Cost Visibility installed: Cost Visibility.
In the console
-
Open the cluster from the cluster list, select the Add-ons tab, open Cost Visibility, open Update and select Change configuration.
-
Set Pricing: Published prices (the default) or Your own rates. With Your own rates, enter the rates under Price sheet: Price sheets.
-
Registered AWS cluster only, with published prices: enter the Pricing role ARN (Spot prices on AWS).
-
Go to Review, select Continue to apply once the dry run passes, type
cost-visibility, then select Update cost-visibility.
You should see
From the next closed hour, the Cost tab labels each figure with its source: List price, Your rates or Not priced. Usage with no price says why, in a notice under the cards. A mode applies to hours reported after you set it; hours already reported keep what they were priced with.
The two modes
- Published prices (
ListPrice, shown as List price): your cloud's on-demand and Spot list prices for the cluster's region. They know nothing of Savings Plans, reservations, committed-use discounts or negotiated rates. - Your rates (
Custom, shown as Your rates): the rates in your price sheet, on any cluster.
Usage neither mode can price is reported as Unpriced (Not priced), with a reason in unpricedReasons. It is left out of the amount, never counted as $0.
What your cluster is priced from
Without a price sheet:
- EKS with managed node groups: published prices (the EC2 price list, Spot from the Spot price history). Also priced: the EKS control plane fee, the NAT gateways AstroPulse created with the VPC, and their public IPv4 addresses. Not priced: NAT data processing (
CostNotMetered), and public IPv4 addresses of load balancers and public nodes (CostCountNotRecorded). - EKS Auto Mode: as EKS, plus the Auto Mode management fee, not priced (
CostNoPriceSource). - EKS in a VPC you supplied: as EKS, without NAT gateways: those in your VPC are yours, so they are not counted.
- AKS: published prices (Azure retail prices, Spot included). AKS clusters are created on the free tier, so there is no control plane fee. Not priced: the outbound load balancer it shares with your LoadBalancer Services (
CostCountNotRecorded) and its public IPv4 address (CostNoPriceSource). - Self-hosted on AWS: as EKS; its control plane runs on nodes priced like any other. Also priced: the network load balancer in front of the Kubernetes API. Not priced: NAT gateways (
CostCountNotRecorded) and NAT data processing (CostNotMetered). - GKE, or self-hosted or registered on Google Cloud: no published prices (
CostListPriceUnavailable). Use a price sheet. With one, the Cloud NAT AstroPulse created for a private GKE cluster is not priced (CostNoPriceSource). - Registered on AWS or Azure: published prices, and nothing around the cluster, since AstroPulse provisioned nothing outside it. On AWS, Spot nodes are priced at On-Demand rates until you set the Spot pricing role (
CostSpotPriceUnavailable). - Registered anywhere else, local or bare metal: no published prices and no notice. Use a price sheet.
A charge around the cluster is added only to hours that already have a price, so a cluster that is not priced stays not priced. With a price sheet, every cluster is priced at your rates; the charges around it keep their published prices, labelled List price, beside your Your rates figures.
Spot prices on AWS
Spot nodes are priced from the Spot price history, read with ec2:DescribeSpotPriceHistory. Without that permission they are priced at On-Demand rates, and the cluster says CostSpotPriceUnavailable.
- An EKS cluster AstroPulse created gets a role for this with the cluster, allowed only that action in the cluster's region and trusted only by the add-on's own service account. A cluster created before the role existed gets it at its next update: select Update the cluster, then apply Cost Visibility again.
- A registered AWS cluster needs a role you create, named in Pricing role ARN (
pricingRoleArn). Its policy, with your cluster's region:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:DescribeSpotPriceHistory"],
"Resource": "*",
"Condition": {"StringEquals": {"aws:RequestedRegion": "<region>"}}
}]
}
Let system:serviceaccount:astro-cost:cost-visibility-opencost assume it, through the cluster's OIDC provider or an EKS Pod Identity association.
Security: the role can read Spot prices and nothing else, and the add-on reaches it through a workload identity, so no AWS key is stored on the cluster or in AstroPulse.
Every mode, by manifest
Each is a costVisibility block in the add-on manifest (Cost Visibility), applied with astroctl infra k8s addons apply -f cost-visibility.yaml.
Published prices, the default. Applying this also removes a price sheet:
costVisibility: {}
Published prices, with Spot prices on a registered AWS cluster:
costVisibility:
pricingRoleArn: arn:aws:iam::123456789012:role/spot-prices
Your own rates, on any cluster (every field):
costVisibility:
priceSheet:
cpuCoreHour: "0.031611"
ramGbHour: "0.004237"
currency: USD
Other ways in
- Nova: ask it, for example "why does gke-prod read Not priced, and what should I set?"
- SDK and API: the same operations, in the API reference.
With astroctl
See what a cluster is priced from, and what to do about it:
astroctl infra k8s addons get <cluster> cost-visibility -o yaml
astroctl infra k8s cost summary <cluster> --window 24h -o yaml
The add-on's pricing.notices list what is priced differently on that cluster, such as CostSpotPriceUnavailable or CostListPriceUnavailable, each with a next step. Every cost view carries the same notices in pricingNotes.
Settings
costVisibility.priceSheetYour rates, shown when Pricing is Your own rates. With Published prices (the default) no priceSheet is sent.
costVisibility.pricingRoleArnAn AWS IAM role allowed ec2:DescribeSpotPriceHistory, so Spot nodes are priced at their Spot price on a cluster AstroPulse did not create. Shown with published prices only.
arn:aws:iam::<account-id>:role/<name>, on a cluster on AWS.If it's refused
arn:aws:iam::<account-id>:role/<name>.Refused rates: Price sheets. A cluster that reads Not priced: Troubleshoot Cost Visibility.