Cloud & Infrastructure · DevOps
GitOps + FinOps: How Teams Fix Infrastructure Cost
GitOps adoption hit 64% in 2025, but costs rose with it. Real-time cost visibility in every infrastructure PR is how serious teams are fixing that in 2026.
Anurag Verma
12 min read
Sponsored
When your Git repository becomes the single source of truth for infrastructure, cost visibility becomes a pull request comment, not a surprise at the end of the month.
A CNCF survey published in late 2025 found that 64% of organizations with Kubernetes workloads had adopted GitOps practices, up from 47% in 2023. More telling than the adoption number was the reliability metric: 81% of those adopters reported measurably higher infrastructure reliability compared to their pre-GitOps workflows. Those are not marketing numbers from a vendor. That is the Cloud Native Computing Foundation surveying its own community.
But here is the problem those numbers do not capture. Reliability went up. Costs also went up. Many teams that embraced GitOps found themselves deploying infrastructure faster and more reliably than ever, and then getting blindsided by cloud bills that grew 30-40% year over year. Speed without cost awareness is just expensive speed.
That is where FinOps enters the picture. And the convergence of GitOps and FinOps is, I think, the most useful operational shift happening in infrastructure teams right now.
GitOps: A Quick Grounding
For teams that have not made the switch yet, the core idea behind GitOps is straightforward. Your Git repository is the single source of truth for your infrastructure’s desired state. Every change (a new deployment, a scaling rule, a network policy, a secret rotation) goes through a pull request. An automated reconciliation loop compares the desired state in Git with the actual state of your infrastructure and corrects any drift.
The two dominant tools are ArgoCD and Flux, both CNCF projects. ArgoCD uses a pull-based model where the cluster watches the Git repository, and its progressive-delivery companion, covered in our Argo Rollouts canary deployments guide, extends the same model to controlled rollouts. Flux operates similarly but with a lighter footprint and a more composable architecture. Crossplane extends the GitOps model beyond Kubernetes to manage cloud resources (databases, queues, storage buckets) using the same declarative approach.
What makes GitOps powerful is not any single tool. It is the operational model: every infrastructure change is version-controlled, peer-reviewed, auditable, and automatically applied. No more SSH-ing into servers. No more ad hoc kubectl commands that nobody remembers. No more “who changed this?” investigations that end in finger-pointing.
FinOps: The Missing Half
FinOps is the practice of bringing financial accountability to variable cloud spending. The FinOps Foundation (now part of the Linux Foundation) defines it as a cultural practice: engineering, finance, and business teams working together to make informed tradeoffs between cost, speed, and quality.
In practical terms, FinOps means three things for engineering teams:
First, visibility. You know exactly what each service, team, and environment costs. Not at the end of the month, but continuously. Second, optimization. You act on that visibility, right-sizing instances, eliminating waste, choosing appropriate pricing models (reserved, spot, savings plans). Third, accountability. Teams own their infrastructure costs the way they own their uptime metrics.
The honest answer is that most organizations are still in the visibility phase. A 2025 FinOps Foundation survey found that only 28% of respondents had mature FinOps practices with real-time cost allocation. The majority were still reconciling bills manually or relying on monthly reports from finance.
The Integration: Cost Visibility in Every Pull Request
Here is where things get interesting. When you combine GitOps with FinOps, you get cost impact visibility at the exact moment infrastructure decisions are made: in the pull request.
Consider a typical workflow without this integration. A developer opens a PR to change a Kubernetes deployment. They increase the replica count from 3 to 10 because traffic is growing. The PR gets reviewed for correctness (does the YAML parse, are the labels right, does it follow the team’s conventions) and gets merged. ArgoCD applies the change. Three weeks later, the finance team flags a 230% increase in the staging cluster bill. Nobody remembers which change caused it.
Now consider the same workflow with FinOps integrated. The developer opens the same PR. An automated tool (Infracost, Kubecost, or a custom integration) runs against the diff and posts a comment directly on the PR:
## Cost Estimate
Monthly cost will increase from $847/mo to $2,823/mo (+$1,976/mo)
Resource changes:
+ deployment/api-server replicas: 3 -> 10 (+$1,976/mo)
7 additional pods x m5.large ($0.096/hr) = $1,976/mo
This change exceeds the team's $500/mo threshold.
Requires approval from @infra-leads.
The cost impact is visible before the merge. The reviewer can ask: do we actually need 10 replicas, or would autoscaling with KEDA or a VPA achieve the same result at 40% of the cost? The decision is made with full information, not in retrospect.
Before and After: A Typical Scenario
Picture a multi-tenant SaaS platform on AWS EKS. The engineering team is good: fast deployments, solid test coverage, clean GitOps practices with ArgoCD. But the monthly AWS bill keeps climbing quarter after quarter, and nobody can explain exactly why.
Wire Kubecost into the GitOps pipeline and the picture usually clears up fast. Three patterns tend to account for most of the overspend:
Oversized resource requests are the usual biggest culprit. Developers set CPU and memory requests conservatively high (the “I do not want my pod to get evicted” instinct), and nobody ever right-sizes them. When average CPU utilization sits at something like 12%, you are paying for roughly 8x the compute you actually use.
Non-production environments running 24/7 are the second issue. Staging and QA clusters run at full capacity around the clock, even though they are only actively used during business hours (roughly 10 hours per day). That is 58% wasted spend on non-production infrastructure.
Storage volumes that never get deleted after deployments are torn down make up the rest. Persistent volume claims accumulate like digital debt. Each one is small, but together they add up.
Automated cost gates in the GitOps workflow and resource budgets per namespace go after all three directly, and none of the fixes require giving up performance or reliability.
Comparison: Traditional Ops vs. GitOps vs. GitOps + FinOps
| Dimension | Traditional Ops | GitOps | GitOps + FinOps |
|---|---|---|---|
| Deployment speed | Hours to days (manual or scripted) | Minutes (automated reconciliation) | Minutes (same speed, with cost gate) |
| Cost visibility | Monthly bill review after the fact | No built-in cost awareness | Real-time cost diffs in every PR |
| Reliability | Dependent on operator skill and documentation | 81% report higher reliability (CNCF 2025) | Same reliability, with cost-aware decisions |
| Audit trail | Scattered across tickets, emails, chat logs | Full Git history with PR reviews | Git history + cost impact records per change |
| Rollback capability | Manual, often incomplete | Automated via Git revert | Automated with cost impact of rollback shown |
| Drift detection | Manual checks or custom scripts | Continuous reconciliation | Continuous reconciliation + cost drift alerts |
| Resource optimization | Periodic reviews (if they happen at all) | Not addressed by default | Continuous right-sizing recommendations |
The Toolchain
Getting this working requires integrating tools from two ecosystems. Here is the stack we recommend.
GitOps Layer
ArgoCD remains our default recommendation for most teams. It has the largest community, the most mature UI, and solid multi-tenancy support. The application sets feature makes it practical for managing hundreds of services. If you are running a single cluster with fewer than 50 services, Flux is lighter and equally capable. It just requires more comfort with CLI-driven workflows.
Crossplane fills the gap that ArgoCD and Flux leave open: cloud resources that live outside Kubernetes. If your infrastructure includes RDS databases, SQS queues, CloudFront distributions, or any other managed service, Crossplane lets you manage them with the same GitOps model. The resource definitions live in Git, get reviewed in PRs, and get reconciled automatically.
FinOps Layer
Infracost is the tool that plugs cost visibility directly into the pull request workflow. It parses Terraform, OpenTofu, or Pulumi configurations, calculates the cost impact of changes, and posts the results as PR comments. For teams using infrastructure-as-code alongside GitOps, Infracost is the most straightforward integration.
Kubecost provides runtime cost allocation for Kubernetes workloads. It tracks actual resource consumption per pod, namespace, label, and deployment, and maps it to cloud billing data. Where Infracost tells you what a change will cost before you apply it, Kubecost tells you what your running infrastructure actually costs right now.
CloudHealth (VMware) and Spot by NetApp handle the broader cloud cost optimization picture: reserved instance recommendations, savings plan coverage analysis, and anomaly detection. These are less about the GitOps integration and more about the strategic FinOps practice.
Putting It Together
The pipeline looks like this: a developer commits a change to the infrastructure repository. The CI pipeline runs validation (linting, policy checks, dry-run apply) and then runs Infracost to calculate the cost delta. The results are posted to the PR. If the cost increase exceeds a configurable threshold, additional approvals are required. Once merged, ArgoCD or Flux detects the change and applies it. Kubecost monitors the running cost and alerts if actual spend deviates from the estimate.
# Example: Infracost GitHub Actions workflow
name: Infracost
on:
pull_request:
paths:
- 'infrastructure/**'
jobs:
infracost:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Infracost
uses: infracost/actions/setup@v3
with:
api-key: ${{ secrets.INFRACOST_API_KEY }}
- name: Generate cost diff
run: |
infracost diff \
--path=infrastructure/ \
--format=json \
--out-file=/tmp/infracost.json
- name: Post PR comment
uses: infracost/actions/comment@v3
with:
path: /tmp/infracost.json
behavior: update
This is roughly 30 lines of configuration. The return on investment, in prevented overspend, in faster cost conversations, in reduced surprise bills, is disproportionately large.
Why This Matters for Agencies
We build and maintain infrastructure for client projects. Every engagement has a budget. Every client cares about what their cloud bill looks like after launch. The traditional model of “we will optimize costs later” does not work. Later never comes, or it comes after the client has already seen a bill that damages trust. It is also part of why we are specific about what to screen for when hiring a DevOps engineer: cost literacy is now as core to the role as pipeline design.
GitOps + FinOps changes the agency-client dynamic in a meaningful way. We can show clients the exact cost impact of every infrastructure decision, in real time, with a link to the pull request where the decision was made. There is no ambiguity about why the bill changed. There is no finger-pointing. There is a Git commit, a cost estimate, and an approval record.
For agencies managing multiple client environments, this approach also solves the attribution problem. When you run shared infrastructure (a common Kubernetes cluster hosting multiple client workloads, for example) Kubecost’s namespace-level cost allocation lets you bill each client accurately for their actual resource consumption, not an estimated split.
Common Objections and Honest Answers
“This adds friction to deployments.” To be fair, it does add a step. But the step takes 30-60 seconds to run and saves hours of cost investigation later. The friction is proportional to the risk: a $20/month change sails through; a $5,000/month change gets scrutinized. That is the point.
“Our developers do not care about costs.” Then your incentive structure is broken, not the tooling. When developers can see that their PR will increase monthly spend by $3,000, and when the team has a budget they are measured against, they start caring. Visibility creates accountability.
“We are too small for FinOps.” If your monthly cloud bill is under $1,000, you probably do not need formal FinOps practices. But if it is over $5,000/month and growing, the return on even basic cost visibility is immediate, because waste elimination alone usually pays for the setup.
“We will just use the cloud provider’s cost tools.” AWS Cost Explorer, GCP Billing, and Azure Cost Management are useful for retrospective analysis. They do not integrate into your deployment workflow. They tell you what you spent, not what you are about to spend. The proactive model (cost visibility at PR time) is fundamentally different from the reactive model of reviewing dashboards after the money is gone.
Getting Started: A Practical Path
If you are already doing GitOps, adding FinOps visibility is a weekend project, not a quarter-long initiative. Start with Infracost in your CI pipeline if you use Terraform. Add Kubecost to your Kubernetes cluster if you want runtime cost allocation. Set a threshold for cost-increase alerts. $200/month per PR is a reasonable starting point for smaller teams; adjust from there.
If you are not doing GitOps yet, start there. The cost visibility integration only works well when infrastructure changes flow through a reviewable, auditable pipeline. Ad hoc infrastructure changes made through cloud consoles or direct CLI commands bypass the entire model.
The teams that get this right in 2026 will have something their competitors do not: the ability to ship fast and explain exactly what it costs. That is not a marginal advantage. In a market where cloud costs are the second-largest line item after payroll for most software companies, it is a strategic one.
CODERCOPS helps teams implement GitOps pipelines with built-in cost visibility, from ArgoCD setup to Infracost integration. If your cloud bill keeps surprising you, talk to our infrastructure team about getting cost control into your deployment workflow.
Frequently asked questions
- What is the difference between GitOps and FinOps?
- GitOps is an operational model where Git is the source of truth for infrastructure state, with changes applied through pull requests and automated reconciliation. FinOps is the practice of giving engineering, finance, and business teams shared visibility into cloud costs so they can make informed cost-vs-speed tradeoffs. Combining them means cost impact shows up in the same pull request that changes the infrastructure.
- How does cost visibility actually show up in a pull request?
- A tool like Infracost parses the infrastructure-as-code diff in a PR and posts a comment with the projected monthly cost change, for example showing a replica count increase raising spend from $847/mo to $2,823/mo. If the increase crosses a team's threshold, the PR requires an additional approval before merge.
- Which GitOps tool should we use, ArgoCD or Flux?
- ArgoCD is the more common default for larger teams: it has the biggest community, most mature UI, and strong multi-tenancy through application sets. Flux is lighter and equally capable for smaller setups, typically under 50 services, but expects more comfort with CLI-driven workflows.
- What actually causes the biggest cloud overspend in GitOps teams?
- Three patterns usually account for most of it: oversized CPU/memory requests set conservatively high and never right-sized, non-production environments like staging and QA running 24/7 instead of business hours only, and persistent storage volumes left behind after deployments were torn down.
- Is FinOps worth it for a small team with a modest cloud bill?
- If your monthly cloud bill is under roughly $1,000, formal FinOps practices are probably not worth the overhead yet. Above $5,000/month and growing, the return on even basic cost visibility tends to be immediate, because waste elimination alone usually pays for the setup.
Sponsored
More from this category
More from Cloud & Infrastructure
Sponsored
Discussion
Join the conversation.
Comments are powered by GitHub Discussions. Sign in with your GitHub account to leave a comment.
Sponsored