What's New in v0.1.25
v0.1.25 adds kubectl attune doctor so you can check Kubernetes 1.32+ and pods/resize before you wait on recommendations. Canary is per app: cooldown, CREATE sizing, startup boost, and HPA retune no longer lock every workload on the same policy. Helm chart 0.1.25 defaults to the bare SemVer image tag that this release publishes.
Highlights
- Run
kubectl attune doctorafter install to confirm the cluster can in-place resize. - Multi-app canary policies promote, cool down, and CREATE-size each app on its own clock.
kubectl attune doctor
- There was no preflight command to confirm the cluster can in-place resize.
kubectl attune doctorchecks the server version, discovery ofpods/resize, and GET/-/healthyon Prometheus addresses from policies and defaults. The ping runs on the machine that invoked kubectl, not inside the operator pod. In-cluster DNS (.svc/.cluster.local) is skipped. HTTP 401/403 on an address that setsbearerTokenSecretor headers is skipped, because doctor does not send the operator's credentials. Optional Prometheus failures printWARNand keep exit code 0 (#582, #583, #585, #589).
Canary isolation
-
Canary observation started before any pod was resized. The clock now starts on the first successful in-place canary resize. A revert clears that app's clock (#568).
-
One app's cooldown or canary slice locked every other app on the policy. Cooldown, CREATE initial sizing, startup boost, and HPA retune are per app. After a cooldown skip, the operator requeues when that stamp expires instead of waiting a full new cooldown. Selector-based policies fetch the owning Deployment, StatefulSet, or DaemonSet so CREATE isolation applies there too (#571, #572, #574, #575).
-
A request increase only compared this pod to node allocatable. The operator now subtracts other pods on the node before growing requests (#571).
-
ReplicaSet CREATE often has an empty pod name. Canary matching does not treat that empty name as a canary-slice identity. When CREATE has no assigned name, Info logs use
generateName. Verbosity 1 records the skip, including an emptypodfield (#587, #589).
GitOps pull requests
- After upgrading from 0.1.22, cooldown expiry opened another empty GitOps PR. When the last-attempt URL is set and the drift fingerprint annotation is empty, the operator adopts the current table instead of opening a duplicate. A failed API open (empty URL) still retries (#577, #580).
CLI CSV output
kubectl attune recommendations -o csvandsavings -o csvwrite a header plus one data row per policy or container. The recommendations last column isconfidence_or_status: a confidence percent when recommendations exist, otherwise the policy Ready reason (#581, #586).
Helm image tag
- Chart 0.1.24 prefixed
vontoappVersionwhenimage.tagwas empty. This release publishes bothv0.1.25and0.1.25. An emptyimage.tagnow uses bareappVersion(ghcr.io/attune-io/attune:0.1.25). An explicitimage.tagis left unchanged (#554).
Upgrade notes
- Upgrade the chart to 0.1.25, or set
image.tagto0.1.25orv0.1.25. - Pull
ghcr.io/attune-io/attune:v0.1.25orghcr.io/attune-io/attune:0.1.25. Both tags point at the same digest. - Chart 0.1.24 still defaults to
:v0.1.24. Chart 0.1.23 still needs--set image.tag=v0.1.23. - Run
kubectl attune doctorafter install to confirm Kubernetes 1.32+ andpods/resize. - Multi-app canary policies now promote per app. Check
status.canary.workloads[]for each app's phase and remaining cooldown.