Skip to main content

Kubernetes cost attribution with AWS SCAD

Last updated on

1. What is SCAD?

SCAD stands for Split Cost Allocation Data. It is an AWS-native feature that
splits the cost of a shared Amazon EC2 instance (used as an Amazon EKS node) across
the individual Kubernetes pods that ran on it.

Without SCAD, your AWS bill only shows you the cost of the EC2 instance - you
have to estimate how much of that cost belongs to each pod, namespace, workload,
team, or environment. SCAD does the split for you, using the actual CPU and memory
reservations of each pod, and emits the per-pod cost as additional columns in your
AWS Cost and Usage Report (CUR):

CUR columnMeaning
line_item_resource_idARN of the form arn:aws:eks:<region>:<account>:pod/<cluster>/<namespace>/<pod>/<podUid>
------
line_item_parent_resource_idEC2 instance ID of the node the pod ran on
------
split_line_item_split_costThe pod's share of the node's amortised cost, including amortised Reserved Instance and Savings Plans usage
------
split_line_item_unused_costThe unallocated/idle portion of the node attributed to this pod (per AWS's allocation strategy)
------
split_line_item_public_on_demand_split_costThe same split, but at public on-demand pricing (before discounts)
------
split_line_item_public_on_demand_unused_costUnused portion at public on-demand pricing
------

Because SCAD is computed by AWS from the same data that produces your invoice, the sum of per-pod SCAD costs reconciles to your actual AWS bill. This is what we mean
by "billing-accurate".

2. How Harness Uses SCAD

When SCAD is enabled, Harness attributes EKS pod costs using the authoritative
per-pod split that AWS publishes in the CUR. The Harness Delegate supplies the
cluster utilization and pod metadata, and SCAD provides the cost.

The setup is simple. Once you create a Kubernetes connector by installing the
Harness Delegate on your EKS cluster, Harness pulls the cluster's utilization data.
The corresponding cluster is detected automatically, and per-pod cost attribution
starts happening through SCAD data, no extra configuration required.

Prerequisites:

  • SCAD is enabled in AWS for the account that publishes your CUR.
  • The SCAD feature flag is enabled for your account on the Harness side.

3. Cost Data Source and Latency

When SCAD is enabled, Harness uses SCAD as the only source for EKS pod cost
attribution. Harness does not estimate pod costs using public on-demand pricing or
any other pricing model. If SCAD data is not yet present for a given day, no pod
cost is shown for that day.

AWS does not publish SCAD data in real time. The CUR is refreshed multiple times a
day, but split-cost data for a given day is typically finalized 2-3 days later.
Until SCAD data lands, pod-level costs for that day do not appear.

  • Source: AWS CUR with columns populated by SCAD.
  • Cost model: AWS's authoritative split, with Reserved Instances, Savings Plans,
    Spot pricing, EDP/PPA discounts, and credits already applied.
  • Latency: Typically 2-3 days after the usage day, depending on when AWS finalizes
    the CUR for that day.
  • Purpose: Invoice reconciliation, chargeback/showback, audited reports, budgets,
    long-term trends.

Once SCAD data lands for a given day, Harness populates the billing-accurate
numbers across all CACM surfaces: Perspectives, Cost Categories, Recommendations,
Anomaly Detection, Budgets, and the BI Dashboards.

4. What Cost Changes to Expect

When SCAD is first turned on, you will almost certainly see your per-pod,
per-namespace, and per-workload costs move. The total cluster cost
will be unchanged or very close, what changes is how that total is attributed.

Expect the following directional changes:

AreaTypical changeWhy
Total EKS cluster spend≈ unchangedSame EC2 bill, just split differently
---------
Discounted workloads (covered by RIs / Savings Plans / Spot)LowerSCAD uses your effective rate, not on-demand list price
---------
Idle / unallocated cluster costMore visibleSCAD reports an explicit unused_cost per pod for the unallocated portion of the node
---------
Memory-heavy podsOften higher shareSCAD splits by both CPU and memory
---------
Very short-lived pods (Jobs, CronJobs)New cost rows may appearSCAD captures pods the Delegate may have missed
---------
Spot-backed workloadsSignificantly lowerSCAD reflects Spot discounts
---------

If your finance team was previously using Harness's pre-SCAD cost estimates, the
first reconciliation window will show a one-time delta. After that, the
day-over-day trend will be stable.

5. Prerequisites

To get billing-accurate K8s costs from SCAD, you need all of the following:

  • AWS EKS clusters: SCAD currently covers Amazon EKS pods only. Self-managed Kubernetes on EC2, ECS, Fargate, and non-AWS clusters are not in scope of this feature.
  • SCAD enabled in AWS for the payer / management account that publishes your
    CUR. See understanding split cost allocation data by AWS.
  • An AWS CUR connector configured in CACM, pointing at a CUR (CUR 2.0 or legacy
    CUR is acceptable) that includes the SCAD columns.
  • An AWS Kubernetes connector for each EKS cluster you want covered, with
    the Harness Delegate installed and reported events.
  • Harness CACM enabled on your account, with the CCM_SCAD_ENABLED_AWS feature
    flag turned on. Reach out to Harness Support if you do not see SCAD-based costs
    within ~3 days of completing steps 1-4.

There is no extra agent, no extra IAM role, and no extra cluster-side configuration required beyond what CACM already needs.

7. FAQ

Q: Do I lose real-time visibility while waiting 2-3 days?
Yes - it completely depends when scad cost is appearing

Q: Will my historical data be updated?
No. SCAD only applies from the day you enable it in AWS onward. Days before SCAD
was enabled remain on the Phase-1 estimate.

Q: My total cluster cost did not change. Did SCAD do anything?
Yes, SCAD redistributes the same total across pods, namespaces, and workloads.
The cluster total should be roughly the same; the per-namespace and per-workload
numbers are where you'll see the impact.

Q: I see "unused cost" on a pod. What is that?
That is the portion of the node's cost that AWS could not attribute to any pod
(e.g. headroom not requested by any pod). SCAD distributes it across pods using
AWS's allocation strategy, and Harness surfaces it as unallocated coston each
pod and rolled up at the cluster.

Q: Does SCAD increase my AWS bill?
SCAD itself is free. The CUR (with or without SCAD) is billed at standard S3
storage rates for the CUR bucket typically negligible.

Q: Will my labels, cost categories, and perspectives still work?
Yes.