Skip to main content

Installation guide

Prerequisites

  • Kubernetes cluster where you have Administrator access.
  • Helm 3.x or later.
  • Cluster outbound network access to Diagrid's artifact repository (See Access details).
  • A D3E access token (provided by Diagrid).
  • Dynatrace installation (only required for Option 3: Dynatrace integration).

Open source version compatibility

D3E maintains full compatibility with Dapr open source, providing additional enterprise features on top of the existing APIs and SDKs. Only two versions of Dapr are supported at a time; the current stable version and previous minor version, including select patch versions. This means that there is a rolling window that moves forward for supported releases and it is your operational responsibility to remain up to date with these supported versions. If you have an older version of Dapr you may have to do intermediate upgrades to get to a supported version.

The table below lists the currently supported and deprecated versions of D3E, corresponding to the associated Dapr open source versions.

D3E versionARM64 featuresAMD64 featuresOperating systemNotes
1.13.6Multi-tenant control plane, namespace isolation and reduced permission set.Multi-tenant control plane, namespace isolation, reduced permission set and Dynatrace integration.Linux
1.14.4Multi-tenant control plane, namespace isolation and reduced permission set.Multi-tenant control plane, namespace isolation, reduced permission set and Dynatrace integration.Linux
1.14.5Multi-tenant control plane, namespace isolation and reduced permission set.Multi-tenant control plane, namespace isolation, reduced permission set and Dynatrace integration.Linux
1.14.6*Multi-tenant control plane, namespace isolation and reduced permission set.Multi-tenant control plane, namespace isolation, reduced permission set and Dynatrace integration.Linux*Backport Oracle state store features
1.15.5Multi-tenant control plane, namespace isolation and reduced permission set.Multi-tenant control plane, namespace isolation, reduced permission set and Dynatrace integration.Linux

Installation setup

  1. Ensure any existing Dapr installations are removed from your cluster. Run the following commands to delete the resources.
helm uninstall dapr -n dapr-system
kubectl delete pvc -n dapr-system --all
kubectl delete crds subscriptions.dapr.io resiliencies.dapr.io configurations.dapr.io components.dapr.io httpendpoints.dapr.io
  1. Set your D3E token in your terminal. Note: this is a custom access token that is provided to you by the Diagrid team.
token=<TOKEN-PROVIDED-BY-DIAGRID>
  1. Choose your installation path and continue with one of the following options to install D3E:

Option 1: D3E with single namespace isolation

In this configuration of D3E, the Dapr control plane is scoped to a single namespace and only applications deployed within that namespace can be injected with Dapr sidecars.

Helm values:

The D3E Helm chart supports all Helm chart values available from the open source Dapr Helm chart repository along with the values listed below. If you require additional configuration for your Dapr deployment, ensure to add these values into your Helm install command or use a custom values file.

Helm valueDescriptionDefault valueD3E options
global.rbac.namespacedEnable namespace isolationfalsetrue, false

Example installation command:

The following command will install D3E version 1.15.5 into the dapr-system namespace, and only allow applications in dapr-system to be injected with Dapr sidecars.

helm install \
--create-namespace \
-n dapr-system dapr \
--set global.rbac.namespaced=true \
--set diagrid.token=${token} \
--set global.tag=1.15.5 \
oci://public.ecr.aws/diagrid/d3e-charts/d3e-dapr --version 1.15.5

d3e-install-option-1
Option 1: Single namespace isolation

Option 2: D3E with multi-namespace isolation & multi-tenancy

In this configuration of D3E, the Dapr control plane is scoped to a list of namespaces and only applications deployed in those namespaces can be injected with Dapr sidecars. Use the global.rbac.namespaces Helm value to specify the list of namespaces that Dapr should be able to target for injection.

Helm values:

The D3E Helm chart supports all Helm chart values available from the open source Dapr Helm chart repository along with the values listed below. If you require additional configuration for your Dapr deployment, ensure to add these values into your Helm install command or use a custom values file.

Helm valueDescriptionDefault valueD3E options
global.rbac.namespacedEnable namespace isolationfalsetrue, false
global.rbac.namespacesList of namespaces Dapr can inject sidecars into[]["namespace-1", “namespace-2”], ...

Example installation command:

The following command will install D3E version 1.15.5 into the dapr-system namespace, and only allow applications in the namespace crud-app to be injected with Dapr sidecars.

helm install \
--create-namespace \
-n dapr-system \
--set global.rbac.namespaced=true \
--set-json 'global.rbac.namespaces=[“crud-app”]' \
--set diagrid.token=${token} \
--set global.tag=1.15.5 \
dapr oci://public.ecr.aws/diagrid/d3e-charts/d3e-dapr --version 1.15.5

d3e-install-option-2a
Option 2: Multi-namespace isolation

Multi-tenancy support:

To configure multi-tenancy, execute the D3E Helm installation command again, modifying the Dapr namespace value (-n) and the global.rbac.namespaces value with new namespaces. This will allow for multiple Dapr installations within the same cluster, each within its own isolated namespace.

For example, run the Helm command to end up with the following cluster configuration:

  • D3E deployed in the dapr-system namespace with the attributes global.rbac.namespaced=true and global.rbac.namespaces=[“crud-app”]
  • D3E deployed in the dapr-secondary namespace with the attributes global.rbac.namespaced=true and global.rbac.namespaces=[“order-app”]

d3e-install-option-2b
Option 2: Multi-tenancy & namespace isolation

Option 3: D3E with Dynatrace

In this configuration of D3E, the Dapr sidecar uses container images that are compatible with Dynatrace. Use the global.tag Helm value to add the suffix -dynatrace to the version of D3E you are installing. Note: this option can be also combined with Helm values provided with D3E Options 1 or 2.

