This documentation is for not yet released version of kapp. For the documentation of the latest release version, see the latest version.
Apply stage
Overview ¶
Once change set is calculated (see Diff section for details), kapp asks for user confirmation (unless --yes flag is specified) to proceed with changes.
Changes are applied in particular order as described in Apply ordering.
All created resources are labeled with several labels:
kapp.k14s.io/appto track which application “owns” resourcekapp.k14s.io/identityto identify preferred API version used when creating resourcekapp.k14s.io/associationto track (best effort) parent-child relationships between resources
Every time application is deployed, new application change record is saved. They can be viewed via kapp app-change ls -a app-name.
Related: ownership label rules and label scoping rules.
Controlling apply via resource annotations ¶
kapp.k14s.io/create-strategy ¶
kapp.k14s.io/create-strategy annotation controls create behaviour (rarely necessary)
Possible values: "" (default), fallback-on-update, fallback-on-update-or-noop.
In some cases creation of a resource may conflict with that resource being created in the cluster by other means (often automated). An example of that is creation of default ServiceAccount by kapp racing with Kubernetes service accounts controller doing the same thing. By specifying fallback-on-update value, kapp will catch resource creation conflicts and apply resource as an update.
fallback-on-update-or-noop (Available in v0.47.0+) also allows to use noop operation if kapp.k14.io/noop is added through rebase rules, else it behaves the same way as fallback-on-update.
kapp.k14s.io/update-strategy ¶
kapp.k14s.io/update-strategy annotation controls update behaviour
Possible values: "" (default), fallback-on-replace, always-replace, skip.
In some cases entire resources or subset resource fields are immutable which forces kapp users to specify how to apply wanted update.
- "" means to issue plain update call
fallback-on-replacecauses kapp to fallback to resource replacement if update call results inInvaliderror. Note that if resource is replaced (= delete + create), it may be negatively affected (loss of persistent data, loss of availability, etc.). For example, if Deployment or DaemonSet is first deleted and then created then associated Pods will be recreated as well, but all at the same time (even if rolling update is enabled), which likely causes an availability gap.always-replacecauses kapp to always delete and then create resource (See note above as well.)skipcauses kapp to not apply update (it will show up in a diff next time). Available in v0.33.0+.
There is also a CLI-wide flag --apply-default-update-strategy. If set, it will be used as a default value for all resources that do not have kapp.k14s.io/update-strategy annotation set. If used, consider explicitly annotating individual resources that should not be replaced with "" or "skip".
kapp.k14s.io/delete-strategy ¶
kapp.k14s.io/delete-strategy annotation controls deletion behaviour
Possible values: "" (default), orphan.
By default resource is deleted, however; choosing orphan value will make kapp forget about this resource. Note that if this resource is owned by a different resource that’s being deleted, it might still get deleted. Orphaned resources are labeled with kapp.k14s.io/orphaned label. As of v0.31.0+, resource is also disassociated from owning app so that it can be owned by future apps.
kapp.k14s.io/owned-for-deletion ¶
kapp.k14s.io/owned-for-deletion annotation controls resource deletion during kapp delete command
Possible values: “”.
By default non-kapp owned resources are not explicitly deleted by kapp, but expected to be deleted by the cluster (for example Endpoints resource for each Service). In some cases it’s desired to annotate non-kapp owned resource so that it does get explicitly deleted, possibly because cluster does not plan to delete it (e.g. PVCs created by StatefulSet are not deleted by StatefulSet controller; https://github.com/carvel-dev/kapp/issues/36).
kapp.k14s.io/nonce ¶
kapp.k14s.io/nonce annotation allows to inject unique ID
Possible values: "" (default).
Annotation value will be replaced with a unique ID on each deploy. This allows to force resource update as value changes every time.
kapp.k14s.io/renew-duration ¶
Available in v0.54.0+
kapp.k14s.io/renew-duration annotation allows specifying an interval which facilitates kapp to update or recreate the resource during next kapp deploy if this duration has lapsed.
Possible values: ParseDuration.
If kapp deploy is run after this interval has lapsed, kapp will force an update irrespective of no changes to the resource’s configuration by injecting an annotation with the current timestamp (kapp.k14s.io/last-renewed-time=<current-time>) to the resource.
Note: For precise results use versioned resources or always-replace update strategy for non-versioned resources.
This annotation is helpful in scenario when you want a resource (like secret) get updated/recreated automatically irrespective of no changes to the resource’s configuration at predetermined intervals.
kapp.k14s.io/deploy-logs ¶
kapp.k14s.io/deploy-logs annotation indicates which Pods’ log output to show during deploy
Possible values:
- "" (default; equivalent to
for-new) for-new(only newly created Pods are tailed)for-existing(only existing Pods are tailed)for-new-or-existing(both newly created and existing Pods are tailed)
Especially useful when added to Jobs. For example, see examples/resource-ordering/sync-check.yml
kapp.k14s.io/deploy-logs-container-names ¶
kapp.k14s.io/deploy-logs-container-names annotation indicates which containers’ log output to show during deploy
Possible values: "" (default), containerName1, containerName1,containerName2
kapp.k14s.io/exists ¶
Available in v0.43.0+
kapp.k14s.io/exists verifies that the resource exists in Kubernetes. Kapp does not consider the resource a part of the app (not labeled).
If the resource is not present, then kapp uses the exists operation and asserts that the resource exists in Kubernetes.
If the resource already exists, kapp does not perform any operation on it (using the noop operation).
Possible values: “”.
Especially useful in scenarios where an external agency such as a controller might be creating a resource that we want to wait for.
kapp.k14s.io/noop ¶
Available in v0.43.0+
kapp.k14s.io/noop ensures that kapp is aware of the resource. It will not be considered to be part of the app (not labeled).
kapp always uses the noop operation for these resources.
Possible values: “”.
Controlling apply via deploy flags ¶
--apply-ignored=boolexplicitly applies ignored changes; this is useful in cases when controllers lose track of some resources instead of for example deleting them--apply-default-update-strategy=stringcontrols default strategy for all resources (seekapp.k14s.io/update-strategyannotation above)--apply-exit-status=bool(defaultfalse) controls exit status (0: unused,1: any error,2: no changes applied,3: at least one change applied)--wait=bool(defaulttrue) controls whether kapp will wait for resource to “stabilize”. See Apply waiting--wait-ignored=boolcontrols whether kapp will wait for ignored changes (regardless whether they were initiated by kapp or by controllers)--logs=bool(defaulttrue) controls whether to show logs as part of deploy output for Pods annotated withkapp.k14s.io/deploy-logs: ""--logs-all=bool(deafultfalse) controls whether to show all logs as part of deploy output for all Pods
(Help improve our docs: edit this page on GitHub)
#carvel in Kubernetes Slack