Every cloud ships a recommender (Compute Optimizer, Azure Advisor, GCP Recommender) and every K8s cluster has a VPA or Karpenter telling you something is oversized. The raw output is a wall of rows nobody actions — and blindly applying it causes the next incident.
Tier: Core · Hands-on time: ~45 minutes
This playbook uses AI to convert recommender output into a risk-ranked change plan with per-change rollback notes, while the decision to resize anything stays with the human who owns the workload's performance.
Skip AI for a handful of recommendations on services you know well — your own judgment plus a load graph is faster and better.
Export and annotate. Dump recommendations to CSV. Add two columns yourself before any prompting: owner and known-constraints (e.g., "month-end batch spike", "DR capacity, must stay warm", "licensed per-core"). This context is the difference between a plan and a spreadsheet.
Ask for risk-ranked triage, not approval.
Attached: rightsizing recommendations with owner and known-constraints
columns. For each row produce:
- savings/month (from the data; do not estimate prices yourself)
- risk class: LOW (stateless, autoscaled, low variance), MEDIUM (stateful
or bursty), HIGH (constraint listed, DR/failover, or utilization
lookback shorter than the workload's known cycle)
- why: one line citing the utilization stats or constraint
- verification step required before and after the change (load test,
canary %, watch metric + threshold)
Sort into three batches: apply-soon, needs-owner-review, do-not-touch.
If lookback window < 31 days for anything flagged as cyclical, put it in
do-not-touch and say why.
Audit the HIGH/do-not-touch reasoning first. The model's most valuable output is what it refuses to batch. Check that everything with a known-constraints entry landed outside apply-soon. If any constrained row leaked into apply-soon, tighten the prompt and rerun — this is your safety regression test.
Spot-check five apply-soon rows manually. Open real utilization graphs (not the recommender's summary stats) for five sampled rows: check p99 not just average, check the full business cycle, check burst credits on burstable families. If ≥1 of 5 fails your check, the batch is not trustworthy — re-triage with stricter rules.
Generate the change plan artifacts. For the surviving apply-soon batch, have the AI draft: the IaC diff per change (instance type / requests-limits edits), a rollout order (lowest blast radius first), and a per-change rollback one-liner. All of it ships as a PR — reviewed by the workload owner, applied gradually.
Close the loop with measurements. After each tranche, feed post-change utilization and any alert/latency deltas back in and ask for a one-paragraph tranche report: realized savings, incidents caused (target: zero), rows promoted from needs-review.
The recommender supplies numbers, the AI supplies triage and paperwork, the owner supplies judgment — collapse those three roles into one and you get either no savings or an outage.
kubectl top/Prometheus percentiles; the AI drafts requests/limits PRs per namespace with the same three-batch triage. Karpenter consolidation handles node-level sizing automatically — point the AI at workload-level requests instead.known-constraints.SVC_A), or normalize sizes to relative classes before using a public assistant.A rightsizing incident erases a year of the savings you were chasing — the gradual-rollout gate is the playbook, not an appendix.