Project: Dapr (App Definition and Development / Application Definition & Image Build)
File: v0.10.0.md

It's been six weeks, and We're happy to announce the release of Dapr v0.10.0! With Dapr approaching v1.0, our releases increasingly focus on operational concerns like stability, reliability, and upgradability in production environments. As always, community and user requests and feedback are top of mind along with bug fixes. We would like to extend our thanks to all new and existing contributors who helped make this release happen. Highlights Support for multiple Pub/Sub components (, Highly available control plane on Kubernetes Improved and SDKs New CLI commands (view root cert expiry, export TLS certs, init on k8s with a custom namespace) New components: , , If you're new to Dapr, visit the 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 and the . Note: This release contains a few . See section on upgrading Dapr to version 0.10.0. Refactored Kubernetes operator with Kubebuilder, allowing for multi-replica reconciliation (Thanks @yittg) Added Windows containers support Added support for multiple pub/sub components Added Bulk Get API Changed command line arguments Added stdout log exporter (Thanks @brendandburns) Fixed actors stability bug under high RPS Added Windows e2e tests Removed outdated third-party vendor docs (Thanks @yittg) Fixed actor reminder firing twice bug Added topic field to Pub/Sub cloud events spec (Thanks @allymparker) Upgraded to use Go 1.15 Removed glog dependency and redundant flags Fixed race condition in actor timers Updated dashboard permissions Helm chart Fixed test default values for `TARGETOS` and `TARGETARCH` Added CPU/Memory utilization for performance tests Added ability to turn off telemetry for performance tests Fixed sidecar not resolving secrets after first time installation Removed state retry options Fixed actor reminders overwrite bug Added Grafana dashboards as part of release assets Fixed `grpcclientmethod` and `grpcclientstatus` metrics tags always empty bug (Thanks @kirk91) Added log entry on sidecar when API auth token is enabled Added versioning scheme to component definition Updated pub/sub to CloudEvents

spec Added High availability option to Helm Chart Fixed operator k8s service update bug (Thanks @yittg) Added traceparent header in gRPC call Added support for multi pub/sub in `publish` command Added command to export existing TLS certificates in a Kubernetes cluster Added command to check on TLS root cert expiry date Changed `dapr init -k` to allow for custom namespaces, HA mode and TLS enabled/disabled Changed command line arguments to be consistent with `daprd` Fixed version flag not uniform in standalone/Kubernetes modes Updated helm message for `uninstall --all` command Added webhook to trigger homebrew release Changed init and uninstall behavior for self hosted mode Added oauth2 client authorization middleware (Thanks @h2floh) Added Azure Blob Storage state store (Thanks @ksivamuthu) Added InflubxDB output binding (Thanks @gbaeke) Added TLS support for MQTT pub/sub (Thanks @kumaya) Fixed SQL Server data serialization issue with gRPC Fixed RabbitMQ pub/sub consumer exclusivity bug Updated output bindings operations list Added Metadata field to transactional state request Fixed SQL Server connection leak issue Updated Kubernetes events input binding with new payloads Added multi pub/sub support Updated k8s annotations, CLI options and daprd arguments Updated API to support HTTP extensions Removed retry options from state Fixed gRPC manager not shutting down Added multi pub/sub support Updated actor usage docs (Thanks @tomkerkhove) Updated proto package with Any type (Thanks @akkie) Fixed null reference exception when no model binder provided (Thanks @altinoren) Added Bulk Get API Updated k8s annotations, CLI options and daprd arguments Removed retry options from state Added api token injection Added multi pub/sub support Removed retry options from state Updated k8s annotations, CLI options and daprd arguments Added server side callback wrapper Added Bulk Get API Added state transactions API Added multi pub/sub support Updated k8s annotations, CLI options and daprd arguments Added wrapper methods for state store APIs (Thanks @chinzhiweiblank) Added wrapper layers for gRPC Added server side wrapper for app callback Added actor service via fastapi Added wrapper methods for secrets API Added wrapper methods for pub/sub API Added wrapper methods for bindings API Added support for api token auth Added multi pub/sub support Updated k8s annotations, CLI options and daprd arguments Added multi pub/sub support Updated k8s annotations, CLI options and daprd arguments Added Kubernetes production deployment and upgrade guidelines Updated multi pub/sub parts Updated k8s annotations, CLI and daprd arguments Fixed broken KEDA link (Thanks @tomkerkhove) Updated with new IntelliJ instructions for multiple dapr runs Updated API reference with state transactions API Updated API reference with state bulk get API Updated Kubernetes events input binding Updated troubleshoot section for configuring multiple replicas to the Kubernetes sidecar injector Updated state API reference to remove retry options Updated links to reference to new quickstarts repo If you're upgrading from an older version of Dapr to 0.10.0, 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? Uninstall Dapr using the CLI you currently have. Note that this will remove the default $HOME/.dapr directory, binaries and all containers daprredis, daprplacement and dapr_zipkin. Linux users need to run sudo if they have installed binary in default path /usr/local/bin/ or have docker command needing sudo.: ```bash dapr uninstall --all ``` Next, get the latest CLI following instructions, or alternatively download the latest and greatest release from and put the `dapr` binary in your PATH. Once you have downloaded the CLI, run: ```bash dapr init ``` Wait for the update to finish, and you're good to go! Make sure you have the right runtime version (0.10.0) with: ```bash dapr --version ``` If you previously installed Dapr using Helm, starting with this releases you can now upgrade Dapr to a new version. If you installed Dapr using the CLI, go . Note: For this release only, you will not be carrying your old certs over due to a in Go 1.15. To see the full documentation regarding upgrading Dapr, see . Get the latest version of the Dapr CLI as outlined above, and put it in your path. You can also use the helper scripts outlined to get the latest version. First, update your Helm repos: ``` helm repo update ``` Run the following command to upgrade Dapr: ``` helm upgrade dapr dapr/dapr --version

--namespace dapr-system --reset-values ``` Wait until all the pods are in Running state: ``` kubectl get pods -w -n dapr-system ``` Verify the control plane is updated and healthy: ``` dapr status -k ``` Next, issue a rolling update to your Dapr enabled deployments. When the pods restart, the new sidecar version will be picked up. ``` kubectl rollout restart deploy/<DEPLOYMENT-NAME> ``` All done! If you previously installed Dapr on your Kubernetes cluster using the Dapr CLI, run: Note: Make sure you're uninstalling with your existing CLI ```bash dapr uninstall --kubernetes ``` It's fine to ignore any errors that might show up. If you previously installed Dapr using Helm 2.X: ```bash helm del --purge dapr ``` If you previously installed Dapr using Helm 3.X: ```bash helm uninstall dapr -n dapr-system ``` Update the Dapr repo: ```bash helm repo update ``` If you installed Dapr with Helm to a namespace other than `dapr-system`, modify the uninstall command above to account for that. You can now follow instructions on how to install Dapr using Helm 3. Alternatively, you can use the CLI: ``` dapr init --kubernetes ``` Verify the control plane pods are running and are healthy: ``` dapr status -k dapr-sentry dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-operator dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-sidecar-injector dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-placement dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 ``` After Dapr 0.10.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> ``` With the v0.10.0 release, we have added the support for multiple pub/sub components. That means that you can now publish and subscribe to topics arriving from different components. To this end, several changes have been made to both the publisher and consumer sides. An additional parameter has been added to tell Dapr which pub/sub component you're targeting. Old API: ``` POST http://localhost:<daprPort>/v1.0/publish/<topic> ``` New API: ``` POST http://localhost:<daprPort>/v1.0/publish/<pubsubname>/<topic> ``` Note: The following example is in JavaScript but applicable to all languages An additional `pubsubName` field has been added to the subscription payload to tell Dapr which pub/sub component this subscription is for. Old subscription: ```javascript app.get('/dapr/subscribe', (req, res) => { res.json([ { topic: "newOrder", route: "orders", } ]); }) ``` New subscription: ```javascript app.get('/dapr/subscribe', (req, res) => { res.json([ { topic: "newOrder", route: "orders", pubsubName: "messagebus" } ]); }) ``` Changes have been made to the different SDKs, so make sure to get the latest version of the SDK you're using. Specifically, the subscription structures have added a `pubsubName` field and the publish methods take the `pubsubName` argument. The `publish` command on the Dapr CLI now takes a required param `--pubsub` to specify the pubsub component: ``` dapr publish --pubsub pubsub --topic myevent --data '{ "name": "yoda" }' ``` The retry options for state operations have been removed. If you've never used retries, this is not a breaking change. The updated API references can be found . The Service Invocation method now accepts an HTTPExtension argument. Old method call: ```java client.invokeService(serviceAppId, method, message); ``` New method call: ```java client.invokeService(serviceAppId, method, message, HttpExtension.NONE); ``` The command `dapr init` will now install the runtime binary `daprd` into `$HOME/.dapr/bin` for Mac/Linux and `%USERPROFILE%\.dapr\` for Windows. In addition, the `--install-path` argument has been removed from the `dapr init` and `dapr uninstall` commands.