Quick Links
Global Configuration
GlobalConfiguration controls cluster-wide behavior:
- recommendation refresh cadence
- rescan cadence
- webhook probe health thresholds
- protected namespace patterns
- global automation enablement
Pause Controls
Use pause annotations to control when and how automation applies to your workloads.Overview
There are two types of pause controls with different behaviors:
Key difference:
pause-until is an emergency stop for the entire pod. skip-containers is a surgical filter for individual containers.
pause-until - Block Entire Pod
Use pause-until to completely stop all automation for a pod.
Supported values:
- RFC3339 timestamp (e.g.,
2026-04-01T00:00:00Z) - pauses until that time infinite- pauses indefinitely
- Pod template (in Deployment, StatefulSet, etc.)
- Namespace (blocks all pods in that namespace)
- Blocks both webhook mutations and controller-side proactive execution for the entire pod
- Time-based pauses automatically resume after expiration
- Namespace pauses affect all pods in that namespace, even if the pod itself has no annotation
pause-reasonis optional but recommended for clarity in logs and events
skip-containers - Skip Specific Containers
Use skip-containers to prevent automation for specific containers while allowing other containers in the same pod to be resized.
Format: Comma-separated list of container names (e.g., "app,sidecar")
Where you can set it:
- Pod template (in Deployment, StatefulSet, etc.)
- Workload owner (Deployment, StatefulSet, etc.)
- NOT supported on Namespace
- Only removes actions for the named containers
- Other containers in the same pod continue to be resized normally
- Works with both webhook mutations and controller-side proactive execution
- Does not block the entire pod - only filters specific container actions
How They Work Together
If both annotations are present,pause-until takes precedence because it’s evaluated first:
skip-containers annotation is ignored.
If only skip-containers is present:
app and sidecar containers are removed. Other containers are still resized.
Resolution Rules
pause-until Resolution
- Namespace-level pause - Blocks all pods in the namespace
- Pod-level pause - Blocks that specific pod
- Owner-level pause (Deployment, etc.) - Controller copies to owned pods and tracks inheritance
- If a pod has
pause-until, it uses that value (even if namespace or owner also has it) - If the annotation was inherited from an owner, the controller manages its lifecycle and can remove it later
- If you manually set
pause-untildirectly on a pod (not via owner), the controller treats it as user-managed and won’t remove it
skip-containers Resolution
The controller uses this priority order to determine which containers to skip:
1. Pod annotation (if present) - Always wins
The behavior depends on whether the annotation exists and its value:
- Pod has
skip-containers: "app,sidecar"→ Skip those containers (uses pod value) - Pod has
skip-containers: ""(empty string) → Skip NO containers and stop looking (explicit override) - Pod has no
skip-containersannotation → Continue to step 2 (check owners)
skip-containers annotation at all, the controller checks workload owners (Deployment, StatefulSet, etc.):
- First owner with a non-empty value wins
- Owners with empty values (
skip-containers: "") are ignored and the search continues - No merging across multiple owners
- Missing annotation on pod = “I don’t care, check my owner”
- Empty annotation on pod (
skip-containers: "") = “I explicitly want to skip nothing, don’t check my owner” - Empty annotation on owner (
skip-containers: "") = “Ignore this owner, keep searching for another owner”
skip-containersis resolved at evaluation time - it’s not copied to pods- New pods do not inherit
skip-containers- it’s looked up each time from pod or owner - Namespace-level
skip-containersis not supported
Examples
Example 1: Multi-container pod with selective skipskip-containers: "" (empty but present), all containers would still be resized, but for a different reason - the pod explicitly says “skip nothing” and blocks owner fallback.
Example 4: Combined pause and skip (pause wins)
Troubleshooting
Where annotations appear in summaries:pause-untilfailures →rightsizing summary.failedCheckswith namepause-activeskip-containersfilters →rightsizing summary.appliedFilterswith namecontainer-skip-active
Understanding Pod Automation Constraints
rightsizing.kubex.ai/automation-constraints explains why Kubex could not apply all or part of a rightsizing recommendation to a Pod. Check this annotation on the Pod when an expected resize does not happen.
Each entry includes:
reason: short explanation of what prevented automation, such ashpa-resource-managedornamespace-protectedtargets: containers and resources affected by that reason
container: container nameresource:cpuormemoryusage: whether the recommendation concernsrequestsorlimits
app container’s CPU requests because an HPA manages that resource:
targets list means the reason applies to the whole Pod, rather than a specific container or resource. For example, a protected namespace prevents automation for the entire Pod:
Safety Controls
Use Safety Controls for the detailed reference of runtime pre-checks, action filters, evaluation order, and interpretation offailedChecks and appliedFilters.
Execution Paths
The controller uses this execution order:- Build a candidate plan from the selected recommendation and policy.
- Apply strategy enablement rules.
- Apply safety checks and filters.
- Execute in-place resize if enabled and supported.
- Fall back to eviction if allowed.
Backward Compatibility and Migration
Existingdeployment.controllerEnv values continue to work for supported settings. The chart maps them into GlobalConfiguration fields where possible, so upgrades do not require an immediate rewrite of your values file.
Typical migration path:
- Keep existing values and upgrade the chart.
- Verify generated
GlobalConfigurationand any Helm-managed CRs. - Move environment-variable-based settings into
globalConfiguration,scope, andpolicy.policies. - Adopt manual CRs only when you need the full CRD surface area.

