Pausing Reconciliation
On this page
When deploying a Package
, Package Operator automatically reconciles
all objects under it. Therefore, any changes made to the fields controlled
by Package Operator in the child objects will be reverted by the Package
Operator reconcilers.
To temporarily stop the reconciliation of these objects,
the .spec.paused
field has been introduced to the Package
and ObjectDeployment
APIs. When set to true
, all reconciliation
of the object and its children will be stopped (except for the .status
field).
1. Pausing Mechanism
The .spec.paused
field is propagated down the ownership chain.
Therefore, after pausing a Package
object, the underlying ObjectDeployment
is paused, then finally, the ObjectSet
is paused. As a consequence,
an ObjectDeployment
may be individually paused only when it is not
owned by a Package
object.
Even when paused, each object reflects its status properly. When the lowest
object in the Package Operator API chain is paused (i.e., the ObjectSet
),
the .status
field of the object is updated with the Paused
condition
set to true. This condition is then propagated up to the parent objects.
To unpause the reconciliation of a Package
or ObjectDeployment
, simply
set the .spec.paused
field to false
or remove it entirely.
2. Pausing via the CLI
To accommodate pausing the reconciliation of (Cluster)Package
objects without
the need for manual editing, the pause
and unpause
subcommands have been
added to the kubectl package
CLI.
The command modifies the .spec.paused
field and the waits for the object
to report the Paused
condition. It also allows the user to provide
a message (e.g., the reason for the pause)
which will be stored in the package-operator.run/pause-message
annotation.
Usage:
kubectl package pause <resource>/<name> [-n <namespace>] [-m <message>]
kubectl package unpause <resource>/<name> [-n <namespace>]