Experimental: GPU/KAI-related fields in this resource are subject to breaking changes. When using them, set spec.experimental.gpuKaiContract: v1alpha1-2026-07.
ClusterAutomationStrategy defines how resizing is allowed to happen for cluster-scoped policy flows.
Use it when a platform team wants one reusable resize behavior that can be referenced by ClusterProactivePolicy and ClusterStaticPolicy across multiple namespaces.
For the namespaced variant, see Automation Strategies.
Reference Rules
ClusterProactivePolicyreferences aClusterAutomationStrategy.ClusterStaticPolicyreferences aClusterAutomationStrategy.- Helm can generate
ClusterAutomationStrategyresources frompolicy.policies, but these CRs can also be managed directly with manifests or GitOps.
Field Reference
ClusterAutomationStrategy.spec uses the same field structure and defaults as the namespaced AutomationStrategy:
Usage-level floor and ceiling values apply to all containers by default. Add containers.<name> under the same requests or limits block when a multi-container pod needs different bounds for specific containers.
VPA Filter Behavior
Two complementary VPA filters help avoid conflicts between Kubex automation and Vertical Pod Autoscalers:enableVpaFilter (default: true)
Filters actions when a VPA is actively managing the resource. This requires all of:- VPA
updateModeis notOff(i.e.,Auto,Recreate, orInitial) - VPA has an active recommendation with status
RecommendationProvided=True - The resource dimension (e.g.,
cpu.requests) appears in the VPA’scontainerRecommendations
blockResizeOnVpaControlledResources (default: false)
Filters actions for resources declared in a VPAresourcePolicy, regardless of whether the VPA is active. This check is only evaluated when enableVpaFilter=true. It checks only:
- The resource is listed in
resourcePolicy.containerPolicies[].controlledResources - The usage type (requests/limits) matches
controlledValues(defaults to both)
- VPA
updateMode(blocks even whenOff) - Recommendation status (blocks even when no recommendations exist)
- Whether VPA is actively applying changes
Comparison
Note:
blockResizeOnVpaControlledResources is ignored unless enableVpaFilter=true is enabled.
Scheduling Windows
spec.scheduling lets platform teams constrain when cluster-scoped proactive automation is allowed to execute.
inclusionWindowsdefine allowed times. If multiple inclusion windows are defined, they are evaluated with OR logic (automation is allowed if it matches ANY inclusion window). Inclusion windows may overlap.exclusionWindowsdefine blocked times and always override inclusion windows.- If neither list is set, scheduling does not restrict automation.
- If any inclusion window is defined, automation is allowed only while the current time matches at least one inclusion window.
startis inclusive andendis exclusive.- If
startorendare omitted, they default to00:00and24:00respectively, allowing for easy “all day” configuration. - Windows are evaluated in the window’s local IANA timezone specified in the
timezonefield. - Overnight windows are supported. For example,
22:00to06:00spans midnight.24:00is supported for exclusive end times.
Helm Mapping
The current chart can generateClusterAutomationStrategy resources from policy.policies, but it does not render scheduling fields from Helm values.
For scheduling-controlled cluster automation:
- Create or manage the
ClusterAutomationStrategymanifest directly. - Reference that strategy name from a Helm-managed or manually managed
ClusterProactivePolicy.
Ephemeral Storage
spec.enablement.ephemeralStorage uses the same fields as spec.enablement.memory, plus restartStrategy. Unlike memory, every storage change is off by default. Set upsize, downsize, or setFromUnspecified to true for the changes you want. Example that allows storage changes with a floor, keeps limits from shrinking, and sets a per-container ceiling:
restartStrategy: Evict to let Kubex restart the pod to apply them. See Proactive Policies for how to turn them on, how they are applied, and how to turn them off.
Guaranteed QoS Behavior
Whenspec.safetyChecks.retainGuaranteedQOS is enabled:
- The behavior applies only to pods that are currently in the Kubernetes
GuaranteedQoS class. - For CPU and memory, desired limits are treated as the source of truth.
- Request values are automatically set to match limit values so
requests == limitsremains true. - If a limit action exists but no request action exists, the controller can add a matching request action to preserve
GuaranteedQoS.
Guaranteed QoS.
Note: A pod is in the Guaranteed QoS class only when ALL containers have requests == limits for BOTH CPU and memory. If a container has CPU request=limit but memory request≠limit, the pod is Burstable, not Guaranteed, and this behavior does not activate.
Example
Notes
- Prefer cluster strategies when one platform-owned policy model should apply across many namespaces.
- Use namespaced
AutomationStrategyinstead when teams should own and evolve resize behavior independently inside their own namespaces. - For Helm-managed mappings and limits, see Policy Configuration.

