使用KEDA对Dapr应用进行自动缩放

    Dapr, with its modular building-block approach, along with the 10+ different pub/sub components, make it easy to write message processing applications. 由于Dapr可以在许多环境中运行(如虚拟机、裸机、云或边缘),因此Dapr应用的自动伸缩是由宿主管理的。

    对于Kubernetes,Dapr集成了,这是一个用于Kubernetes的事件驱动的自动伸缩组件。 Dapr的许多pub/sub组件与KEDA提供的扩展器重叠,因此很容易在Kubernetes上配置Dapr的deployment,以使用KEDA根据背压自动扩展。

    This how-to walks through the configuration of a scalable Dapr application along with the back pressure on Kafka topic, however you can apply this approach to any offered by Dapr.

    要安装KEDA,请遵循KEDA网站上的部署KEDA说明。

    如果你没有Kafka,你可以通过使用Helm将其安装到你的Kubernetes集群中,见下面的示例:

    检查Kafka部署的状态:

    1. kubectl rollout status deployment.apps/kafka-cp-ksql-server -n kafka
    2. kubectl rollout status statefulset.apps/kafka-cp-kafka -n kafka

    接下来,创建本例中使用的主题(这里用demo-topic为例):

    1. kubectl -n kafka exec -it kafka-client -- kafka-topics \
    2. --zookeeper kafka-cp-zookeeper-headless:2181 \
    3. --topic demo-topic \
    4. --create \
    5. --partitions 10 \
    6. --replication-factor 3 \
    7. --if-not-exists

    接下来,我们将为Kubernetes部署Dapr Kafka pub/sub组件。 将以下YAML粘贴到一个名为kafka-pubsub.yaml的文件中:

    上面的YAML定义了你的应用程序所订阅的pub/sub组件,也就是我们在上面创建的。 如果你使用了上面的Kafka Helm安装说明,你可以将brokers值保持不变。 否则,将其改为你的Kafka broker的连接地址字符串。

    另外,请注意consumerIDautoscaling-subscriber值设置,该值稍后用于确保KEDA和你的deployment使用相同的 。

    现在,将该组件部署到集群中:

      将以下内容粘贴到名为kafka_scaler.yaml的文件中,并在需要的地方配置你的Dapr deployment。

      在上面的文件中,这里有几点需要审视:

      • spec:scaleTargetRef部分的name是您的应用程序在Deployment中定义的Dapr ID(dapr.io/id注释的值)
      • pollingInterval是KEDA检查Kafka当前主题分区偏移量的以秒为单位的频率
      • minReplicaCount是KEDA为你的deployment创建的最小副本数量。 (注意,如果您的应用程序需要很长时间才能启动,最好将其设置为1,以确保部署的至少一个副本始终在运行。 否则,设置为,KEDA就会为你创建第一个副本)
      • maxReplicaCount是你的deployment的最大副本数量。 考虑到 Kafka分区偏移量的工作方式,你不应该将该值设置得高于主题分区的总数量。
      • Kafka metadata部分的topic应该设置为你的Dapr deployment所订阅的同一主题(在本例中demo-topic
      • 类似地,bootstrapServers应该设置为kafka-pubsub.yaml文件中使用的同一个broker的连接地址字符串
      • consumerGroup应该设置为与kafka-pubsub.yaml文件中的consumerID相同的值

      注意:将 Dapr 服务订阅和 KEDA 缩放器配置的连接字符串、主题和消费者组设置为 相同的值,对于确保自动缩放正常工作至关重要。

      接下来,将KEDA扩展器部署到Kubernetes:

        全部完成!

        现在,ScaledObject KEDA对象已经配置好了,你的deployment将根据Kafka主题的延迟进行扩展。 更多关于为Kafka主题配置KEDA的信息可以在获得。