Your cluster runs workloads for three teams. At month-end, the cloud bill arrives: $12,500. Your CFO walks into your office: "Which team should I charge for what portion of this?"
You open OpenCost and run a query by namespace. Production: $8,200. Staging: $2,100. Development: $2,200. But that's not what your CFO asked. The product team owns some workloads in production and some in development. The platform team has resources scattered across all three namespaces. The ML team runs GPU jobs that burst into production during training.
"By namespace" answers the wrong question. Your CFO needs "by team" or "by cost center." And OpenCost can only report on dimensions it knows about. Right now, it knows namespaces and pod names. It doesn't know which team owns what.
This lesson teaches you to label your workloads so OpenCost can answer the questions your CFO actually asks. Then we'll explore how to progress from "here's what things cost" (showback) to "here's your bill" (chargeback) without destroying team trust along the way.
OpenCost calculates cost per pod. But "pod cost" isn't useful for business decisions. Business decisions require mapping costs to organizational structures: teams, products, cost centers, environments.
The bridge between pod-level data and business-level reporting is labels. When your pods carry labels like team: product-team, OpenCost can aggregate costs by that label. Without the label, OpenCost can't report what it doesn't know.
Without Labels:
With Proper Labels:
Based on FinOps Foundation recommendations, every workload should carry these four labels:
Labels must appear in both the Deployment metadata and the Pod template:
Critical Failure Point: OpenCost reads labels from Pods, not Deployments. If you omit labels from spec.template.metadata.labels, your pods remain unaccountable.
Having cost data is step one. What you do with that data follows a progression:
What it is: Report costs to teams without charging them. Purpose: Build trust in the data. Give teams visibility to validate accuracy. Actions: Weekly reports, cost trend dashboards, fixing label gaps. Conversation: "Product team, your K8s costs were $69.12 last week. Looks right?"
If your first interaction with cost data is "here's your bill," teams will fight the metrics instead of optimizing them.
What it is: Map costs to business entities and budgets. Purpose: Enable cost-informed decisions and finance forecasting. Actions: Assign cost-center labels, track against planned budgets. Conversation: "Engineering: Q4 spend is tracking at $15k against a $12k budget."
What it is: Formally bill internal teams for their usage. Real money moves. Purpose: Create financial accountability and incentivize savings. Actions: Monthly invoices to cost centers, usage-based internal billing. Conversation: "Engineering: Your Dec invoice is $16k. This reduces your Q1 budget."
Most organizations find that Showback alone changes behavior. Chargeback adds significant overhead that may not be worth the marginal improvement.
Cost visibility tells you what happened. Budget alerts tell you before you exceed limits.
Effective thresholds require understanding normal spend patterns:
Key design decisions:
Test your understanding of cost allocation and alerting.
Prompt 1 (Design Your Labeling Strategy):
Prompt 2 (FinOps Maturity Assessment):
Prompt 3 (Budget Alert Design):
Cost data reveals business information: which projects get investment, team sizes, and strategic priorities. Implement strict access controls on cost dashboards and APIs. In multi-tenant clusters, ensure teams only see their own cost data.