:_mod-docs-content-type: ASSEMBLY
[id="what-deployments-are"]
= Understanding deployments
include::_attributes/common-attributes.adoc[]
:context: what-deployments-are

toc::[]

The `Deployment` and `DeploymentConfig` API objects in {product-title} provide two similar but different methods for fine-grained management over common user applications. They are composed of the following separate API objects:

* A `Deployment` or `DeploymentConfig` object, either of which describes the desired state of a particular component of the application as a pod template.
* `Deployment` objects involve one or more _replica sets_, which contain a point-in-time record of the state of a deployment as a pod template. Similarly, `DeploymentConfig` objects involve one or more _replication controllers_, which preceded replica sets.
* One or more pods, which represent an instance of a particular version of an application.

Use `Deployment` objects unless you need a specific feature or behavior provided by `DeploymentConfig` objects.

include::snippets/deployment-config-deprecated.adoc[]

////
Update when converted:
[role="_additional-resources"]
.Additional resources

xref:../../applications/deployments/advanced_deployment_strategies.adoc#graceful-termination[graceful shutdown]
xref:../../applications/basic_deployment_operations.adoc#triggers[Triggers]
xref:../../applications/deployment_strategies.adoc#strategies[strategies]
xref:../../applications/deployment_strategies.adoc#lifecycle-hooks[hooks]
xref:../../applications/basic_deployment_operations.adoc#rolling-back-a-deployment[rollbacks]
xref:../../applications/basic_deployment_operations.adoc#scaling[scaling]
xref:../../dev_guide/pod_autoscaling.adoc#dev-guide-pod-autoscaling[autoscaling]
////

[id="what-deployments-are-build-blocks"]
== Building blocks of a deployment

Deployments and deployment configs are enabled by the use of native Kubernetes API objects `ReplicaSet` and `ReplicationController`, respectively, as their building blocks.

Users do not have to manipulate replica sets, replication controllers, or pods owned by `Deployment` or `DeploymentConfig` objects. The deployment systems ensure changes are propagated appropriately.

[TIP]
====
If the existing deployment strategies are not suited for your use case and you must run manual steps during the lifecycle of your deployment, then you should consider creating a custom deployment strategy.
====

The following sections provide further details on these objects.

include::modules/deployments-replicasets.adoc[leveloffset=+2]
include::modules/deployments-replicationcontrollers.adoc[leveloffset=+2]

include::modules/deployments-kube-deployments.adoc[leveloffset=+1]
include::modules/deployments-deploymentconfigs.adoc[leveloffset=+1]

include::modules/deployments-comparing-deploymentconfigs.adoc[leveloffset=+1]
////
Update when converted:
[role="_additional-resources"]
.Additional resources

- xref:../../dev_guide/managing_images.adoc#dev-guide-managing-images[Imagestreams]
- xref:../../dev_guide/deployments/deployment_strategies.adoc#lifecycle-hooks[Lifecycle hooks]
- xref:../../dev_guide/deployments/deployment_strategies.adoc#custom-strategy[Custom deployment strategies]
////
