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