# Installation Guide

Install Dapr Ops Dashboard on your Kubernetes clusters using the method that best fits your workflow. Choose from console-based creation, CLI automation, or Helm charts for GitOps environments.

---

## Installation options

- Console (Recommended)
- Diagrid CLI
- Helm (Enterprise)

---

## Prerequisites

- Read the [Prerequisites](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/getting-started/prerequisites#deployment-checklist) deployment checklist
- Installation tool: Console, [Diagrid CLI](https://docs.diagrid.io/references/conductor/conductor-cli-intro), or [Helm 3.x](https://helm.sh/docs/intro/install/)
- Review custom configuration options for the Dapr Ops Dashboard agent and Dapr control plane in the [Configuration Guide](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/configuration-guide)

---

## Console installation

The fastest way to get started with Dapr Ops Dashboard using the web console.

**1. Login and create cluster connection**

1. Navigate to [Dapr Ops Dashboard console](https://diagrid.ws/conductor)
2. Log in with your account credentials
3. Click **"Connect Cluster"** or **"Create Cluster Connection"**

**2. Configure Cluster Settings**

**Local/Dev**

**Cluster Settings:**

- **Name:** Choose a descriptive name (e.g., `dev-local`)
- **Distribution:** Select `Other`
- **Cluster Type:** Non production

**Options:**

- ✅ **Install prerequisites** (metrics server)
- ✅ **Install Dapr** (latest version recommended)

**Managed (EKS/AKS/GKE)**

**Cluster Settings:**

- **Name:** Use environment naming (e.g., `prod-us-east-1`)
- **Distribution:** Select your provider (EKS, AKS, GKE, etc.)
- **Cluster Type:** Production

**Options:**

- ⬜ **Install prerequisites** (usually pre-installed)
- ✅ **Install Dapr** (or skip if already installed)
- **Dapr Version:** Choose specific version

**On-Premises**

**Cluster Settings:**

- **Name:** Use datacenter/region naming
- **Distribution:** Other or OpenShift
- **Cluster Type:** Production

**Options:**

- ✅ **Install prerequisites** (check cluster first)
- ✅ **Install Dapr** (choose specific version)
- Consider [custom images](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/byo-container-images) for air-gapped environments

**3. Advanced Configuration**

<details>
  <summary><b>Dapr configuration</b></summary>

  Customize Dapr control plane:

  - **Dapr Ops Dashboard management**: Manage and sync the Dapr installation, reconciling all changes made outside of the tool
  - **High Availability:** Enable HA mode for production
  - **mTLS:** Certificate validity and rotation settings

  See [Dapr Configuration](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/configuration-guide#dapr-control-plane-configuration) for details.
</details>

<details>
  <summary><b>Agent configuration</b></summary>

  Configure Dapr Ops Dashboard agent deployment:

  - **Auto-upgrade:** Enable to keep the agent up-to-date
  - **Resource Limits:** CPU and memory limits for agent pods
  - **Node Selectors:** Target specific node pools
  - **Tolerations:** Run on tainted nodes

  See [Dapr Ops Dashboard agent configuration](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/configuration-guide#agent-configuration) for details.
</details>

**4. Install agent**

1. Click **"Create"** - Dapr Ops Dashboard generates installation command and Kubernetes manifests
2. Copy the generated `kubectl apply` command
3. Run in your terminal:

```bash
kubectl apply -f "https://api.r1.diagrid.io/v1/...YOUR_TOKEN..."
```

**5. Verify Installation**

**Check agent pods:**

```bash
kubectl get pods -n diagrid-cloud
```

**Expected output:**

```
NAME                                     READY   STATUS    RESTARTS   AGE
diagrid-agent-xxxxx                      1/1     Running   0          30s
diagrid-agent-logs-collector-xxxxx       1/1     Running   0          30s
diagrid-agent-otel-0                     1/1     Running   0          30s
```

**Dapr Ops Dashboard console:**

- Agent status: `Online` (within 1-2 minutes)
- Dapr control plane: `Healthy`

:::tip Success!
Your cluster is now connected to Dapr Ops Dashboard. Navigate to the **Applications** tab to start monitoring your Dapr workloads.
:::

---

## CLI Installation

Automate cluster connections using the Diagrid CLI for scriptable, repeatable deployments.

**1. Install the CLI and authenticate**

**Install Diagrid CLI:**

**macOS**

```bash
curl -o- https://downloads.diagrid.io/cli/install.sh | bash
```

Move the `diagrid` binary into your path so you can run it from anywhere. For example:

```bash
sudo mv ./diagrid /usr/local/bin
```

**Linux**

```bash
curl -o- https://downloads.diagrid.io/cli/install.sh | bash
```

Move the `diagrid` binary into your path so you can run it from anywhere. For example:

```bash
sudo mv ./diagrid /usr/local/bin
```

**Windows**

Download the PowerShell installer

```shell
iwr -Uri https://downloads.diagrid.io/cli/install.ps1 -OutFile install.ps1
```

Execute the PowerShell installer

```
.\install.ps1
```

:::tip
You may need to temporarily set the PowerShell execution policy to `Unrestricted` to allow the installer to execute.

```shell
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

.\install.ps1

Set-ExecutionPolicy Restricted -Scope CurrentUser
```

:::

Move the `diagrid.exe` executable into your path so you can run it from anywhere. For example:

```shell
Move-Item .\diagrid.exe "$($env:USERPROFILE)\bin"
```

:::warning

Support for the Diagrid CLI on Windows is experimental and we recommend installing it via [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) if available. The CLI on WSL2 requires https://wslutiliti.es/wslu/ to support deeper OS integration.

:::

**Authenticate:**

```bash
diagrid login
```

**Set product context:**

```bash
diagrid product use conductor
```

**2. Create cluster connection**

**Basic connection (monitoring only):**

```bash
diagrid clusters connect -n my-cluster
```

**With Dapr installation:**

```bash
diagrid clusters connect \
  -n my-cluster \
  --install-dapr \
  --version 1.xx.x
```

<details>
  <summary><b>Custom configuration options</b></summary>

  Run the help command to see the additional options:

  ```bash
  diagrid clusters connect -h
  ```

  [View full CLI reference →](https://docs.diagrid.io/references/conductor/cli-reference/clusters/connect)
</details>

**Save cluster ID from output:**

```
Cluster ID: 12345678-abcd-1234-abcd-123456789012
```

**3. Get installation manifests**

**Retrieve manifest URL using the cluster ID from the previous step:**

```bash
diagrid clusters manifests <cluster-id>
```

**Or download manifests locally:**

```bash
diagrid clusters manifests <cluster-id> > conductor-manifests.yaml
```

**4. Install agent**

**Apply manifests:**

```bash
kubectl apply -f conductor-manifests.yaml
```

**Or use the generated URL directly:**

```bash
kubectl apply -f "$(diagrid clusters manifests <cluster-id>)"
```

**5. Verify Installation**

**Check connection status:**

```bash
diagrid clusters list
```

**View cluster details:**

```bash
diagrid clusters get <cluster-id>
```

**Check agent logs:**

```bash
kubectl logs -n diagrid-cloud -l app=diagrid-agent --tail=50
```

---

## Helm Installation

Use Helm charts for production deployments with GitOps workflows and read-only use cases.

:::warning Enterprise Feature
Helm-managed clusters are available in Dapr Ops Dashboard Enterprise. When using Helm, some features are read-only in the console:

- ❌ Automatic agent upgrades
- ❌ Dapr upgrades via console/CLI
- ❌ Certificate rotation via console
- ✅ Monitoring and insights
- ✅ Advisor recommendations
  :::

**1. Create Helm-managed cluster connection**

**CLI**

```bash
# Authenticate
diagrid login
diagrid product use conductor

# Create Helm-managed connection
diagrid clusters connect -n my-helm-cluster --helm-managed

# Save the cluster ID from output
```

**Console**

1. Navigate to [Dapr Ops Dashboard Console](https://diagrid.ws/conductor)
2. Click **"Connect Cluster"**
3. Enable **"Helm managed"** toggle
4. Configure settings and click **"Create"**

**2. Download Helm values**

**Get agent values:**

```bash
diagrid clusters helmvalues <cluster-id> > conductor-agent-values.yaml
```

**Get Dapr values (if installing Dapr via Helm):**

```bash
diagrid clusters helmvaluesdapr <cluster-id> > dapr-values.yaml
```

:::tip Security
The values file contains sensitive credentials. Store securely and avoid committing to public repositories.
:::

**3. Install the Dapr Ops Dashboard agent**

**Install agent:**

Deploy the Dapr Ops Dashboard agent to your cluster using the generated values.

```bash
helm install conductor-agent oci://public.ecr.aws/diagrid/conductor-charts/agent \
  --version <version-number> \
  -n diagrid-cloud --create-namespace \
  -f conductor-agent-values.yaml
```

**4. Install Dapr**

**Add Dapr Helm repository:**

```bash
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
```

**Install Dapr:**

```bash
helm install dapr dapr/dapr \
  --version=<dapr-version> \
  --namespace dapr-system --create-namespace \
  -f dapr-values.yaml --wait
```

**5. Verify installation**

**Check Helm releases:**

```bash
helm list -n diagrid-cloud
helm list -n dapr-system
```

**Verify pods:**

```bash
kubectl get pods -n diagrid-cloud
kubectl get pods -n dapr-system
```

**Check in Dapr Ops Dashboard console:**

- Navigate to [Clusters](https://diagrid.ws/conductor)
- Verify cluster shows as `Online`
- Check Dapr control plane status

### Helm values reference

<details>
  <summary><b>Agent Helm Values</b></summary>

  **Required values (don't modify):**

  ```yaml
  caCertPem: "your-ca-cert"
  global:
    orgId: "your-org-id"
    agentId: "your-agent-id"
    manifestId: "your-manifest-id"
  agent:
    key: "your-agent-key"
    keyB64: "your-key-base64"
  ```

  **Customizable values:**

  ```yaml
  agent:
    replicas: 2
    logLevel: info
    resources:
      requests:
        cpu: 10m
        memory: 250Mi
      limits:
        memory: 750Mi

  otelMetricsCollector:
    enabled: true
    replicas: 2
    resources:
      requests:
        cpu: 100m
        memory: 250Mi
      limits:
        memory: 2Gi

  otelLogsCollector:
    enabled: true
    resources:
      requests:
        cpu: 10m
        memory: 250Mi
      limits:
        memory: 750Mi
  ```

  [View complete Helm values reference →](../guides/helm-installation.mdx#helm-values-reference)
</details>

<details>
  <summary><b>Dapr Helm Values</b></summary>

  **Development environment:**

  ```yaml
  global:
    ha:
      enabled: false
    mtls:
      enabled: true

  dapr_operator:
    resources:
      requests:
        memory: 100Mi
        cpu: 100m
      limits:
        memory: 500Mi
        cpu: "1"
  ```

  **Production environment:**

  ```yaml
  global:
    ha:
      enabled: true
    mtls:
      enabled: true

  dapr_operator:
    replicaCount: 3
    resources:
      requests:
        memory: 100Mi
        cpu: 100m
      limits:
        memory: 1024Mi
        cpu: "1"
  ```

  [View Dapr Helm documentation →](https://github.com/dapr/dapr/tree/master/charts/dapr)
</details>

### GitOps integration

<details>
  <summary><b>ArgoCD Example</b></summary>

  Read the step-by-step instructions in the blog [Dapr meets GitOps: A Guide to Dapr and Argo CD (Part 1)](https://www.diagrid.io/blog/dapr-meets-gitops-a-guide-to-dapr-and-argo-cd).
</details>

---

## Post-installation

### Verify everything works

1. **Check agent status** in [Dapr Ops Dashboard console](https://diagrid.ws/conductor)
2. **Deploy a test application** with Dapr annotations
3. **View in Applications tab** to see metrics and health
4. **Check Advisor** for initial recommendations

### Troubleshooting

<details>
  <summary><b>Agent stays offline</b></summary>

  **Check agent network connectivity:**

  ```bash
  kubectl logs -n diagrid-cloud -l app=diagrid-agent
  ```

  **Common issues:**

  - Firewall blocking outbound access to these [networking rules](https://docs.diagrid.io/dapr-open-source/dapr-ops-dashboard/getting-started/prerequisites#network-requirements)
  - Proxy configuration needed
  - Invalid cluster token (regenerate in console)
</details>

<details>
  <summary><b>Dapr control plane unhealthy</b></summary>

  **Check Dapr pods:**

  ```bash
  kubectl get pods -n dapr-system
  ```

  **View Dapr logs:**

  ```bash
  kubectl logs -n dapr-system -l app.kubernetes.io/name=dapr
  ```

  **Common issues:**

  - Insufficient cluster resources
  - Image pull errors (check registry access)
  - Conflicting upgrade from existing Dapr installation
</details>

<details>
  <summary><b>Metrics not appearing</b></summary>

  **Check metrics collector:**

  ```bash
  kubectl logs -n diagrid-cloud -l app=diagrid-agent-otel
  ```

  **Verify metrics server:**

  ```bash
  kubectl top nodes
  ```

  If metrics server is missing, install it.
</details>

---

## Uninstalling Dapr Ops Dashboard

To remove Dapr Ops Dashboard from your cluster, delete the cluster connection from the console or CLI. In the console:

1. Use the action menu (three dots) to delete the cluster connection.
2. Click **"Delete cluster connection"** and run the kubectl delete command provided to remove all resources in your cluster.
3. Confirm deletion to remove the cluster connection from the backend.

:::info
Uninstalling Dapr Ops Dashboard does not affect your applications or Dapr installation. Applications continue running normally.
:::
