Skip to main content
Version: Next

Pause Application Reconciliation

Dependency

KubeVela will not reconcile an Application when you add the label. Reconciling will only resume after the label is removed.

metadata:
labels:
controller.core.oam.dev/pause: "true"

This is useful when you need to:

  • Perform manual operations on underlying resources (e.g., debug/triage in staging) without KubeVela reverting your changes.

  • Downscale or quiet non-critical services during weekends/off-hours.

  • Prevent State Keep (periodic re-apply) from overwriting temporary/manual changes while you investigate incidents.

Availability: controller.core.oam.dev/pause is supported in KubeVela v1.9+. Older releases (≤ v1.8) do not support this label.

How to Use

Pause reconciliation

kubectl label application <app-name> \
controller.core.oam.dev/pause=true -n <namespace> --overwrite

Resume reconciliation

# Remove the label
kubectl label application <app-name> controller.core.oam.dev/pause- -n <namespace>

Full YAML example

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: my-app
namespace: staging
labels:
controller.core.oam.dev/pause: "true"
spec:
components:
- name: web
type: webservice
properties:
image: ghcr.io/example/web:1.2.3
port: 8080

Expected Outcome

While the label is set to "true", the Application is ignored by the controller:

  • No reconcile loop for that Application

  • No State Keep (drift correction)

  • No garbage collection of Application-owned resources

When you remove the label (or set it to something other than "true"), the controller resumes reconciliation and brings actual state back in line with the Application spec.

Reminder: Because reconcile is paused, any manual edits you make can drift from the desired spec. They will be reconciled back once you resume.

Differences vs. other controls

ControlScopeReconcile / State-KeepTypical use case
controller.core.oam.dev/pause labelWhole ApplicationStoppedTemporary, explicit “hands-off” period for the entire app (e.g., staging triage, maintenance)
Workflow suspendWorkflow engine onlyContinuesPause an in-progress workflow step (e.g., manual approval) while still maintaining desired state
Workflow terminateWorkflow engine onlyStops workflow; be careful with driftAbort an executing workflow and later restart to re-run from the beginning
Policy: apply-onceSelected fields/resourcesRuns, but skips chosen fieldsLet other controllers (HPA/KEDA/Istio) mutate fields like spec.replicas without Vela fighting back
Policy: read-onlySelected resourcesRuns, does not update selected resourcesFreeze updates to specific resources while keeping the Application active

Best practices

  • Use labels intentionally: Add the pause label only when you need a hands-off window; remove it as soon as you’re done.

  • Audit & visibility: Label changes are regular Kubernetes metadata updates—monitor via Events/audit logs.

  • Staging first: Prefer pausing in staging or non-prod contexts. In production, consider safer alternatives (e.g., apply-once on replicas + KEDA/CronHPA) unless you fully understand the operational impact.

  • Multi-cluster: Pausing happens at the control plane (where the Application lives). No further changes will be pushed to registered target clusters while paused.