dapr - 事件的传递机制
gRPC services 定义
dapr 支持在各组件之间使用 gRPC 的方式通信。这些 gRPC 的 services 定义存放在 dapr/dapr 目录下。dapr/dapr/proto 下各目录的定义如下:
packages | description |
---|---|
common | common protos that are imported by multiple packages |
internals | internal gRPC and protobuf definitions which is used for Dapr internal |
runtime | Dapr and App Callback services and its associated protobuf messages |
operator | Dapr Operator gRPC service |
placement | Dapr Placement service |
sentry | Dapr Sentry for CA service |
本例的目的在于分析事件在不同 app 间的传递原理,所以将主要参考上述 runtime 部分的实现。
在本地调试基于 controller-runtime 的 webhook
KEDA http-add-on 简介
Kubernetes-based Event Driven Autoscaling - HTTP Add-On
The KEDA HTTP Add On allows Kubernetes users to automatically scale their HTTP servers up and down (including to/from zero) based on incoming HTTP traffic. Please see our use cases document to learn more about how and why you would use this project.
OpenFunction - 以 Serverless 的方式实现 Kubernetes 日志告警
概述
当我们将容器的日志收集到消息服务器之后,我们该如何处理这些日志?部署一个专用的日志处理工作负载可能会耗费多余的成本,而当日志体量骤增、骤降时亦难以评估日志处理工作负载的待机数量。本文提供了一种基于 Serverless 的日志处理思路,可以在降低该任务链路成本的同时提高其灵活性。
我们的大体设计是使用 Kafka 服务器作为日志的接收器,之后以输入 Kafka 服务器的日志作为事件,驱动 Serverless 工作负载对日志进行处理。据此的大致步骤为:
- 搭建 Kafka 服务器作为 Kubernetes 集群的日志接收器
- 部署 OpenFunction 为日志处理工作负载提供 Serverless 能力
- 编写日志处理函数,抓取特定的日志生成告警消息
- 配置 Notification Manager 将告警发送至 Slack
在这个场景中,我们会利用到 OpenFunction 带来的 Serverless 能力。
OpenFunction 是 KubeSphere 社区开源的一个 FaaS(Serverless)项目,旨在让用户专注于他们的业务逻辑,而不必关心底层运行环境和基础设施。该项目当前具备以下关键能力:
- 支持通过 dockerfile 或 buildpacks 方式构建 OCI 镜像
- 支持使用 Knative Serving 或 OpenFunctionAsync ( KEDA + Dapr ) 作为 runtime 运行 Serverless 工作负载
- 自带事件驱动框架