Highlights
A Job policy no longer treats a CronJob's scheduled Jobs as a second target.
When two workloads match the same pod, Attune keeps that pod on the workload that owns it.
Bug fixes
-
A Job policy also resized CronJob children. Selector discovery drops a Job whose owner is a CronJob. A policy that names that Job becomes Ready False with reason
WorkloadDiscoveryFailedand the messageJob <namespace>/<name> is owned by a CronJob; target the CronJob instead. A Job created withkubectl create job --fromstays a Job target, and new pods from it are not sized by the CronJob policy. That command setscronjob.kubernetes.io/instantiate: manual(#1113, #1122, #1124). -
Two workloads could count and resize the same pod. The pod stays on the workload that owns it. A Deployment or Rollout owns it through its ReplicaSet. A standalone ReplicaSet owns it when it is the controller. A CronJob owns it through the Job that controls the pod. If neither workload owns the pod, the name that sorts first keeps it (#1113, #1123, #1124).
-
Status and Datadog errors could split a character. Text cut at the length limit stops before a multi-byte character, and invalid bytes are dropped, so the stored message stays valid UTF-8 (#1110, #1122).
-
The fleet dashboard still said savings. Its titles now match the overview dashboard: CPU request gap, memory request gap, and estimated monthly request gap. The number is still the remaining request gap, not money already saved (#1124).
Upgrading
No CRD change. Existing policy YAML still applies. Upgrade the chart to 0.1.37, or set the image tag to 0.1.37 or v0.1.37. The image is built with Go 1.27.3.
A Job policy that selected CronJob children will stop listing those Jobs. Point that policy at the CronJob. kubectl create job --from=cronjob/... still creates a Job target.
Kubernetes support stays 1.32 and newer. On 1.33, an in-place memory limit decrease is still refused when the resize policy is NotRequired. Use RestartContainer or move to 1.34 or newer.
Guide: Upgrading.