Your First 30 Days with Attune¶
This guide walks you through what to expect after installing Attune, from the initial data collection to full automation. Each phase builds confidence before moving to the next.
Day 0: Install and create your first policy¶
After installing the operator, create a AttunePolicy targeting a non-critical workload:
apiVersion: attune.io/v1alpha1
kind: AttunePolicy
metadata:
name: my-first-policy
namespace: my-app
spec:
targetRef:
kind: Deployment
name: my-api
metricsSource:
prometheus:
address: http://prometheus-server.monitoring:80
Verify the operator is running and picked up your policy:
kubectl attune status -n my-app
You should see your policy with Ready showing InsufficientData or a
progress message like Collecting data: 0/48 data points (0%). This is
normal.
Verify operator config
Check the operator logs to confirm it started with the right settings:
kubectl logs -n attune-system deploy/attune-controller-manager | head -5
Hours 0-4: Data collection¶
The operator queries Prometheus every 5 minutes (default queryStep) and
needs 48 data points (default minimumDataPoints) before generating
recommendations. This takes roughly 4 hours.
Watch progress live:
kubectl attune status -w -n my-app
What to check during this phase:
- Ready shows
NoWorkloadsFound? YourtargetRef.nameorkinddoesn't match any workload. Check spelling and namespace. - Ready shows
PrometheusUnavailable? The operator can't reach your Prometheus instance. Verify the address and network policy. - Progress percentage is climbing? Everything is working. Wait for it to reach 100%.
Quick evaluation
For a faster first look (~1 hour), set minimumDataPoints: 12 in your
policy. See the quickstart for details. Remove it
before going to production.
Day 1: First recommendations¶
Once data collection completes, the policy transitions to Ready=Monitoring and recommendations appear:
kubectl attune recommendations -n my-app
This shows current vs recommended resource values with a confidence score. Low confidence (< 70%) means the operator hasn't seen enough variance yet; it will improve over the coming days.
To understand why a specific recommendation was made:
kubectl attune explain my-first-policy -n my-app
This traces the full recommendation pipeline: raw percentile, safety margin, confidence adjustment, bounds clamping, and change filter.
Days 1-7: Build trust in Recommend mode¶
During the first week, check recommendations daily:
kubectl attune recommendations -n my-app
kubectl attune savings -n my-app
Look for:
- Confidence scores increasing as more data is collected
- Recommendations stabilizing (not swinging wildly between checks)
- Savings estimates that make sense for your workload
If recommendations look unreasonable, adjust the policy:
- Recommendations too aggressive? Increase
overhead(e.g.,"30") - Recommendations too conservative? Decrease
overhead(e.g.,"10") - Don't want memory to decrease? Set
memory.allowDecrease: false
Week 2: Promote to Canary mode¶
Once you trust the recommendations, switch to Canary mode to test on a small subset of pods:
kubectl patch rsp my-first-policy -n my-app --type=merge \
-p '{"spec":{"updateStrategy":{"type":"Canary","canary":{"percentage":10}}}}'
This resizes only 10% of matching pods. Monitor:
kubectl attune status -w -n my-app
kubectl attune history -n my-app
The history command shows each resize with its result and reason. If a resize is reverted, the REASON column tells you why (oomkill, restart, notready, throttle).
Warning
If you see repeated reverts, increase the overhead or adjust bounds before proceeding. See troubleshooting.
Weeks 3-4: Full automation¶
After successful canary resizes with no reverts, promote to Auto:
kubectl patch rsp my-first-policy -n my-app --type=merge \
-p '{"spec":{"updateStrategy":{"type":"Auto"}}}'
Now the operator manages resources continuously. Check savings:
kubectl attune savings -A
The TOTAL row at the bottom shows aggregate cluster-wide savings.
Expanding to more workloads¶
Once the first policy has been running in Auto mode for a week, expand by creating policies for more workloads. Use AttuneDefaults to set org-wide defaults (overheads, bounds) so individual policies stay minimal.
Quick reference: what to run when¶
| When | Command | What you're checking |
|---|---|---|
| Just installed | kubectl attune status -w |
Operator picked up your policy |
| Waiting for data | kubectl attune status -w |
Progress percentage climbing |
| First recommendations | kubectl attune recommendations |
Values look reasonable |
| Understanding a recommendation | kubectl attune explain <policy> |
Full pipeline trace |
| After enabling Canary/Auto | kubectl attune history |
Resizes succeeding, no reverts |
| Monthly review | kubectl attune savings -A |
Cluster-wide savings total |