> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/cd-k8s-ref/what-can-i-deploy-in-kubernetes.md).

# What can I deploy in Kubernetes?

Harness deployments involve different strategies and steps. These strategies and steps support different Kubernetes objects as managed and unmanaged workloads.

This topic describes the differences between Harness managed and unmanaged workloads and the objects supported by each deployment strategy.

### Managed and Unmanaged Workloads <a href="#managed-and-unmanaged-workloads" id="managed-and-unmanaged-workloads"></a>

In Harness, a **managed** Kubernetes workload is a Kubernetes object deployed and managed to steady state. If steady state is not reached, the deployment is considered a failure and the Failure Strategy is executed (typically rollback).

An unmanaged workload is a workload deployed separate from your primary workload, such as [Kubernetes Jobs](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/kubernetes-executions/run-kubernetes-jobs.md). Harness does not track these workload versions or perform rollback on them.

### Canary and Blue Green Strategies <a href="#canary-and-blue-green-strategies" id="canary-and-blue-green-strategies"></a>

Harness Canary and Blue Green steps support a single **Deployment**. You cannot deploy 0 or more than 1 **Deployment**.

### Rolling (Rollout) Strategy <a href="#rolling-rollout-strategy" id="rolling-rollout-strategy"></a>

Rolling strategy steps support Deployment, or DaemonSet as **managed** workloads, but not other workloads such as Jobs.

### Apply Step <a href="#apply-step" id="apply-step"></a>

The [Apply Step](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/kubernetes-executions/deploy-manifests-using-apply-step.md) can deploy any workloads or objects in any strategy as a managed workload. You can select whether or not to skip steady state check.

### OpenShift <a href="#openshift" id="openshift"></a>

Harness supports OpenShift [DeploymentConfig](https://docs.openshift.com/container-platform/4.1/applications/deployments/what-deployments-are.html) in OpenShift clusters as a managed workload across Canary, Blue Green, and Rolling deployment strategies. Use `apiVersion: apps.openshift.io/v1` and not `apiVersion: v1`.

### Deploy Unmanaged Workloads using Annotation <a href="#deploy-unmanaged-workloads-using-annotation" id="deploy-unmanaged-workloads-using-annotation"></a>

To deploy an object outside of the managed workloads in any strategy, you use the Harness [annotation](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/cd-k8s-ref/kubernetes-annotations-and-labels.md) to make it unmanaged: `harness.io/direct-apply: "true"|"false"`. Set to `true` to make a manifest an unmanaged workload.

For example, Harness Canary and Blue Green steps support a single **Deployment**, but you can deploy additional workloads as unmanaged using the `harness.io/direct-apply` annotation.

The following tables list the differences between the managed and unmanaged workloads for the different Kubernetes steps.

### Managed Workloads Table <a href="#managed-workloads-table" id="managed-workloads-table"></a>

In Harness, a **managed** Kubernetes workload is a Kubernetes object deployed and managed to steady state. If steady state is not reached, the deployment is considered a failure and the Failure Strategy is executed (typically rollback).

|                                                        | **Apply** | **Rolling** | **Rollback** | **Blue Green** | **Canary** | **Scale** |
| ------------------------------------------------------ | --------- | ----------- | ------------ | -------------- | ---------- | --------- |
| **Deployment**                                         | Yes       | Yes         | Yes          | Yes            |            |           |
| 1 Deployment allowed                                   | Yes       |             |              |                |            |           |
| 1 Deployment allowed                                   | Yes       |             |              |                |            |           |
| **DaemonSet**                                          | Yes       | Yes         | Yes          | No             | No         | Yes       |
| **HorizontalPodAutoscaler**                            | No        | No          | No           | Yes            |            |           |
| Behind the feature flag, `CDS_SUPPORT_HPA_AND_PDB_NG`. | Yes       |             |              |                |            |           |
| Behind the feature flag, `CDS_SUPPORT_HPA_AND_PDB_NG`. | No        |             |              |                |            |           |
| **PodDisruptionBudget**                                | No        | No          | No           | Yes            |            |           |
| Behind the feature flag, `CDS_SUPPORT_HPA_AND_PDB_NG`. | Yes       |             |              |                |            |           |
| Behind the feature flag, `CDS_SUPPORT_HPA_AND_PDB_NG`. | No        |             |              |                |            |           |
| **CRDs**                                               | Yes       | Yes         | Yes          | No             | No         | No        |
| **Any Object**                                         | Yes       | No          | No           | No             | No         | No        |

### Unmanaged Workloads Table <a href="#unmanaged-workloads-table" id="unmanaged-workloads-table"></a>

To deploy an object outside of the managed workloads in any strategy, you use the Harness [annotation](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/cd-k8s-ref/kubernetes-annotations-and-labels.md) to make it unmanaged: `harness.io/direct-apply: "true"|"false"`. Set to `true` to make a manifest an unmanaged workload.

For example, Harness Canary and Blue/Green steps support a single **Deployment** but you can deploy additional workloads as unmanaged using the `harness.io/direct-apply:true` annotation.

|                      | **Apply** | **Rolling** | **Rollback** | **Blue Green** | **Canary** | **Scale** |
| -------------------- | --------- | ----------- | ------------ | -------------- | ---------- | --------- |
| **Any Object**       | Yes       | Yes         | No           | Yes:           |            |           |
| 1 Deployment allowed | Yes:      |             |              |                |            |           |
| 1 Deployment allowed | No        |             |              |                |            |           |
