# Install Dapr Ops Dashboard on ARM-based clusters

Dapr Ops Dashboard is compatible with ARM-based Kubernetes clusters, and in most cases, the Dapr Ops Dashboard agent should work out of the box at installation time. However, some managed platform providers and ops teams make use of taints and have a mix of ARM and x86 nodes, which can potentially impact the successful deployment of the agent.

In these cases, tolerations and potentially node selectors will need to be configured on the Dapr Ops Dashboard agent and Dapr control plane to allow for successful cluster scheduling.

:::note Enterprise-only

Installing on ARM-based clusters is specific to the Dapr Ops Dashboard Enterprise plan

:::

## ARM Tolerations

In some cases, i.e. in the case of Google Kubernetes Engine (GKE), ARM nodes are [tainted](https://cloud.google.com/kubernetes-engine/docs/how-to/prepare-arm-workloads-for-deployment) with `kubernetes.io/arch=arm64:NoSchedule` which prevents the Dapr Ops Dashboard and Dapr control plane resources from being successfully scheduled.

In order to compensate for this taint, the below tolerations should be added to the `diagrid-agent` Deployment, the `diagrid-agent-logs-collector` DaemonSet and the Dapr control plane resources.

1. Add the following toleration to both the Agent Deployment and Logs Collector Daemonset in the agent advanced configuration section of the related cluster connection.

```yaml
tolerations:
  - key: "kubernetes.io/arch"
    operator: "Equal"
    value: "arm64"
    effect: "NoSchedule"
```

![arm toleration](https://docs.diagrid.io/img/conductor/agent-arm-toleration.png)

For the Dapr control plane resources, add the tolerations to the Helm arguments in the global section as follows.

```yaml
global:
  tolerations:
    - key: "kubernetes.io/arch"
      operator: "Equal"
      value: "arm64"
      effect: "NoSchedule"
```

![dapr toleration](https://docs.diagrid.io/img/conductor/dapr-toleration-arm.png)

## Node selectors for ARM nodes

If your cluster has a mix of ARM and x86 nodes, and you want the Dapr Ops Dashboard and Dapr control plane resources to only be scheduled on nodes of a particular architecture, you need to add node selectors to them. This is common on Azure Kubernetes Service (AKS) among other cloud providers.

In most cases Kubernetes nodes are labeled with [well known labels](https://kubernetes.io/docs/reference/labels-annotations-taints/). For architecture type, use the `kubernetes.io/arch` label and set it `amd64` for x86 64-bit nodes and `arm64` for ARM 64-bit nodes. Use this label to add node selectors to the Dapr Ops Dashboard and Dapr control plane resources, to force them to run on a particular node type.

In the Dapr Ops Dashboard UI, use the `Advanced Agent Configuration` section to add the following node selector for both the Agent Deployment and Logs Collector Daemonset.

```yaml
nodeSelector:
  kubernetes.io/arch: arm64
```

For the Dapr control plane resources, add the node selector to the Helm arguments in the global section as follows.

```yaml
global:
  nodeSelector:
    kubernetes.io/arch: arm64
```

> Note: Be sure to check with your Platform/DevOps team and read the documentation from your cloud provider for any other steps needed to deploy workloads on ARM-based clusters.
