11.3.2 创建Knative Eventing示例

Knative Eventing目前需要安装Knative Serving和Istio 1.0或更高版本,可以按照前面的章节安装搭建。或者可以使用以下命令安装核心Knative Eventing(提供内存中的ChannelProvisioner)和核心源(提供Kubernetes事件、GitHub和容器源),{版本号}为当前最新的安装版本:


kubectl apply --filename https://github.com/knative/eventing/releases/download/{版本号}/release.yaml
kubectl apply --filename https://github.com/knative/eventing-sources/releases/download/{版本号}/release.yaml

首先,创建一个名为testchannel的Channel,配置如下:


apiVersion: eventing.knative.dev/v1alpha1
kind: Channel
metadata:
  name: testchannel
spec:
  provisioner:
    apiVersion: eventing.knative.dev/v1alpha1
    kind: ClusterChannelProvisioner
    name: in-memory-channel

然后,创建一个名为events-sa的服务帐户,该服务账号监听Kubernetes事件的变化并将它们转发给Knative Eventing Framework,如下所示:


apiVersion: v1
kind: ServiceAccount
metadata:
  name: events-sa
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: event-watcher
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  creationTimestamp: null
  name: k8s-ra-event-watcher
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: event-watcher
subjects:
- kind: ServiceAccount
  name: events-sa
  namespace: default

为了接收事件,为特定命名空间创建具体的事件源,如下所示:


apiVersion: sources.eventing.knative.dev/v1alpha1
kind: KubernetesEventSource
metadata:
  name: testevents
spec:
  namespace: default
  serviceAccountName: events-sa
  sink:
    apiVersion: eventing.knative.dev/v1alpha1
    kind: Channel
    name: testchannel

为了检查Kubernetes事件源是否完全正常工作,我们将创建一个简单的Knative Service,将传入的消息转储到其日志中,如下所示:


# This is a very simple Knative Service that writes the input request to its log.
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: message-dumper
  namespace: default
spec:
  runLatest:
    configuration:
      revisionTemplate:
        spec:
          container:
            image: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/knative-eventing-sources-message_dumper:0.3.0

基于这个Knative服务,创建一个从该Channel到该服务的订阅Subscription,如下所示:


apiVersion: eventing.knative.dev/v1alpha1
kind: Subscription
metadata:
  name: testevents-subscription
  namespace: default
spec:
  channel:
    apiVersion: eventing.knative.dev/v1alpha1
    kind: Channel
    name: testchannel
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1alpha1
      kind: Service
      name: message-dumper