# Onboarding clusters programmatically

PerfectScale enables the dynamic provisioning of clusters with ease, requiring only a few simple steps. Additionally, it supports mass provisioning, making it efficient for larger deployments. In this case, PerfectScale Helm needs to be included in the set of provisioned workloads of the cluster.

1. To provision clusters dynamically, you need the **`clientId`** and **`clientSecret`.** \
   \
   Follow steps **1 - 4** of the [Onboarding a cluster](https://docs.perfectscale.io/getting-started/how-to-onboard-a-cluster) instructions to get your **`clientId`** and **`clientSecret`**.

{% hint style="info" %}
[**Onboarding the initial cluster via UI**](https://docs.perfectscale.io/getting-started/how-to-onboard-a-cluster) **is a mandatory step**. In this phase, you will be given the secrets (**`clientId`** and **`clientSecret`**) that can be reused to dynamically onboard clusters or efficiently provision multiple clusters for larger deployments.
{% endhint %}

<figure><img src="https://1573387604-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FABMqnYtsOO44JmQTVSnn%2Fuploads%2FWmwv9KHoEjOpzRBSA2nP%2Fimage.png?alt=media&#x26;token=76d5840c-178d-4021-b927-9393b2bc0aca" alt="Credentials" width="375"><figcaption><p>Credentials</p></figcaption></figure>

{% hint style="success" %}
If you have already installed the agent and need to recall the **clusterName**, **clientID**, and **clientSecret**, you can retrieve them using the following commands accordingly:

`kubectl -n perfectscale describe deployment perfectscale-exporter | grep CLUSTER_NAME`

`kubectl -n perfectscale get secret perfectscale-exporter-secret -o jsonpath="{.data.clientId}" | base64 --decode`\
\
`kubectl -n perfectscale get secret perfectscale-exporter-secret -o jsonpath="{.data.clientSecret}" | base64 --decode`
{% endhint %}

2. Add **PerfectScale Helm** from the following [link](https://perfectscale-io.github.io).
3. Set dynamic variables per the environment that will include the following values:

**`--set settings.clusterName=`** the name of your cluster. To prevent any confusion, it is recommended that unique values be utilized for the cluster name.

{% hint style="danger" %}
**`clusterName`**&#x69;s mandatory. PerfectScale Agent will not work if the cluster name is not provided.
{% endhint %}

4. Once the variables are identified, each cluster, provisioned with the **PerfectScale Agent,** will be automatically registered and transmit its data.

{% hint style="success" %}
If you have deleted the agent and want to reconnect the same cluster to PerfectScale, you can easily do so by using the same **`clusterName`**, **`clientID`**, and **`clientSecret`**.
{% endhint %}
