DAPR Demo application
Configure and lauch minikube
minikube config set memory 8000
minikube config set cpus 4
minikube config set kubernetes-version 1.23.3
minikube start
Once minikube is running enable the ingress controller
minikube addons enable ingress
Read out the IP address of minikube with
minikube ip
and write those entries to your /etc/hosts
<minikube-ip> dapr.minikube backend.minikube grafana.minikube prometheus.minikube
In the subdirectory terraform run terraform apply, but first only for the resources that create CRDs
terraform apply -target=helm_release.kube-prometheus-stack -target=helm_release.dapr-system
Then create everything else
terraform apply
This will install
- DAPR in the namespace dapr-system
- The business services
- Monitoring
DAPR should be available under the http://dapr.minikube and show our services
and the following components
Number will return an incrementing number
curl http://backend.minikube/number
This call should return an incrementing value
Create a checkout. It does two things
- Call the number service to obtain a number
- Create a message to the topic checkout
curl -XPOST http://backend.minikube/checkout
Subscribed to the topic checkout
curl http://backend.minikube/order
Redis is used for the persistence
kubectl -n messaging exec -ti redis-master-0 -- redis-cli --pass redis keys \*
Redis is a state store
kubectl -n messaging exec -ti redis-master-0 -- redis-cli --pass redis hgetall 'number||orderNumber'
should return something like
1) "data"
2) "5"
3) "version"
4) "5"
Streams are used for sending asynchrous messages.
kubectl -n messaging exec -ti redis-master-0 -- redis-cli --pass redis xrange checkout - +
should give you some output like
1) 1) "1654699830640-0"
2) 1) "data"
2) "{\"datacontenttype\":\"text/plain\",\"source\":\"checkout\",\"type\":\"com.dapr.event.sent\",\"tracestate\":\"\",\"traceparent\":\"00-22295cc10dd4eb53ae9879363d0e4943-11aac0459158b429-00\",\"data\":\"1\",\"id\":\"e20734c9-607d-4b11-94fd-bd735c43bea4\",\"specversion\":\"1.0\",\"topic\":\"checkout\",\"pubsubname\":\"pubsub\",\"traceid\":\"00-22295cc10dd4eb53ae9879363d0e4943-11aac0459158b429-00\"}"
2) 1) "1654699925789-0"
2) 1) "data"
2) "{\"data\":\"2\",\"source\":\"checkout\",\"pubsubname\":\"pubsub\",\"traceparent\":\"00-7644aab7b8b858c9f99883fe6f6b8b03-07930bba2d1eccc5-00\",\"tracestate\":\"\",\"topic\":\"checkout\",\"traceid\":\"00-7644aab7b8b858c9f99883fe6f6b8b03-07930bba2d1eccc5-00\",\"id\":\"763d3813-887c-4bc1-a50b-94a83f28cfbc\",\"specversion\":\"1.0\",\"datacontenttype\":\"text/plain\",\"type\":\"com.dapr.event.sent\"}"
Restart all business services pods
kubectl -n backend get deployments | grep -v NAME | awk '{print $1}' | xargs kubectl -n backend rollout restart deployment