Helm values:

The D3E Helm chart supports all Helm chart values available from the open source Dapr Helm chart repository along with the values listed below. If you require additional configuration for your Dapr deployment, ensure to add these values into your Helm install command or use a custom values file.

Helm valueDescriptionDefault valueD3E options
global.tagContainer image taglatest release-dynatrace

Example installation command:

The following command will install D3E version 1.15.5 with Dynatrace integration into the dapr-system namespace, and only allow applications in the namespace crud-app to be injected with Dapr sidecars.

helm install \
--create-namespace \
-n dapr-system \
--set global.rbac.namespaced=true \
--set-json 'global.rbac.namespaces=["crud-app”]' \
--set diagrid.token=${token} \
--set global.tag=1.15.5-dynatrace \
dapr oci://public.ecr.aws/diagrid/d3e-charts/d3e-dapr --version 1.15.5

d3e-install-option-3
Option 3: Dynatrace integration & namespace isolation

Option 4: D3E without CRDs and ClusterRoles using the Diagrid Dapr Injector Helm chart

This configuration of D3E (Diagrid Dapr Distribution for Enterprises) focuses on a CRD-free installation mode, eliminating the need for both Dapr ClusterRoles and CustomResourceDefinitions (CRDs). This is done by deploying Dapr in standalone mode without the Dapr control plane sidecar injector service, removing the requirement for the Sidecar Injector ClusterRole (detailed in Kubernetes resource requirements). Additionally the Dapr control plane operator service is not deployed in this configuration, allowing for no CRDs and with the operator service in standalone mode, the system:auth-delegator ClusterRoleBinding requirement is also removed.

Instead of relying on the standard Sidecar Injector and CRDs, this approach utilizes the Diagrid Dapr Injector Helm library chart (https://github.com/diagridio/diagrid-dapr-injector-helm-sample/tree/main) to inject the Dapr sidecar directly into application manifests and to facilitate the loading of Dapr resources.

Important

This option, while offering the least amount of cluster permissions by avoiding both CRDs and the standard Sidecar Injector, involves significant operational overhead. You need to configure your Dapr application manifests to contain the sidecars and manage Dapr resources directly within your application's Helm charts. Unless there is a strict requirement for no Dapr ClusterRoles and no Dapr CRDs to be deployed in your Kubernetes environment, this method is strongly not recommended.

Helm values:

The D3E Helm chart supports all Helm chart values available from the open source Dapr Helm chart repository along with the values listed below. If you require additional configuration for your Dapr deployment, ensure to add these values into your Helm install command or use a custom values file.

This option can be combined with Helm values in D3E Options 1, 2 or 3 to provide namespace isolation, multi-tenancy or Dynatrace integration in your D3E deployment.

Helm valueDescriptionDefault valueD3E options
dapr_sidecar_injector.enabledDeployment of the standard sidecar injector control plane servicetruetrue, false
global.rbac.injector.enabledDeployment of the injector ClusterRoletruetrue, false
global.rbac.namespacedEnables namespace-scoped RBAC for Dapr componentsfalsetrue, false
global.rbac.sentry.createServiceAccountCreate a service account for the Dapr Sentry componenttruetrue, false
global.rbac.createTokenReviewerRoleCreate a token reviewer rolefalsetrue, false
global.rbac.createTokenReviewerRoleBindingCreate a token reviewer role bindingtruetrue, false
global.rbac.crds.enabledEnable CRDs RBACtruetrue, false
global.rbac.operator.enabledEnable the operator RBACtruetrue, false

Example installation command: The following command will install D3E version 1.15.5 into the dapr-system namespace, without the sidecar injector control plane service and operator and only allow applications in the dapr-system namespace to be injected with sidecars.

helm install \
--skip-crds \
-n <namespace> \
--set global.tag=1.15.5 \
--set global.actors.enabled=false \
--set global.scheduler.enabled=false \
--set global.rbac.injector.enabled=false \
--set global.rbac.createTokenReviewerRole=false \
--set global.rbac.createTokenReviewerRoleBinding=false \
--set global.rbac.crds.enabled=false \
--set global.rbac.operator.enabled=false \
--set global.rbac.namespaced=true \
--set global.rbac.crds.enabled=false \
--set global.rbac.operator.enabled=false \
--set global.rbac.sentry.createServiceAccount=true \
--set-json 'global.rbac.namespaces=["<namespace_A>","<namespace_B>"]' \
--set dapr_operator.enabled=false \
--set dapr_sidecar_injector.enabled=false \
--set dapr_placement.mode=standalone \
--set dapr_scheduler.mode=standalone \
--set dapr_sentry.mode=standalone \
--set dapr_sentry.injectDaprSystemConfig=true \
--set dapr_config.dapr_config_chart_included=false \
--set diagrid.token="YOUR_TOKEN" \
dapr oci://public.ecr.aws/diagrid/d3e-charts/d3e-dapr --version 1.15.5

Running your Dapr workloads with the Diagrid Dapr Injector: After installing D3E on your cluster, you need to configure your applications to contain the Dapr sidecars at deployment time, by adding the Diagrid Dapr Injector Helm library chart as a dependency to your applications.

The step-by-step instructions to configure this are detailed in the GitHub repository here, starting at Step 1: Add the Dependency. This configuration must be done for all Dapr-enabled applications otherwise the sidecar will not be injected and Dapr operations will fail.

It is recommended to test out the behaviour using the deploy-sample sample application located in the repository to ensure that you understand the implications before proceeding with configuring your applications.

d3e-install-option-4
Option 4: Without ClusterRoles using the Diagrid Dapr Injector Helm chart & single namespace isolation