// Module included in the following assemblies:
//
// * extensions/ce/olmv1-configuring-extensions.adoc

:_mod-docs-content-type: CONCEPT
[id="olmv1-clusterobjectsets-deployment-mechanism_{context}"]
= ClusterObjectSets deployment mechanism

[role="_abstract"]
`ClusterObjectSets` deploy cluster extensions through ordered phases, enabling safe upgrades by maintaining both old and new revisions until the new version succeeds.

:FeatureName: {olmv1} ClusterObjectSets
include::snippets/technology-preview.adoc[]

`ClusterObjectSets` are cluster-scoped APIs representing versioned resource sets organized into ordered phases. {olmv1} uses `ClusterObjectSets` to deploy Operator resources sequentially.

[id="olmv1-clusterobjectsets-benefits_{context}"]
== Benefits

Phased rollouts:: Resources deploy in a defined order by kind. For example, Custom Resource Definitions (CRDs) are created before deployments that use them.

Safe upgrades:: Both old and new revisions remain active until the new version succeeds, mitigating service disruption.

Immutable revision records:: Immutable revisions provide a clear deployment record.

Large bundle support:: References externalized secrets to bypass the etcd 1.5 MiB size limit, enabling large bundle deployments.

[id="olmv1-clusterobjectsets-relationship_{context}"]
== Relationship to the deploymentConfig API

{olmv1} applies `deploymentConfig` settings during the `ClusterObjectSet` process, modifying Operator manifests before organizing them into phases.

[id="olmv1-clusterobjectsets-phases_{context}"]
== Deployment phases

Phases are system-determined groups that organize resources into ordered deployment stages based on their API group and kind. Objects are automatically assigned to well-known phases.

[NOTE]
====
All objects within a phase are applied in no particular order. The next phase begins only after all objects in the current phase pass their readiness probes.
====

The system assigns resources to the following phases in order:

`namespaces`:: `Namespace` objects.

`policies`:: `NetworkPolicy`, `PodDisruptionBudget`, and `PriorityClass` objects.

`identity`:: `ServiceAccount` objects.

`configuration`:: `Secret` and `ConfigMap` objects.

`storage`:: `PersistentVolume`, `PersistentVolumeClaim`, and `StorageClass` objects.

`crds`:: `CustomResourceDefinition` objects.

`roles`:: `ClusterRole` and `Role` objects.

`bindings`:: `ClusterRoleBinding` and `RoleBinding` objects.

`infrastructure`:: `Service`, `Issuer`, and `Certificate` objects.

`deploy`:: `Deployment` objects.

`scaling`:: `VerticalPodAutoscaler` objects.

`publish`:: `PrometheusRule`, `ServiceMonitor`, `PodMonitor`, `Ingress`, `Route`, and console resources.

`admission`:: `ValidatingWebhookConfiguration` and `MutatingWebhookConfiguration` objects.
