KNative 事件集成¶
Seldon 实现了集成 KNative 事件的实时处理。
这允许 Seldon Core 用户通过触发器接收任何 来自 SeldonDeployments 的 Cloudevents 事件。
触发器¶
KNative Eventing 的工作方式是创建相关触发器发送到匹配到的相关位置。
Seldon Core 实现了 KNative Eventing Duck Typing 要求,允许用户创建引用特定 SeldonDeployments 的触发器。
可以使用以下格式创建名为 「iris-deployment」 的 SeldonDeployment 触发器示例:
apiVersion: eventing.knative.dev/v1beta1
kind: Trigger
metadata:
name: seldon-eventing-sklearn-trigger
spec:
broker: default
filter:
attributes:
type: seldon.iris-deployment.default.request
subscriber:
ref:
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
name: iris-deployment
这意味着任何类型为 「seldon.iris-deployment.default.request」 的 Cloudevents 都将被发送到名为 iris-deployment 的 SeldonDeployment。
URL 路径是通过我们从 Knative 中实现的 Duck Typing 来推断的,它会自动从 Kubernetes 资源状态中提取 URL,特别是从属性 status.addressable.url 中提取 URL。
对于每个 Seldon 部署,status.addressable.url始终是第一个预测器的服务名称、端口和路径。您可以在我们的 CRD 定义中看到 Addressable 类型。
覆盖 URI¶
在有多个预测器的情况下,或者您想通过入口发送 Cloudevent 的情况下,您实际上可以创建一个覆盖 URI 的触发器。这方面的一个例子如下:
apiVersion: eventing.knative.dev/v1beta1
kind: Trigger
metadata:
name: seldon-eventing-sklearn-trigger
spec:
broker: default
filter:
attributes:
type: seldon.iris-deployment.default.request
subscriber:
uri: http://istio-ingressgateway/seldon/default/iris-deployment/api/v1.0/predicions
然后它将创建一个触发器,将该类型的消息转发到该 URI。
发送测试请求¶
在生产中,您将有多个服务从各种不同的来源创建云事件。但对于测试,可以通过本地 docker 镜像通过终端使用 curl 向 KNative Eventing 代理发送请求:
kubectl run --quiet=true -it --rm curl --image=radial/busyboxplus:curl --restart=Never -- \
curl -v "default-broker.default.svc.cluster.local" \
-H "Ce-Id: 536808d3-88be-4077-9d7a-a3f162705f79" \
-H "Ce-specversion: 0.3" \
-H "Ce-Type: seldon.iris-deployment.default.request" \
-H "Ce-Source: seldon.examples.streaming.curl" \
-H "Content-Type: application/json" \
-d '{"data": { "ndarray": [[1,2,3,4]]}}'
这将会发送 seldon.iris-deployment.default.request 类型的云事件到默认空间的代理,它将自动匹配到实例中提供的触发器。
Seldon Cloudevent 响应¶
当接收到 Cloudevent 时,SeldonDeployments 将返回一个 Cloudevent 响应,该响应可供其他服务使用。
这意味着您可以创建更多触发器,这些触发器可以对结果数据执行其他操作。
触发器必须匹配是 SeldonDeployment 标准化的 cloudevent 标头,格式如下:
Ce-Id: SeldonDeployment unique request ID
Ce-Specversion: Version of the specversion used (default: 0.3)
Ce-Type: seldon.<sdep_name>.<namespace>.response
Ce-Source: seldon.<sdep_name>.<namespace>
这意味着你可以为 default 空间下的 seldon 部署 iris-deployment 创建一个触发器,如示例 pod 中创建了一个 event-display 可以打印 cloudevent 内容的触发器:
---
# Trigger to send events to service above
apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:
name: event-display
spec:
broker: default
filter:
attributes:
type: seldon.iris-deployment.default.response
source: seldon.iris-deployment
subscriber:
ref:
apiVersion: v1
kind: Service
name: event-display
---
# event-display app deploment
apiVersion: apps/v1
kind: Deployment
metadata:
n
ame: event-display
spec:
replicas: 1
selector:
matchLabels: &labels
app: event-display
template:
metadata:
labels: *labels
spec:
containers:
- name: helloworld-python
image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
---
# Service that exposes event-display app.
# This will be the subscriber for the Trigger
kind: Service
apiVersion: v1
metadata:
name: event-display
spec:
selector:
app: event-display
ports:
- protocol: TCP
port: 80
targetPort: 8080
这将显示与 SeldonDeployment 处理的所有云事件。
动手实例¶
我们有一个完整的笔记本,我们可以在其中端到端地展示这些功能。
您可以通过 Seldon Core KNative Eventing 实时流处理页面亲自尝试