Server-Side Apply [page]deterministic
Kubernetes supports multiple appliers collaborating to manage the fields of a single [object](/docs/concepts/overview/working-with-objects/).
Server-Side Apply provides an optional mechanism for your cluster's control plane to track changes to an object's fields. At the level of a specific resource, Server-Side Apply records and tracks information about control over the fields of that object.
Server-Side Apply helps users and [controllers](#gloss:controller) manage their resources through declarative configuration. Clients can create and modify [objects](#gloss:object) declaratively by submitting their _fully specified intent_.
A fully specified intent is a partial object that only includes the fields and values for which the user has an opinion. That intent either creates a new object (using default values for unspecified fields), or is [combined](#merge-strategy), by the API server, with the existing object.
[Comparison with Client-Side Apply](#comparison-with-client-side-apply) explains how Server-Side Apply differs from the original, client-side `kubectl apply` implementation.
## Field management
The Kubernetes API server tracks _managed fields_ for all newly created objects.
When trying to apply an object, fields that have a different value and are owned by another [manager](#managers) will result in a [conflict](#conflicts). This is done in order to signal that the operation might undo another collaborator's changes. Writes to objects with managed fields can be forced, in which case the value of any conflicted field will be overridden, and the ownership will be transferred.
Whenever a field's value does change, ownership moves from its current manager to the manager making the change.
For a user to manage a field, in the Server-Side Apply sense, means that the user relies on and expects the value of the field not to change. The user who last made an assertion about the value of a field will be recorded as the current field manager. This can be done by changing the field manager details explicitly using HTTP `POST` (create), `PUT` (update), or non-apply `PATCH` (patch). You can also declare and record a field manager by including a value for that field in a Server-Side Apply operation.
A Server-Side Apply patch request requires the client to provide its identity as a [field manager](#managers). When using Server-Side Apply, trying to change a field that is controlled by a different manager results in a rejected request unless the client forces an override. For details of overrides, see [Conflicts](#conflicts).
When two or more appliers set a field to the same value, they share ownership of that field. Any subsequent attempt to change the value of the shared field, by any of the appliers, results in a conflict. Shared field owners may give up ownership of a field by making a Server-Side Apply patch request that doesn't include that field.
Field management details are stored in a `managedFields` field that is part of an object's [`metadata`](/docs/reference/kubernetes-api/common-definitions/object-meta/).
If you remove a field from a manifest and apply that manifest, Server-Side Apply checks if there are any other field managers that also own the field. If the field is not owned by any other field managers, it is either deleted from the live object or reset to its default value, if it has one. The same rule applies to associative list or map items.
Compared to the (legacy) [`kubectl.kubernetes.io/last-applied-configuration`](/docs/reference/labels-annotations-taints/#kubectl-kubernetes-io-last-applied-configuration) annotation managed by `kubectl`, Server-Side Apply uses a more declarative approach, that tracks a user's (or client's) field management, rather than a user's last applied state. As a side effect of using Server-Side Apply, information about which field manager manages each field in an object also becomes available.
### Example {#ssa-example-configmap}
A simple example o …(trimmed)