HackerTrans
TopNewTrendsCommentsPastAskShowJobs

wozzio

no profile record

Submissions

[untitled]

1 points·by wozzio·قبل 6 أشهر·0 comments

We analyzed 3K K8s clusters: one config line costs millions

wozz.io
2 points·by wozzio·قبل 6 أشهر·0 comments

How to Plan Your 2026 Kubernetes Budget

wozz.io
1 points·by wozzio·قبل 6 أشهر·0 comments

Show HN: Wozz – open-source Kubernetes cost linter and cluster auditor

2 points·by wozzio·قبل 6 أشهر·1 comments

Show HN: I audited 500 K8s pods. Java wastes ~48% RAM, Go ~18%

github.com
36 points·by wozzio·قبل 7 أشهر·47 comments

comments

wozzio
·قبل 6 أشهر·discuss
OP here. One detail I left out:

We are currently looking for 3 engineering teams to be 'Design Partners.'

If you are managing a cluster with high variance (e.g., AdTech, AI, Data Services) and suspect you have 'Sleep Insurance' waste (requested > used), I’d be happy to manually audit your Helm charts and set up these guardrails for you for free.

I’m looking for feedback on our 'Blended Rate' math vs. real-world billing. If interested, my email shoot me a note.
wozzio
·قبل 7 أشهر·discuss
Really fair critique regarding the snapshot approach. You're right optimizing limits based on a single point in time is dangerous for bursty workloads the need 8GB for 10 seconds scenario.

The intent of this script isn't to replace long-term metric analysis like Prometheus/Datadog trends, but to act as a smoke test for gross over-provisioning, the dev who requested 16GB for a sidecar that has flatlined at 100MB for weeks.

You make a great point about the hostile framing of the word waste. I definitely don't want to encourage OOM risks. I'll update the readme to clarify that this delta represents potential capacity to investigate rather than guaranteed waste.

Appreciate the detailed breakdown on the safety buffer nuances.
wozzio
·قبل 7 أشهر·discuss
Ideally we would measure Request minus Max_Usage_Over_7_Days.

Since this is a snapshot tool (wrapping kubectl top) it can't see historical peaks so it def leans towards being a current state audit. Love the idea of pairing this with a load test benchmark that would actually give you a calculated Safe Request Size rather than just a guess.
wozzio
·قبل 7 أشهر·discuss
I’ll update the README instruction to include curl -L immediately thanks for flagging
wozzio
·قبل 7 أشهر·discuss
In the clusters I've audited so far typically 30% to 50% of the total requested capacity is allocatable waste resources that are reserved/billed but never actually touched.
wozzio
·قبل 7 أشهر·discuss
That aggressive release behavior is exactly what we need more of most runtimes (looking at you legacy Java) just hoard the heap forever because they assume they are the only tenant on the server.
wozzio
·قبل 7 أشهر·discuss
That new .NET behavior is the goal smart runtimes that yield memory back to the OS so we don't have to play guess the request in YAML.

Unfortunately most legacy Java/Python workloads I see in the wild are doing the exact opposite: hoarding RAM just in case. Until the runtimes get smarter, we're stuck fixing the configs.
wozzio
·قبل 7 أشهر·discuss
It feels unsolvable because we've been trying to solve it with static spreadsheets and guesses. It's actually very solvable if you treat it as a control loop problem continuous adjustment rather than a set it and forget it config.
wozzio
·قبل 7 أشهر·discuss
If you're small startup burning $5k/year in lazy tax is smarter than distracting your engineers the math flips when you hit scale.

For some that safety margin isn't small. At a certain volume, waste exceeds the cost of a full-time engineer so optimizing becomes profit.
wozzio
·قبل 7 أشهر·discuss
That doc is gold thanks for linking.

Yeah defaults are the enemy here. Most of the waste I'm seeing in the data comes from generic Spring Boot apps running with out of the box settings where the JVM assumes it owns the entire node.
wozzio
·قبل 7 أشهر·discuss
you are technically right that requests are scheduling hints but in a cluster autoscaler world, requests=bill.

If I request 8GB for a pod that uses 1GB, the autoscaler spins up nodes to accommodate that 8GB reservation. That 7GB gap is capacity the company is paying for but cannot use for other workloads.

Valid point on Goodhart's Law, tho the goal shouldn't be fill the RAM, but rather lower the request to match the working set so we can bin-pack tighter.
wozzio
·قبل 7 أشهر·discuss
The curl | bash is just for convenience; the README explicitly advises to Download and inspect wozz.sh first if you aren't comfortable piping to shell.

As for the newness I just open-sourced this from my personal scripts collection this week, so yes, the Org and Account are new. It runs entirely locally using your active kubeconfig it doesn't collect credentials or send secrets anywhere. You can cat the script to verify that it's just a wrapper around kubectl top and kubectl get.
wozzio
·قبل 7 أشهر·discuss
That is the opposite of what I usually see. Are you trading CPU for RAM by running a more aggressive GC like ZGC or Shenandoah? Usually, people starve the CPU to buy more RAM.
wozzio
·قبل 7 أشهر·discuss
Exactly we call it sleep insurance. It is rational for the on call engineer to pad the numbers but it's just irrational for the finance team to pay for it.
wozzio
·قبل 7 أشهر·discuss
CPU bursting is safe you just get throttled. Memory bursting is dangerous you get OOMKilled.

That's why Python numbers look so bad here devs set the request high enough to cover that initial model loading spike so they don't crash during a rollout, even if they idle at 10% usage afterwards.
wozzio
·قبل 7 أشهر·discuss
The JVM expands to fill the container, but the scheduler still counts that 8GB request as used when packing the node. Even if the app only needs 2GB of working set, we are blocked from scheduling other pods on that wasted 6GB buffer.
wozzio
·قبل 7 أشهر·discuss
I've been consulting on EKS/GKE cost optimization for a few mid-sized companies and kept seeing the same pattern: massive over-provisioning of memory just to be safe.

I wrote a simple CLI tool (bash wrapper around kubectl) to automate diffing kubectl top metrics against the declared requests in the deployment YAML.

I ran it across ~500 pods in production. The "waste" (allocated vs. used) average by language was interesting:

Python: ~60% waste (Mostly sized for startup spikes, then idles empty).

Java: ~48% waste (Devs seem terrified to give the JVM less than 4Gi).

Go: ~18% waste.

The tool is called Wozz. It runs locally, installs no agents, and just uses your current kubecontext to find the gap between what you pay for (Requests) and what you use (Usage).

It's open source. Feedback welcome.

(Note: The install is curl | bash for convenience, but the script is readable if you want to audit it first).