mirror of https://github.com/dapr/docs.git
add KEDA (#123)
This commit is contained in:
parent
bfeef945ec
commit
71d3ac6de4
|
|
@ -0,0 +1,85 @@
|
||||||
|
# Autoscaling a Dapr app with KEDA
|
||||||
|
|
||||||
|
Dapr is a programming model that's being installed and operated using a sidecar, and thus leaves autoscaling to the hosting layer, for example Kubernetes.
|
||||||
|
Many of Dapr's [bindings](../../concepts/bindings#supported-bindings-and-specs) overlap with those of [KEDA](https://github.com/kedacore/keda), an Event Driven Autoscaler for Kubernetes.
|
||||||
|
|
||||||
|
For apps that use these bindings, its easy to configure a KEDA autoscaler.
|
||||||
|
|
||||||
|
## Install KEDA
|
||||||
|
|
||||||
|
To install KEDA, follow [these instructions](https://github.com/dapr/docs/tree/master/concepts/bindings#supported-bindings-and-specs) on the KEDA Github page.
|
||||||
|
|
||||||
|
## Create KEDA enabled Dapr binding
|
||||||
|
|
||||||
|
For this example, we'll be using Kafka.<br>
|
||||||
|
You can install Kafka in your cluster by using Helm:
|
||||||
|
|
||||||
|
```
|
||||||
|
# helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
|
||||||
|
$ helm install --name my-kafka incubator/kafka
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, we'll create the Dapr Kafka binding for Kubernetes.<br>
|
||||||
|
Paste the following in a file named kafka.yaml:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: dapr.io/v1alpha1
|
||||||
|
kind: Component
|
||||||
|
metadata:
|
||||||
|
name: kafkaevent
|
||||||
|
spec:
|
||||||
|
type: bindings.kafka
|
||||||
|
metadata:
|
||||||
|
- name: brokers
|
||||||
|
value: "my-kafka:9092"
|
||||||
|
- name: topics
|
||||||
|
value: "myTopic"
|
||||||
|
- name: consumerGroup
|
||||||
|
value: "group1"
|
||||||
|
```
|
||||||
|
|
||||||
|
The following YAML defines a Kafka component that listens for the topic `myTopic`, with consumer group `group1` and that connects to a broker at `my-kafka:9092`.
|
||||||
|
|
||||||
|
Deploy the binding to the cluster:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ kubectl apply -f kafka.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Create the KEDA autoscaler for Kafka
|
||||||
|
|
||||||
|
Paste the following to a file named kafka_scaler.yaml, and put the name of your Deployment in the required places:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: keda.k8s.io/v1alpha1
|
||||||
|
kind: ScaledObject
|
||||||
|
metadata:
|
||||||
|
name: kafka-scaler
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
deploymentName: <REPLACE-WITH-DEPLOYMENT-NAME>
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
deploymentName: <REPLACE-WITH-DEPLOYMENT-NAME>
|
||||||
|
triggers:
|
||||||
|
- type: kafka
|
||||||
|
metadata:
|
||||||
|
type: kafkaTrigger
|
||||||
|
direction: in
|
||||||
|
name: event
|
||||||
|
topic: myTopic
|
||||||
|
brokers: my-kafka:9092
|
||||||
|
consumerGroup: group2
|
||||||
|
dataType: binary
|
||||||
|
lagThreshold: '5'
|
||||||
|
```
|
||||||
|
|
||||||
|
Deploy the KEDA scaler to Kubernetes:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ kubectl apply -f kafka_scaler.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
All done!
|
||||||
|
|
||||||
|
You can now start publishing messages to your Kafka topic `myTopic` and watch the pods autoscale when the lag threshold is bigger than `5`, as defined in the KEDA scaler manifest.
|
||||||
Loading…
Reference in New Issue