> 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?

Differences between managed and unmanaged Kubernetes workloads by deployment strategy

{% hint style="success" %}
This feature is in Limited GA and requires enablement. [View all early access features.](/release-notes/features.md)

{% @harness-feature-flag-access/request-feature-flag-access module="continuous-delivery" pagePath="continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/cd-k8s-ref/what-can-i-deploy-in-kubernetes" featureFlags="%5B%7B%22name%22%3A%22HPA%20and%20PDB%20support%20in%20Kubernetes%20deployments%22%2C%22key%22%3A%22CDS\_SUPPORT\_HPA\_AND\_PDB\_NG%22%2C%22status%22%3A%22LIMITED\_GA%22%2C%22description%22%3A%22Enables%20HorizontalPodAutoscaler%20and%20PodDisruptionBudget%20support%20for%20Kubernetes%20deployment%20steps%20that%20list%20this%20capability%20behind%20the%20flag.%22%7D%5D" %}
{% endhint %}

Harness deployments use different strategies and steps. Those 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 each deployment strategy supports.

***

## What you will learn from this topic

* How to distinguish [managed and unmanaged workloads](#managed-and-unmanaged-workloads)
* How [Canary, Blue Green, Rolling, and Apply](#canary-and-blue-green-strategies) steps treat supported objects
* How to deploy additional objects as unmanaged with the [`harness.io/direct-apply` annotation](#deploy-unmanaged-workloads-using-annotation)
* How to read the [managed](#managed-workloads-table) and [unmanaged](#unmanaged-workloads-table) workload support tables

***

## Managed and unmanaged workloads

In Harness, a **managed** Kubernetes workload is a Kubernetes object that Harness deploys and manages to steady state. If steady state is not reached, the deployment fails and the Failure Strategy runs (typically rollback).

An unmanaged workload is deployed separately 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 roll them back.

***

## Canary and Blue Green strategies

Harness Canary and Blue Green steps support a single **Deployment**. You cannot deploy zero Deployments or more than one **Deployment** as the managed workload for those steps.

***

## Rolling (Rollout) strategy

Rolling strategy steps support Deployment or DaemonSet as **managed** workloads. Other workloads such as Jobs are not managed by the Rolling step.

***

## Apply step

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 workload or object in any strategy as a managed workload. You can choose whether to skip the steady state check.

***

## OpenShift

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

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

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

The following tables summarize managed and unmanaged workload support for the Kubernetes steps.

***

## Managed workloads table

In Harness, a **managed** Kubernetes workload is a Kubernetes object that Harness deploys and manages to steady state. If steady state is not reached, the deployment fails and the Failure Strategy runs (typically rollback).

{% hint style="warning" %}
**HorizontalPodAutoscaler and PodDisruptionBudget**

Support for HorizontalPodAutoscaler and PodDisruptionBudget depends on the feature flag `CDS_SUPPORT_HPA_AND_PDB_NG`. Confirm availability with Harness Support if the objects do not appear as expected in your account.
{% endhint %}

The following table lists managed workload support by step. Blank cells mean the previous matrix did not record a clear Yes or No for that combination.

| Object                  | Apply              | Rolling            | Rollback           | Blue Green         | Canary             | Scale |
| ----------------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ----- |
| Deployment              | Yes                | Yes                | Yes                | Yes (1 Deployment) | Yes (1 Deployment) |       |
| DaemonSet               | Yes                | Yes                | Yes                | No                 | No                 | Yes   |
| HorizontalPodAutoscaler | No (see flag note) | No (see flag note) | No (see flag note) | Yes                |                    |       |
| PodDisruptionBudget     | No (see flag note) | No (see flag note) | No (see flag note) | Yes                |                    |       |
| CRDs                    | Yes                | Yes                | Yes                | No                 | No                 | No    |
| Any object              | Yes                | No                 | No                 | No                 | No                 | No    |

***

## Unmanaged workloads table

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

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

The following table lists unmanaged workload support by step. Blank cells mean the previous matrix did not record a clear Yes or No for that combination.

| Object                                              | Apply | Rolling | Rollback | Blue Green                                  | Canary | Scale |
| --------------------------------------------------- | ----- | ------- | -------- | ------------------------------------------- | ------ | ----- |
| Any object (with `harness.io/direct-apply: "true"`) | Yes   | Yes     | No       | Yes (still limited to 1 managed Deployment) |        |       |

***

## Next steps

* [Kubernetes annotations and labels](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/cd-k8s-ref/kubernetes-annotations-and-labels.md): Review annotations that control how Harness treats manifests.
* [Deploy manifests separately using the Apply step](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/kubernetes-executions/deploy-manifests-using-apply-step.md): Apply ignored or additional manifests outside the primary rollout.
* [Run Kubernetes Jobs](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/kubernetes/kubernetes-executions/run-kubernetes-jobs.md): Deploy Jobs as unmanaged workloads.

{% @harness-feedback/feedback %}
