> 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/resilience-testing/chaos-engineering/use-chaos-engineering/infrastructure/types/ddcr/installation.md).

# Installation

Steps to install Harness Delegate and enable chaos.

This topic describes how you can install Harness Delegate and enable chaos on it. You can follow the interactive demo or the steps to install Harness Delegate.

{% hint style="info" %}
**DELEGATE IMAGE OPTIONS**

Harness provides two delegate image types:

* **Standard Delegate Image** (Recommended) - Includes all required binaries for chaos experimentation and discovery. Follow the standard installation steps below.
* **Delegate-Minimal Image** - Lightweight image that requires additional configuration. See [Using Delegate-Minimal Image](#using-delegate-minimal-image) if you specifically need to use the minimal image.
  {% endhint %}

### Standard Delegate Installation <a href="#standard-delegate-installation" id="standard-delegate-installation"></a>

This section covers the installation of the standard delegate image.

#### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* [Create an Environment](/resilience-testing/chaos-engineering/new-to-chaos-engineering/on-premise-vs-saas.md)

#### Interactive Demo <a href="#interactive-demo" id="interactive-demo"></a>

Navigate through the demo below to see how to create an environment, a new infrastructure, a new connector and a Delegate.

If you have created a connector and a Harness Delegate earlier, you can find their names in the list that is displayed while selecting the connector and Delegate, respectively. Select it instead of creating a new one.

{% embed url="<https://app.tango.us/app/embed/9c5307d6-ec41-4706-bacc-6dfdd84cde49>" %}

#### Step-by-Step Installation <a href="#step-by-step-installation" id="step-by-step-installation"></a>

1. Select the **Environment** you created, and choose the **Infrastructure type**. In this example, select **Kubernetes** and click **+ New Infrastructure**.
2. To use Harness Delegate, select **Yes**. To use a dedicated chaos infrastructure, select **No**. In this example, select **Yes**, and click **Next**.
3. Provide a **Name**, **Deployment Type**, **Select Infrastructure Type**, and provide **Cluster Details**, such as **Connector**, and **Namespace**.

   a. To create a new connector, go to [Create Kubernetes Connector](/harness-ai/use-harness-platform/connectors/cloud-providers/add-a-kubernetes-cluster-connector.md#add-a-kubernetes-cluster-connector). Harness CE supports creating two types of connectors:

   * [Kubernetes (Direct Connection)](/harness-ai/use-harness-platform/connectors/cloud-providers/add-a-kubernetes-cluster-connector/kubernetes-cluster-connector-settings-reference.md)
   * [GCP](/harness-ai/use-harness-platform/connectors/cloud-providers/connect-to-google-cloud-platform-gcp/gcs-connector-settings-reference.md)

   b. While creating a Kubernetes connector, select or [create a new Delegate](/harness-ai/use-harness-platform/delegates/delegate/install-delegates/overview.md#install-the-helm-chart). Once your Delegate shows up in the list, enter its name in the search bar, and select **Save and Continue**. This will test your connection and describe if it was a success or no. Contact [Harness Support](mailto:support@harness.io) if you encounter issues with the verification.
4. To **Enable Chaos** and use **Configure Advanced Settings (Optional)**, navigate to **Environments** and **Enable Chaos** on the infrastructure you created earlier.

   ![](https://2284173296-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlSkpbpeYJ3rfGUkIrcyQ%2Fuploads%2Fgit-blob-888a0f7e9bce249ec9d1e3b726ad58ba9cc67fdb%2Fenable-chaos.png?alt=media)
5. Choose between **Beginner** or **Expert** and click **Go**.

   ![](https://2284173296-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlSkpbpeYJ3rfGUkIrcyQ%2Fuploads%2Fgit-blob-1757fba944775f20e0829d73ca214ece156fa15d%2Fbeginner.png?alt=media)
6. You can choose to provide additional configurations in the **Configure Advanced Settings (Optional)** section to configure [chaos runner and Discovery Agent](/harness-ai/use-harness-platform/service-discovery/customize-agent.md) and click **Go**. This creates application maps and chaos experiments for you.

   ![](https://2284173296-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlSkpbpeYJ3rfGUkIrcyQ%2Fuploads%2Fgit-blob-8a78e4beeb16cb1c43cd6d63ae4ea5232d7fa558%2Fadvanced-settings.png?alt=media)

{% hint style="info" %}

* Ensure your Delegate version is `24.09.83900` or above to support executing chaos experiments using DDCR.
* Currently, DDCR (or Harness Delegate) can only be installed to execute Kubernetes-based faults. This means you can only create Kubernetes connectors.
* To execute faults on Linux and Windows, install Linux and Windows agents respectively.
* To configure mTLS with DDCR and Discovery Agent, go to [mTLS Support](/resilience-testing/chaos-engineering/use-chaos-engineering/infrastructure/types/ddcr/mtls-support.md).
* To configure mTLS with DDCR and Discovery Agent proxy settings, go to [proxy Support](/resilience-testing/chaos-engineering/use-chaos-engineering/infrastructure/types/ddcr/proxy-support.md).
  {% endhint %}

***

### Using Delegate-Minimal Image <a href="#using-delegate-minimal-image" id="using-delegate-minimal-image"></a>

{% hint style="warning" %}
**IMPORTANT**

The **standard delegate image** includes all required binaries for chaos experimentation and discovery out-of-the-box. Use the steps above for standard delegate installation.

If you are using the **delegate-minimal image**, additional setup is required as described below.
{% endhint %}

By default, chaos experimentation and discovery are **not supported** with the `delegate-minimal` image. The delegate-minimal image does not include `kubectl` and `go-template` binaries, which are required for discovery and chaos experimentation.

#### Prerequisites for Delegate-Minimal <a href="#prerequisites-for-delegate-minimal" id="prerequisites-for-delegate-minimal"></a>

If you are using a `delegate-minimal` image, you must install `kubectl` and `go-template` binaries using one of the following methods:

#### Option 1: Create a Custom Delegate Image <a href="#option-1-create-a-custom-delegate-image" id="option-1-create-a-custom-delegate-image"></a>

Create your own custom version of the `delegate-minimal` image with `kubectl` and `go-template` binaries pre-installed.

#### Option 2: Use INIT\_SCRIPT Environment Variable (Recommended) <a href="#option-2-use-initscript-environment-variable-recommended" id="option-2-use-initscript-environment-variable-recommended"></a>

Provide an installation script in the `INIT_SCRIPT` environment variable of the delegate deployment:

```yaml
- env:
  - name: INIT_SCRIPT
    value: |
      ##kubectl
      curl -L0 https://app.harness.io/public/shared/tools/kubectl/release/v1.28.7/bin/linux/amd64/kubectl -o kubectl
      chmod +x ./kubectl
      mv kubectl /usr/local/bin/
      ## go-template
      curl -L0 https://app.harness.io/public/shared/tools/go-template/release/v0.4.1/bin/linux/amd64/go-template -o go-template
      chmod +x ./go-template
      mv go-template /usr/local/bin/
```

<details>

<summary>View Complete Deployment Example</summary>

Below is a complete example of a delegate deployment using the minimal image with the `INIT_SCRIPT` configuration:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "12"
    meta.helm.sh/release-name: minimal-delegate
    meta.helm.sh/release-namespace: harness-delegate-ng
  creationTimestamp: "2025-12-24T14:59:12Z"
  generation: 14
  labels:
    app.kubernetes.io/instance: minimal-delegate
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: minimal-delegate
    harness.io/name: minimal-delegate
    helm.sh/chart: harness-delegate-ng-1.0.30
  name: minimal-delegate
  namespace: harness-delegate-ng
  resourceVersion: "1766592671187615000"
  uid: e722c89a-b32a-4967-b0d1-18b30875ec5a
spec:
  minReadySeconds: 120
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app.kubernetes.io/instance: minimal-delegate
      app.kubernetes.io/name: minimal-delegate
      harness.io/name: minimal-delegate
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      annotations:
        checksum/configmap: <checksum-value>
        checksum/secret: <checksum-value>
        prometheus.io/path: /api/metrics
        prometheus.io/port: "3460"
        prometheus.io/scrape: "true"
      creationTimestamp: null
      labels:
        app.kubernetes.io/instance: minimal-delegate
        app.kubernetes.io/name: minimal-delegate
        harness.io/name: minimal-delegate
    spec:
      containers:
      - env:
        - name: INIT_SCRIPT
          value: |
            ##kubectl
            curl -L0 https://app.harness.io/public/shared/tools/kubectl/release/v1.28.7/bin/linux/amd64/kubectl -o kubectl
            chmod +x ./kubectl
            mv kubectl /usr/local/bin/
            ## go-template
            curl -L0 https://app.harness.io/public/shared/tools/go-template/release/v0.4.1/bin/linux/amd64/go-template -o go-template
            chmod +x ./go-template
            mv go-template /usr/local/bin/
        envFrom:
        - configMapRef:
            name: minimal-delegate
        - secretRef:
            name: minimal-delegate
        - configMapRef:
            name: minimal-delegate-proxy
            optional: true
        - secretRef:
            name: minimal-delegate-proxy
            optional: true
        - configMapRef:
            name: minimal-delegate-shared-certificates
            optional: true
        image: us-docker.pkg.dev/gar-prod-setup/harness-public/harness/delegate:25.08.86602.minimal
        imagePullPolicy: Always
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /api/health
            port: 3460
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 20
          successThreshold: 1
          timeoutSeconds: 1
        name: delegate
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 3460
          name: api
          protocol: TCP
        resources: {}
        securityContext:
          allowPrivilegeEscalation: false
          runAsUser: 0
        startupProbe:
          failureThreshold: 40
          httpGet:
            path: /api/health
            port: 3460
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext:
        fsGroup: 1001
      serviceAccount: minimal-delegate
      serviceAccountName: minimal-delegate
      terminationGracePeriodSeconds: 600
```

</details>

***

### Harness Terraform Provider <a href="#harness-terraform-provider" id="harness-terraform-provider"></a>

Go to [create Harness Delegate (DDCR)](https://registry.terraform.io/providers/harness/harness/latest/docs/resources/chaos_infrastructure) to create a Harness Delegate using [Harness Terraform provider](/harness-ai/use-harness-platform/automation/terraform-provider/harness-terraform-provider-overview.md).

### Next Steps <a href="#next-steps" id="next-steps"></a>

* [Deploy Delegate on a Cluster](/resilience-testing/chaos-engineering/use-chaos-engineering/infrastructure/types/ddcr/dedicated-delegate.md)
* [Use mTLS with Delegate](/resilience-testing/chaos-engineering/use-chaos-engineering/infrastructure/types/ddcr/mtls-support.md)

{% @harness-feedback/feedback %}
