Skip to main content

Automate delegate installation

You can automate delegate installation and registration by duplicating the downloaded delegate configuration file, renaming the delegate, and applying the new file. You can script this process to duplicate delegates as needed.

When you apply the new delegate file, the delegate registers with Harness under the new name.

important

Delegate names in an account must be unique. You cannot use the same delegate name in an account that you use in an organization or project. Delegates with the same name in an account and an organization or project will start but will not register.

This topic describes the process used to duplicate, rename, and register a new delegate. You will likely want to script this process.

note

You might need additional permissions to execute commands in delegate scripts and create Harness users.

Review: Automation and high availability (HA)

HA does not require delegate automation. Automation can be useful, however, when multiple delegates are required to perform concurrent tasks, or depending on the compute resources you assign to delegates. A rule of thumb is one delegate for every 300 to 500 service instances.

In addition to compute considerations, you can implement HA for delegates. This means installing multiple delegates in your environment.

For example, in Kubernetes deployments, you can set up two delegates, each in its own pod in the same target Kubernetes cluster. To do so, edit the Kubernetes delegate spec you download from Harness to provide multiple replica pods.

...  
apiVersion: apps/v1beta1
kind: Deployment
metadata:
labels:
harness.io/app: harness-delegate
harness.io/account: xxxx
harness.io/name: test
name: test-zeaakf
namespace: harness-delegate
spec:
replicas: 2
selector:
matchLabels:
harness.io/app: harness-delegate
...

In this example, the spec section of the harness-kubernetes.yaml file was changed to provide two replica pods. HA is provided without automation.

A Kubernetes cluster requires only one delegate. To create HA in the cluster, you can increase the number of delegate replica pods. Do not add another delegate to the cluster.

If you want to install Kubernetes delegates in separate clusters, do not use the same harness-kubernetes.yaml and name for both delegates. Download a new Kubernetes YAML spec from Harness for each delegate you want to install. This prevents name conflicts.

In every case, the delegates must be identical in terms of permissions, keys, connectivity, and so on. With two or more delegates running in the same target environment, HA is provided by default. The failure of a single delegate does not stop Harness from performing deployments. For greater availability, increase the number of replica pods to run three delegates in case you lose two, and so on.

Limitations

  • Two delegates in different locations do not support HA. For example, if you have one delegate in a development environment and another in a production environment, the development delegate does not communicate with the production delegate. The reverse is also true. If the one delegate deployed to an environment stops running, Harness ceases operation in that environment.

Step 1: Duplicate the delegate configuration file

Duplicate the configuration file for a delegate that is installed and registered with your Harness account.

Ensure that the delegate environment variables are set correctly.

The delegate configuration file contains environment variables for account, organization, and project. The account variable is set to your Harness account ID.

If your delegate is registered at the account level, the Organization and Project variables will be empty. If your delegate is registered at the Organization level, the Project variable will be empty.

Before you duplicate the file, review the list of environment variables in the delegate spec to ensure they are appropriate for the second delegate. For more information, go to Delegate environment variables.

Step 2: Rename the new delegate

The process that is used to rename a delegate depends on its type.

Rename the Kubernetes delegate

To change the name of a Kubernetes delegate, modify the following fields:

  • Secret.metadata.name
  • Deployment.metadata.labels.harness.io/name
  • Deployment.metadata.name
  • Deployment.spec.selector.matchLabels.harness.io/name
  • Deployment.spec.template.metadata.labels.harness.io/name
  • Deployment.spec.containers.envFrom.secretRef
  • Deployment.metadata.spec.template.spec.env.name: DELEGATE_NAME
  • Service.metadata.selector.harness.io/name
  • CronJob.metadata.labels.harness.io/name
  • CronJob.metadata.name

The DELEGATE_NAME environment variable is specified as a YAML list item:

...  
- name: DELEGATE_NAME
value: string
...

Rename the Docker delegate

To change the name of a Docker delegate, set the DELEGATE_NAME environment variable to the new name:

...  
- DELEGATE_NAME = my-new-delegate
...

Step 3: Install the new delegate

After you update the delegate names, you can apply the configuration file. The delegate installs and registers with Harness.

See also