Knative是一个构建在Kubernetes上的平台,它提供了一些高级别的抽象,简化了构建和管理云原生应用程序的过程。其中,Knative Serving用于自动管理应用程序的版本和流量分发,让开发者只需要专注于代码编写;Knative Eventing为云原生应用程序提供了事件驱动的能力,支持事件的生产、转换和消费。

其中,Knative Eventing的核心概念包括Broker、Channel和Trigger。

  • Broker:Knative Eventing的消息中间件,负责接收和传递事件消息。
  • Channel:用于在Broker和事件源之间交换信息的通道。
  • Trigger:触发器描述了事件源和Channel之间的关系,即事件源产生事件后应该将事件发送到哪个Channel中。

下面我们将通过一个简单的示例来演示如何使用Knative Eventing的Broker、Channel和Trigger。

首先,我们需要在Kubernetes集群上安装Knative Eventing:

kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-core.yaml

接着,我们定义一个事件源,这里使用HTTP源产生事件,将事件发送到名为test-channel的Channel中:

apiVersion: sources.knative.dev/v1beta1
kind: HttpSource
metadata:
  name: test-source
spec:
  sink:
    apiVersion: messaging.knative.dev/v1beta1
    kind: Channel
    name: test-channel

然后,我们创建一个名为test-channel的Channel:

apiVersion: messaging.knative.dev/v1beta1
kind: Channel
metadata:
  name: test-channel
spec:
  clusterBus:
    enabled: true

这里我们启用了集群总线(ClusterBus),用于支持跨命名空间和跨集群的事件传递。

最后,我们创建一个Trigger,它描述了事件源和Channel之间的关系:

apiVersion: eventing.knative.dev/v1beta1
kind: Trigger
metadata:
  name: test-trigger
spec:
  broker: default
  filter:
    attributes:
      type: test-event
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: test-service

这里,我们使用默认的Broker和过滤器,只接收type属性为test-event的事件。当事件源产生符合条件的事件时,它将被发送到名为test-channel的Channel中,然后由test-service服务进行消费。

最后,我们创建一个test-service服务,用于处理事件:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: test-service
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
          env:
            - name: MESSAGE_OUT
              value: "Hello, World!"

这里我们使用官方提供的event_display镜像,它可以将接收到的事件信息打印到控制台上。

现在,我们可以使用curl命令模拟HTTP源产生事件:

curl -v -d '{"type":"test-event"}' -H "Content-Type: application/json" -X POST http://{INGRESSGATEWAY_IP}/

其中{INGRESSGATEWAY_IP}是Knative Serving Ingress Gateway的IP地址,可以通过以下命令获取:

kubectl get svc istio-ingressgateway -n istio-system

这时,我们会在控制台上看到打印出来的事件信息。

以上就是Knative Eventing的Broker、Channel和Trigger的使用示例,它们可以帮助我们构建事件驱动的云原生应用程序。Knative是一个构建在Kubernetes上的平台,它提供了一些高级别的抽象,简化了构建和管理云原生应用程序的过程。其中,Knative Serving用于自动管理应用程序的版本和流量分发,让开发者只需要专注于代码编写;Knative Eventing为云原生应用程序提供了事件驱动的能力,支持事件的生产、转换和消费。

其中,Knative Eventing的核心概念包括Broker、Channel和Trigger。

  • Broker:Knative Eventing的消息中间件,负责接收和传递事件消息。
  • Channel:用于在Broker和事件源之间交换信息的通道。
  • Trigger:触发器描述了事件源和Channel之间的关系,即事件源产生事件后应该将事件发送到哪个Channel中。

下面我们将通过一个简单的示例来演示如何使用Knative Eventing的Broker、Channel和Trigger。

首先,我们需要在Kubernetes集群上安装Knative Eventing:

kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-core.yaml

接着,我们定义一个事件源,这里使用HTTP源产生事件,将事件发送到名为test-channel的Channel中:

apiVersion: sources.knative.dev/v1beta1
kind: HttpSource
metadata:
  name: test-source
spec:
  sink:
    apiVersion: messaging.knative.dev/v1beta1
    kind: Channel
    name: test-channel

然后,我们创建一个名为test-channel的Channel:

apiVersion: messaging.knative.dev/v1beta1
kind: Channel
metadata:
  name: test-channel
spec:
  clusterBus:
    enabled: true

这里我们启用了集群总线(ClusterBus),用于支持跨命名空间和跨集群的事件传递。

最后,我们创建一个Trigger,它描述了事件源和Channel之间的关系:

apiVersion: eventing.knative.dev/v1beta1
kind: Trigger
metadata:
  name: test-trigger
spec:
  broker: default
  filter:
    attributes:
      type: test-event
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: test-service

这里,我们使用默认的Broker和过滤器,只接收type属性为test-event的事件。当事件源产生符合条件的事件时,它将被发送到名为test-channel的Channel中,然后由test-service服务进行消费。

最后,我们创建一个test-service服务,用于处理事件:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: test-service
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
          env:
            - name: MESSAGE_OUT
              value: "Hello, World!"

这里我们使用官方提供的event_display镜像,它可以将接收到的事件信息打印到控制台上。

现在,我们可以使用curl命令模拟HTTP源产生事件:

curl -v -d '{"type":"test-event"}' -H "Content-Type: application/json" -X POST http://{INGRESSGATEWAY_IP}/

其中{INGRESSGATEWAY_IP}是Knative Serving Ingress Gateway的IP地址,可以通过以下命令获取:

kubectl get svc istio-ingressgateway -n istio-system

这时,我们会在控制台上看到打印出来的事件信息。

以上就是Knative Eventing的Broker、Channel和Trigger的使用示例,它们可以帮助我们构建事件驱动的云原生应用程序。

06-09 09:14