【Kubernetes的Knative Servina、Knative Eventing 核心概念及Broker、Channel and Trigger使用】

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【Kubernetes的Knative Servina、Knative Eventing 核心概念及Broker、Channel and 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的使用示例,它们可以帮助我们构建事件驱动的云原生应用程序。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的使用示例,它们可以帮助我们构建事件驱动的云原生应用程序。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
Kubernetes 调度 Perl
在K8S中,Pod亲和性概念是什么?
在K8S中,Pod亲和性概念是什么?
|
1月前
|
Kubernetes 持续交付 微服务
深入浅出:理解 Kubernetes 核心概念
Kubernetes 是一个由 Google 开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它已成为微服务架构下的行业标准。本文深入浅出地介绍了 Kubernetes 的核心概念和组件,包括 Master 和 Node 组件、Pod、Service、Deployment 等,并提供了基本操作示例和实战应用,帮助你更好地管理和利用容器环境。
|
15天前
|
存储 Kubernetes 调度
K8S中的核心概念
【10月更文挑战第26天】云原生环境下的安全问题易被忽视,导致潜在风险。应用层渗透测试和漏洞扫描是检测安全的关键,尤其是对于CVE漏洞的修复。然而,常见误解认为安全由外部防护处理且不易引入问题。
|
3月前
|
Kubernetes 负载均衡 安全
在k8S中,网络模型概念是什么?
在k8S中,网络模型概念是什么?
|
3月前
|
存储 Kubernetes Cloud Native
在k8S中,rook概念是什么?
在k8S中,rook概念是什么?
|
3月前
|
JSON Kubernetes Cloud Native
在k8S中,CNI模型概念是什么?
在k8S中,CNI模型概念是什么?
|
3月前
|
消息中间件 Kubernetes 数据库
在k8S中,初始化容器(init container)概念原理是什么?
在k8S中,初始化容器(init container)概念原理是什么?
|
3月前
|
存储 Kubernetes Docker
在K8S中,与K8S相关基础概念有哪些?
在K8S中,与K8S相关基础概念有哪些?
|
4月前
|
存储 Kubernetes 负载均衡
k8s原理概念基础入门
k8s原理概念基础入门
198 2
|
4月前
|
Kubernetes 负载均衡 Cloud Native
Kubernetes经典理论与核心概念解析
Kubernetes经典理论与核心概念解析