# Annotations and controller selection

Annotations are Kubernetes string values. Place them on the resource named below; a controller-selection annotation on a Pod is not equivalent to one on its ScaledObject.

Chart settings are listed in [Helm configuration](https://docs.kedify.io/reference/helm-values/); resource fields are listed in the [Kubernetes API catalog](https://docs.kedify.io/concepts/kedify-custom-resource-definitions/).

| Annotation / field | Resource and values | Effect / precedence |
| --- | --- | --- |
| `autoscaling.kedify.io/class` | ScaledObject; `"hpa"` or `"kpa"` | Overrides installation default. KEDA owns generated HPA/KPA transition. ScalingGroup membership requires HPA; see the fallback task. |
| `autoscaling.kedify.io/sync-period-seconds` | KPA-selected ScaledObject; integer string from `"1"` through `"3600"` | Cannot be below the configured KPA minimum (documented default 5 seconds). Without it, the controller-wide period applies (documented default 15 seconds). Distinct from KEDA polling/activation. |
| `prp.kedify.io/reconcile` | Target Pod/template; `"enabled"` | Opts into PRP when annotated pods are required. |
| `pra.kedify.io/reconcile` | Target Pod/template; `"enabled"` | Opts into PRA when its annotation requirement is enabled. PRA’s `spec.paused` is an API field, not an annotation. |
| `autoscaling.keda.sh/paused` | ScaledObject, ScaledJob; `"true"` | Pauses the applicable scaling controller under the versioned KEDA contract. On ScalingPolicy, pauses policy application rather than its targets directly. |
| `autoscaling.keda.sh/paused-replicas` | ScaledObject; integer string | Pins paused replica behavior under the selected KEDA version; account for workload capacity. |
| `keda.kedify.io/pause-resume-at` | Paused target; RFC3339 timestamp string | Resume at an absolute time, including timezone. |
| `keda.kedify.io/pause-resume-after` | Paused target; Go-duration string such as `"1h"` | Relative resume delay; controller resolves an absolute time. Not a stable repeated GitOps schedule. |
| `keda.kedify.io/paused-reason` | Paused target; text string | Context for maintenance; removed when resumed. |

## Controller selection example

```yaml
metadata:
  annotations:
    autoscaling.kedify.io/class: "kpa"
    autoscaling.kedify.io/sync-period-seconds: "15"
```

Use [select KPA](https://docs.kedify.io/features/kedify-pod-autoscaler/#select-kpa-for-a-scaledobject), [HPA rollback](https://docs.kedify.io/features/kedify-pod-autoscaler/#roll-back-to-hpa), and [ScalingGroup fallback](https://docs.kedify.io/features/kedify-pod-autoscaler/#scalinggroup-fallback) for the complete transition. Do not manually author a generated KPA.

## Maintenance example

```yaml
metadata:
  annotations:
    autoscaling.keda.sh/paused: "true"
    keda.kedify.io/pause-resume-after: "1h"
    keda.kedify.io/paused-reason: "Planned maintenance"
```

If both resume-at and resume-after are present, the documented controller uses the earlier time. Follow [pause and resume scaling](https://docs.kedify.io/features/resume-scaling/) to verify removal and recovery. A source owner that continually restores a pause annotation can defeat the intended resume; coordinate reconciliation ownership.

For [PRP setup](https://docs.kedify.io/features/pod-resource-profiles/#quick-start), add opt-in to the pod template when required so replacement pods inherit it. For PRA, use the [enablement task](https://docs.kedify.io/features/pod-resource-autoscaler/#enablement-and-pod-opt-in) and its API pause field.

Last updated: Sep 21, 2026

---
Canonical: https://docs.kedify.io/reference/annotations/
Source: src/content/docs/reference/annotations.md
Documentation index: https://docs.kedify.io/llms.txt
