Dapr v1.8 is now available
We’re happy to announce the release of Dapr 1.8.0! π π π
Acknowledgements
We would like to extend our thanks to all the new and existing contributors who helped make this release happen.
@1046102779, @AaronCrawfis, @aditirao7, @akhilac1, @akkie, @amimimor, @amulyavarote, @arahja, @Arashrohani, @artursouza, @beiwei30, @ben-kotvis, @BenLocal, @berndverst, @bibryam, @CacheCoww, @ChenCong0207, @cmendible, @CrazyHZM, @daixiang0, @davidfowl, @DeepanshuA, @dntbeSris, @duglin, @espinm2, @ewassef, @fabistb, @famarting, @fanfanbj, @greenie-msft, @halspang, @harrykimpel, @hhunter-ms, @hueifeng, @inirudebwoy, @ItalyPaleAle, @jack1142, @jackliusr, @JadynWong, @jasonlica, @jigargandhi, @jjcollinge, @johnewart, @Joshswooft, @Juneezee, @karpikpl, @LaurenceLiZhixin, @lotuc, @maltegoetz, @marcinjahn, @mattmazzola, @moreyhat, @msfussell, @mukundansundar, @noahziheng, @nyemade-uversky, @patrickhuber, @paulyuk, @pigletfly, @pkedy, @pravinpushkar, @psychomelet, @rzyns, @saber-wang, @safanaj, @sarsharma, @seeflood, @shiling02404, @Shoothzj, @shubham1172, @sjwaight, @skyao, @slapointe, @stulzq, @subash89, @sunzhaochang, @suraciii, @surenderssm, @Taction, @tanvigour, @theonefx, @thielepaul, @ThorstenHans, @tlawrie, @wonderflow, @wujunwei, @wwbweibo, @XavierGeerinck, @yaron2, @zcong1993, @zhenlei520, @zhi-gang-sun
Highlights
Dead letter topics
- There are times when applications might not be able to handle messages for a variety of reasons. For example, there could be transient issues retrieving data needed to process a message or the app business logic fails returning an error. Dead letter topics are used to forward messages that cannot be delivered to a subscribing app.
Distributed lock API (alpha)
- Distributed locks provide mutually exclusive access to shared resources from an application. In this release a new alpha API has been introduced to enable to you to take mutually exclusive locks on a shared resource. Read the Overview of the distributed lock API building block.
WASM support for middleware components
- You can now write Dapr middleware components using external WASM modules and extend Dapr with non-Go languages. Read more about Dapr and WASM support.
Resilency policies (preview)
Continuing the v1.7 release resilency policy features.
Overriding default resiliency retries
- Dapr provides default retries for certain request failures and transient errors. In this release, there is now the option to override default retries with custom retry logic by defining resiliency policies with reserved, named keywords in a resiliency spec. Read more about overriding built-in retries.
Improved resiliency logging
- When resiliency policies are now loaded you will see which ones are loaded when the Dapr sidecar starts as information logs. Turning on debug logs enables you to see the resiliency policies firing with details on how often and the targets.
Namespace support for shared state
- When sharing state between applications, namespaces can now be used to separate state. This allows apps in different namespace with the same
appid
to reuse the same state store. Read more about state sharing.
Metadata API returns list of component capabilities
- The metadata API can now be queried for the capabilities of the components that that sidecar has loaded, in particular pub/suba and state stores.
Sidecar certificate installation support
The Dapr sidecar can now support installation of certificates for both Linux and Windows containers. This allows for use cases like
- Using HTTP binding with SSL using a self-signed certificate
- Configuring an outbound proxy like Squid with client certificate authentication
New arguments and annotations
New arguments and annotations include:
- Annotation and arguments to set or “turn-off” and configure the actor
Placement
service host addresses - Annotation and arguments to disable the built-in Kubernetes secret store.
- Annotation to mount pod volumes to the Dapr sidecar container in read-write or read-only mode.
Kubernetes improvements
- You can now inject Dapr sidecars from Tekton Pipelines without needing to configure any special RBAC permissions.
- The Dapr Operator now include a βwatchdogβ capability to ensure the Dapr sidecar is present in pods, especially important during application or cluster failures to provide a greater level of resiliency. Read Dapr Operator control plane service overview for more details.
- When deploying Dapr, whether on Kubernetes or in Docker self-hosted, the default container images that are pulled are based on distroless. Now you can use images based on Mariner, officially known as CBL-Mariner, a free and open-source Linux distribution and container base image maintained by Microsoft. Read Using Mariner-based images
- Enable pub/sub fanout for StatefulSets
- Also see New Arguments and Annotations above
Component Improvements
Component stabilization
This release focused on preparing more components for beta
and stable
designation. This means certification tests are added and quality issues are addressed. Read component certification lifecycle for details.
The following components are now offically designated beta
status, several of which are stable candidates
ready to become stable
soon in a future release:
- Azure Table Storage State Store (stable candidate)
- Azure Event Hubs Binding (stable candidate)
- Azure Storage Queues Binding (stable candidate)
- Postgresql State Store (stable candidate)
- Azure Event Hubs Pubsub (stable candidate)
New Components
There are now over 100+ components in Dapr (105 in total). New components added in this release:
- RouterChecker HTTP Request Routing added in the v1.6 release, is now documented.
- Commerce Tools Binding
- Apache Dubbo Binding
- Huawei OBS Binding
- Huawei CSMS Secret Store
- In-memory State Store used for development
- RocketMQ PubSub
- Wasm Basic HTTP Middleware
- Redis Distributed Lock
Preview Features now Stable
The following features are now stable, having been in preview for at least 2 releases.
SDK Improvements
Python
- Support for Unsubscribe events for the Configuration API
- Support for per-actor-type configuration
- Support for TTL and time/interval formats in actor timers & reminders
Java
- Add pubsub routing
.NET
- Support for Unsubscribe events for the Configuration API
- Support for per-actor-type configuration
- Support for distributed lock API
JavaScript
- The JavaScript SDK is now available at @dapr/dapr. The older package dapr-client is on a path to deprecation.
- Support for Actor reminder/timer TTL support
- Support for Configuration API
- Support for gRPC proxy
- Support for configuring the SDK logger
CLI
- Added the
annotate
CLI command for adding Dapr annotations to deployed Kubernetes configurations. dapr init
anddapr upgrade
in k8s mode can now use GHCR and private registry to pull images.- Documented the
version
command.
Next Steps
If you’re new to Dapr, visit the getting started page and familiarize yourself with Dapr.
Docs have been updated with all the new features and changes of this release. To get started with new capabilities introduced in this release, go to the Concepts and the Developing applications.
Note: This release contains a few breaking changes.
See this section on upgrading Dapr to version 1.8.0.
New in this release
Dapr Runtime
- ADDED PubSub’s DeadLetter Topic 2217
- ADDED Add kubernetes annotation to enable/disable placement component in daprd 3761
- CHANGED Actor Reminder Partition No Longer Preview Feature 3813
- ADDED RocketMQ component with fix for increased goroutine Count 4152
- ADDED New “watchdog” capability in the Dapr operator to ensure the Dapr sidecar is present in pods 4171
- ADDED Enhance dapr_rbac ClusterRole for more restricted Kubernetes RBAC Environments 4188
- ADDED Enable StatefulSets for PubSub subscribers 4195
- ADDED Allow sidecar to run in pods with
automountServiceAccountToken: false
4227 - FIXED Improve the error message for when a state store has not been set for actor usage and actors are used 4273
- ADDED Speedup placement hosts update 4359
- ADDED Metadata API to provide information on sidecar capabilities 4367
- FIXED bugfix/diagnostics: service monitoring metrics 4387
- ADDED feature: add middle/http routerchecker 4402
- FIXED Intermittent i/o timeout error in Dapr sidecar. 4416
- FIXED Bug in daprd startup behavior. 4422
- ADDED Allow setting certificate’s filenames/secret keys through command line flags 4428
- ADDED Provide a Default Policy for Built-In Retries via Resiliency 4449
- FIXED Wait for specified grace period before cleaning actors and closing the API servers 4451
- FIXED Resiliency: Fixed endpointPolicy get circuitBreakers template, add missing ok for map get 4505
- FIXED Fix actor client not requires state store. 4509
- ADDED Add rest API for configuration store. 4528
- FIXED Fixes a bug that incorrectly allowed the Dapr API HTTP Port to be reused is the app port. 4531
- FIXED Concurrent streaming requests fail with dapr grpc proxy 4537
- FIXED bugfix: operator update service 4563
- CHANGED Dapr is now built with Go 1.18 4570
- FIXED odd grammar on error message 4573
- ADDED Support for installing certificates to the Dapr sidecar container 4587
- ADDED Improve the logs for resiliency policies 4600
- ADDED Utilize correct context in resilient calls 4602
- ADDED Enable flag to enable/disable kubernetes builtin secret store 4605
- ADDED ci: one-line command for local development 4607
- FIXED PubSub components do not deliver new messages during the shutdown grace period 4624
- ADDED Declarative pub/sub subscriptions are picked from stand alone components even if they are not in a .yaml file 4641
- ADDED VolumeMounts support for Side Car Daprd 4662
- ADDED Publish a new variant of Dapr container images based on Mariner “distroless” with the
-mariner
tag 4673 - ADDED Option to prefix state key with namespace 4676
- ADDED Dapr integration with Agones 4680
- FIXED Daprd crashed for race condition of grpc connection pool 4688
- FIXED Adding alicloud.dubbo component caused spike in total cpu usage in longhaul 4723
- CHANGED optimize/crds: change level from error to warn 4725
- FIXED Improved the reliability of the Sidecar Injector and Operator services’ startup and shutdown sequences 4731
- CHANGED Actor type metadata as stable feature 4736
- CHANGED Enable Pub/Sub routing as stable 4742
- FIXED Actor actor instance missing error during scaling issue 4768
- FIXED fix metadata get http api 4815
Dapr CLI
- ADDED
dapr version
command with JSON output format 737 - ADDED
dapr annotate
CLI command for adding dapr annotations to Kubernetes configurations. 870 - FIXED CLI upgrade command panics on edge versions 954
- ADDED Add timeout to HTTP call in
downloadFile
method 962 - ADDED Supporting Dapr GHCR/private registry for
dapr init
in Kubernetes mode 968 - FIXED Fixed configuration file initialization bug in
dapr init --from-file
970 - CHANGED Changed certificate generation logic to mimic
dapr
runtime 987 - FIXED
--dapr-http-read-buffer-size
not passed properly in CLI 991
Components
- ADDED Certification tests for Azure Table Storage in state store 950
- ADDED Certification tests for Azure Event Hubs binding 960
- FIXED When Consul is used as a name resolution component, the same appid cannot achieve load balancing, and the dapr started later will overwrite the previous dapr 1199
- ADDED Certification tests for Azure Events Hub in pubsub 1379
- CHANGED New Azure Service Bus Queues binding based on updated SDK 1531
- CHANGED New Azure Service Bus pubsub based on updated SDK 1532
- ADDED Certification tests for Redis 1534
- CHANGED Simplify vault token read 1560
- FIXED Fixes an issue including multiple headers with spaces 1610
- ADDED New state store component for the Huawei DCS 1628
- ADDED parallel concurrencty for SQS component 1651
- ADDED output binding for commercetools 1652
- FIXED Pulsar namespace setting is invalid 1659
- ADDED Add Nats Streaming Parallel Concurrency Mode 1669
- ADDED Add metadata property to configure BatchingMaxSize in Pulsar 1671
- ADDED Add topic metadata for mqtt input binding and support user defined topic for mqtt output binding 1674
- ADDED Support custom queueEndpoint in Azure Storage Queues 1692
- FIXED Ignore Subscribe/Get wrong redis configuration type keys. 1693
- CHANGED Using Go 1.18 for building codebase 1697
- ADDED Support for MongoDB Atlas connection strings in MongoDB component 1698
- ADDED Add metadata property to configure Batching in Pulsar 1707
- ADDED secret store based on Huawei CSMS 1710
- ADDED new bindings component for the Huawei OBS 1718
- ADDED new bindings component for Huawei OBS 1724
- ADDED Certification tests for Azure Storage Queue binding 1728
- FIXED Fix: MQTT route messages to the correct publisher 1737
- ADDED middleware: basic WASM support 1747
- CHANGED Better handling of concurrency in MQTT Subscribe method 1748
- ADDED support for names in the SendGrid To and From fields. 1749
- ADDED [pubsub][rabbitmq]add support for binding multiple routingkeys at the same time 1750
- FIXED Fixes for SNS/SQS PubSub 1754
- FIXED Fixed Kafka PubSub to allow multiple handlers for different topics 1755
- ADDED NATS Streaming: Add parallel processing, fix retry bug 1760
- ADDED Rabbitmq publisher confirm 1762
- ADDED Apache dubbo output binding 1768
- ADDED Components capabilities: adding query api to the feature list 1775
- ADDED Certification test + connection idle time for Postgresql 1778
- ADDED Add file upload to s3 binding 1785
- CHANGED Zeebe updated to Camunda Platform 8 1787
- ADDED Azure Table Storage State Store: Suppport for Active Directory Authentication and support for CosmosDB Table API 1792
- FIXED consumer rebalance failed in kakfa binding component 1799
- CHANGED add id when registering services to consul 1802
- CHANGED pubsub.mqtt: default value for ‘qos’ is now ‘1’, and default value for ‘cleanSession’ to ‘false’ 1809
- FIXED unmarshalling in Azure ServiceBus binding 1845
.NET SDK
- ADDED When publishing a message allow setting Cloudevent attributes / Pub-Sub routing 773
- ADDED Support for Configuration Subscribe API 822
- FIXED App API Token support 835
- ADDED FOSSA Scan to Build Actions 843
- ADDED Support for Per Actor Type Configuration 857
- ADDED Enable raw metadata for Pub/Sub with .WithTopic<> Extension. 860
- FIXED Move AddDaprClient in Dapr.AspNetCore from AddSingleton to TryAddSingleton 867
- ADDED Subscription supports adding custom metadata 873
- ADDED Support for Distributed Lock API 885
Go SDK
- FIXED fix(typo): client configuration subscribe 279
- FIXED chore(client): update func definition to be clearer 281
- FIXED fix/typo: modify state annotation 283
Java SDK
- ADDED Added pubsub routing support 631
- CHANGED Replace Hashicorp Vault with local file in Secret Store example 667
Python SDK
- ADDED support for TTL and time/interval formats in actor timers & reminders 309
- ADDED option to disable Pubsub topic validation 381
- ADDED support for per Actor Type Configuration 383
- FIXED
DaprInvocationHttpClient
should correctly populate headers in InvokeMethodResponse 398 - FIXED
invoke_binding
call shouldn’t require the data parameter 399 - ADDED Support for Unsubscribe Configuration 417
- ADDED support for Dapr FastAPI SDK Router Tags in generated OpenAPI docs
JavaScript SDK
- CHANGED Update actor documentation and examples 98
- ADDED Configuration API support 140
- ADDED Actors Reminder/Timer TTL support 141
- CHANGED Update documentation for dapr client and server 152
- ADDED State Management Query API documentation 159
- FIXED Validate changes in the syntax of query JSON for state store query API 187
- FIXED Fix e2e test pipeline to not fail silently 197
- FIXED Fix actors e2e test 203
- ADDED Support for configuring the SDK logger 217
- ADDED gRPC proxy support 219
- CHANGED Publish SDK to new package @dapr/dapr 223
- CHANGED Overhaul README 236
- CHANGED Deprecate dapr-client NPM package in favor of @dapr/dapr 261
- FIXED Stop sending empty body from HTTP Client invoker 262
- ADDED Documentation on how to use and customize logger 288
- FIXED Do not change buffer data type to JSON in gRPC messages 292
Upgrading to Dapr 1.8.0
To upgrade to this release of Dapr, follow the steps here to ensure a smooth upgrade. You know, the one where you don’t get red errors on the terminal.. we all hate that, right?
Local Machine / Self-hosted
Uninstall Dapr using the CLI you currently have installed. Note that this will remove the default $HOME/.dapr directory, binaries and all containers dapr_redis, dapr_placement and dapr_zipkin. Linux users need to run sudo if docker command needs sudo:
dapr uninstall --all
For RC releases like this, download the latest and greatest release from here and put the dapr
binary in your PATH.
Once you have installed the CLI, run:
dapr init --runtime-version=1.8.0
Wait for the update to finish, ensure you are using the latest version of Dapr(1.8.0) with:
$ dapr --version
CLI version: 1.8.0
Runtime version: 1.8.0
Kubernetes
Upgrading from previous version
You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.
Upgrade using the CLI
Download the latest RC release from here and put the dapr
binary in your PATH.
To upgrade Dapr, run:
dapr upgrade --runtime-version 1.8.0 -k
To upgrade with high availability mode:
dapr upgrade --runtime-version 1.8.0 --enable-ha=true -k
Wait until the operation is finished and check your status with dapr status -k
.
All done!
Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar
Upgrade using Helm
To upgrade Dapr using Helm, run:
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
helm upgrade dapr dapr/dapr --version 1.8.0 --namespace=dapr-system --wait
Wait until the operation is finished and check your status with dapr status -k
.
All done!
Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar
Starting a fresh install on a cluster
Please see how to deploy Dapr on a Kubernetes cluster for a complete guide to installing Dapr on Kubernetes
You can use Helm 3 to install Dapr:
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
kubectl create namespace dapr-system
helm install dapr dapr/dapr --version 1.8.0 --namespace dapr-system --wait
Alternatively, you can use the latest version of CLI:
dapr init --runtime-version=1.8.0 -k
Post installation
Verify the control plane pods are running and are healthy:
$ dapr status -k
NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED
dapr-dashboard dapr-system True Running 1 0.10.0 15s 2022-06-24 13:07.39
dapr-sidecar-injector dapr-system True Running 1 1.8.0 15s 2022-06-24 13:07.39
dapr-sentry dapr-system True Running 1 1.8.0 15s 2022-06-24 13:07.39
dapr-operator dapr-system True Running 1 1.8.0 15s 2022-06-24 13:07.39
dapr-placement dapr-system True Running 1 1.8.0 15s 2022-06-24 13:07.39
After Dapr 1.8.0 has been installed, perform a rolling restart for your deployments to pick up the new version of the sidecar. This can be done with:
kubectl rollout restart deploy/<deployment-name>
Breaking Changes
.NET SDK
- RESOLVED App API Token support 835