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

简介: 【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的使用示例,它们可以帮助我们构建事件驱动的云原生应用程序。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 调度 Perl
在K8S中,Pod亲和性概念是什么?
在K8S中,Pod亲和性概念是什么?
|
12月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
629 24
|
Kubernetes 持续交付 微服务
深入浅出:理解 Kubernetes 核心概念
Kubernetes 是一个由 Google 开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它已成为微服务架构下的行业标准。本文深入浅出地介绍了 Kubernetes 的核心概念和组件,包括 Master 和 Node 组件、Pod、Service、Deployment 等,并提供了基本操作示例和实战应用,帮助你更好地管理和利用容器环境。
|
12月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
615 6
|
存储 Kubernetes 调度
K8S中的核心概念
【10月更文挑战第26天】云原生环境下的安全问题易被忽视,导致潜在风险。应用层渗透测试和漏洞扫描是检测安全的关键,尤其是对于CVE漏洞的修复。然而,常见误解认为安全由外部防护处理且不易引入问题。
|
Kubernetes 负载均衡 安全
在k8S中,网络模型概念是什么?
在k8S中,网络模型概念是什么?
|
存储 Kubernetes API
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
|
存储 Kubernetes 负载均衡
k8s原理概念基础入门
k8s原理概念基础入门
311 2
|
Kubernetes 负载均衡 Cloud Native
Kubernetes经典理论与核心概念解析
Kubernetes经典理论与核心概念解析
|
存储 Kubernetes Cloud Native
在k8S中,rook概念是什么?
在k8S中,rook概念是什么?

热门文章

最新文章