kubernetes-finops

Allocate, right-size, and optimize Kubernetes workload costs using OpenCost, VPA, and KEDA.

Updated Apr 11, 2026
One-click install
npx skills add https://github.com/lurodrisilva/personal-skills --skill kubernetes-finops-lurodrisilva
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: kubernetes-finops
Source: https://github.com/lurodrisilva/personal-skills/tree/main/operations/kubernetes-finops
Command: npx skills add https://github.com/lurodrisilva/personal-skills --skill kubernetes-finops-lurodrisilva

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? A shared Kubernetes cluster is one cloud bill hiding many tenants, and most clusters run at only 20-30% utilization because pod requests are set far above real usage. This Skill provides the doctrine and tooling to attribute cluster costs fairly per workload, close the request-vs-usage gap, eliminate idle waste, and enforce cost governance on any cluster (EKS, AKS, GKE, or on-prem). ## Core Features & Use Cases - Cost Allocation & Visibility: Split node cost into allocated, idle, and shared buckets using the FinOps Foundation container-cost model (allocate on max(request, usage)) with OpenCost or Kubecost, labels, and namespaces for showback and chargeback. - Right-Sizing & Autoscaling Efficiency: Size requests to p95/p99 usage with VPA recommendation mode, Goldilocks, or KRR; manage QoS classes; use HPA/KEDA scale-to-zero, bin-packing, and Spot node pools. - Waste Elimination & Governance: Find unbound PVCs, orphaned PVs, zombie workloads, and completed Jobs with three read-only kubectl triage scripts, then enforce ResourceQuota, LimitRange, and admission policies requiring requests and cost labels. - Use Case: Your cluster bill keeps growing but utilization is 22%. Run the read-only triage scripts to find over-provisioned requests and idle resources, stand up OpenCost for per-namespace allocation, right-size requests via VPA recommendations, and roll changes out as gated GitOps PRs. ## Quick Start Ask the AI to analyze my Kubernetes cluster for cost waste by running the read-only triage scripts and recommending right-sized pod requests based on actual usage.

Frequently Asked Questions about kubernetes-finops

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I allocate Kubernetes costs per namespace or team?▼

Use OpenCost or Kubecost on Prometheus to produce an Allocation by namespace, controller, pod, or label, charging each workload on max(request, usage) across CPU, memory, GPU, storage, and network. Enforce cost labels like team and app via admission policy so every workload is attributable.

How to right-size Kubernetes pod requests and limits?▼

Size requests to roughly p95/p99 of real usage from Prometheus history, not peak-of-peak, and keep requests below limits (Burstable QoS) for most apps. Use VPA in recommendation mode, Goldilocks, or KRR to get suggested values, then roll changes out gradually as gated PRs.

OpenCost vs Kubecost for Kubernetes cost monitoring?▼

OpenCost is the CNCF open standard that reads Kubernetes state, Prometheus metrics, and cloud prices to produce allocations with idle and shared as first-class buckets. Kubecost is its commercial superset; both feed the same allocated/idle/shared cost model.

Does kubectl top work without metrics-server?▼

No, kubectl top requires metrics-server installed in the cluster, and the triage scripts tolerate its absence by printing a fallback message. Historical p95/p99 right-sizing additionally needs Prometheus retention, which VPA, Goldilocks, or KRR consume.

Why is my Kubernetes cluster only 20% utilized?▼

Low utilization usually comes from pod requests set defensively far above actual usage, since requests reserve node capacity and drive node count. Right-size requests to real usage, bin-pack nodes, scale non-prod to zero with KEDA, and delete orphaned PVCs and zombie workloads.

Can these scripts delete idle PVCs or scale down workloads automatically?▼

No, the three triage scripts are strictly read-only, running only kubectl get and kubectl top with cluster-reader RBAC. Every deletion, resize, or scale-down is a separate human-approved GitOps change, since a wrong PVC delete can lose data and a wrong request cut can throttle production.