08-Event Sources和Sink架构

news/2024/5/20 8:17:51 标签: 架构, 云原生, knative, serverless

1 PingSource -> Kubernetes Service Sink

  • 架构模型

    在这里插入图片描述

  • 示例1

    • 部署一个kubernetes类型的sink,这里面还是以event-display为例,下面是资源清单

      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: event-display
      spec:
        replicas: 1
        selector:
          matchLabels: &labels
            app: event-display
        template:
          metadata:
            labels: *labels
          spec:
            containers:
              - name: event-display
                image: ikubernetes/event_display
      ---
      kind: Service
      apiVersion: v1
      metadata:
        name: event-display
      spec:
        selector:
          app: event-display
        ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      
    • 定义pingsource资源,指定sink为event-display

      apiVersion: sources.knative.dev/v1
      kind: PingSource
      metadata:
        name: ping-00001
      spec:
        schedule: "* * * * *"
        contentType: "application/json"
        data: '{"message": "Hello Eventing!"}'
        sink:
          ref:
            apiVersion: v1
            kind: Service
            name: event-display
      

      后面knative-eventing的namespace会出现pingsource的POD

      在这里插入图片描述

    • 获取event-display当中的日志信息,验证是否进行了事件发送

      kubectl logs -f event-display-6496b6c66d-7drk5
      

      在这里插入图片描述

2 PingSource → Knative Service Sink

  • 架构

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 示例2

    • 部署一个kservice类型的sink,这里面还是以event-display为例,下面是资源清单

      ---
      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          metadata:
            annotations:
              autoscaling.knative.dev/min-scale: "1"
          spec:
            containers:
              - image: ikubernetes/event_display
                ports:
                  - containerPort: 8080
      
    • 定义pingsource资源,指定sink为event-display

      ---
      apiVersion: sources.knative.dev/v1
      kind: PingSource
      metadata:
        name: pingsource-00001
      spec:
        schedule: "* * * * *"
        contentType: "application/json"
        data: '{"message": "Hello Eventing!"}'
        sink:
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
      
    • 获取event-display当中的日志信息,验证是否进行了事件发送

      kubectl logs -f event-display-00001-deployment-7f488cb57b-grsc6
      

      在这里插入图片描述

3 ContainerSource → Knative Service Sink

  • 旨在收集一些容器的event是,比如容器的一些元数据,下面是架构

    在这里插入图片描述

  • 示例2

    • 部署一个kservice类型的sink,这里面还是以event-display为例,下面是资源清单

      ---
      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          metadata:
            annotations:
              autoscaling.knative.dev/min-scale: "1"
          spec:
            containers:
              - image: ikubernetes/event_display
                ports:
                  - containerPort: 8080
      
    • 定义containergsource资源,指定sink为event-display

      apiVersion: sources.knative.dev/v1
      kind: ContainerSource
      metadata:
        name: containersource-heartbeat
      spec:
        template:
          spec:
            containers:
              - image: ikubernetes/containersource-heartbeats:latest
                name: heartbeats
                env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
        sink:
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
      

      在event-display的名称空间创建了一个containersource的pod

      在这里插入图片描述

    • 获取event-display当中的日志信息,验证是否进行了事件发送

      kubectl logs -f event-display-00001-deployment-645944b779-2b4vt
      

      在这里插入图片描述

4 ApiServerSource → Knative Service Sink

  • apiserversource主要记录了aoiserver上的event,比如create/delete/update/get,架构如下:

    在这里插入图片描述

  • 示例4:

    • 部署一个kservice类型的sink,这里面还是以event-display为例,下面是资源清单

      ---
      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          metadata:
            annotations:
              autoscaling.knative.dev/min-scale: "1"
          spec:
            containers:
              - image: ikubernetes/event_display
                ports:
                  - containerPort: 8080
      
    • 定义ServiceAccount:定义向指定目标资源的get,watch,list的相关权限

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: pod-watcher
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: pod-reader
      rules:
      - apiGroups:
        - ""
        resources:
        - pods
        verbs:
        - get
        - list
        - watch
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: pod-reader
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: pod-reader
      subjects:
      - kind: ServiceAccount
        name: pod-watcher
      
    • 定义apiserversource资源,结合serviceaccount,对指定权限的pod进行收集event

      apiVersion: sources.knative.dev/v1
      kind: ApiServerSource
      metadata:
        name: pods-event
      spec:
        serviceAccountName: pod-watcher
        mode: Reference
        resources:
        - apiVersion: v1
          kind: Pod
        sink:
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
      

      会发现创建一个apiserversource的pod

      在这里插入图片描述

    • 获取event-display当中的日志信息,验证是否进行了事件发送

      kubectl logs -f event-display-00001-deployment-9469968cd-vb4l2 
      

      在这里插入图片描述

5 GitLab Source

  • 关于GitLabSource
    • 将GitLab仓库上的事件转为CloudEvents
    • GitLabSource为指定的事件类型创建一个Webhook,监听传入的事件,并将其传给消费者
  • GitLabSource支持的事件类型包括如下这些:
    • 推送事件:push_events
      • 对应的CloudEvents的类型为“dev.knative.sources.gitlab.push”,以下类同
    • tag推送事件:tag_push_events
    • 议题事件:issues_events
    • 合并请求事件:merge_requests_events
    • 私密议题事件:confidential_issues_events
    • 私密评论:confidential_note_events
    • 部署事件:deployment_events
    • 作业事件:job_events
    • 评论:note_events
    • 流水线事件:pipeline_events
    • Wiki页面事件:wiki_page_events
5.1 GitLab Source 实践
  • 示例环境说明

    • 一个部署可用的GitLab服务
    • GitLab服务上隶于某个用户(例如root)的代码仓库(例如myproject)
    • 负责接收CloudEvents的kservice/event-display

    在这里插入图片描述

  • 具体步骤

    • 部署Gitlab
    • GitLab上的操作
      • 为GitLab用户设置Personal Access Token
      • 准备示例仓库myproject
    • 在Knative上部署GitLabSource
    • 在Knative上部署KService/event-display
    • 创建Secret资源,包含两个数据项
      • GitLab上的Personal Access Token
      • GitLab调用GitLabSource与Webhook Secret
    • 创建GitLabSource资源
      • 从GitLab仓库加载事件
      • 将事件转为CloudEvents,并发往Sink
  • 具体操作

    • 部署GitLab
    • Gitlab上操作
      • 通用→可见性:设定“自定义HTTP(S)协议Git克隆URL”

http://www.niftyadmin.cn/n/5272859.html

相关文章

python使用COM访问Windows应用

COM(Component Object Model)是Microsoft开发的一种用于实现对象之间跨进程通信和对象创建的标准。COM是一种二进制接口标准,它定义了对象之间如何通信和交互。COM技术使得不同语言编写的软件组件可以在Windows平台上互操作,并且可…

排列组合-第11届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第18讲。 排列组合&#xf…

Linux---Ubuntu软件安装

1. 软件安装的介绍 Ubuntu软件安装有两种方式: 离线安装(deb文件格式安装)在线安装(apt-get方式安装) 2. deb文件格式安装 是 Ubuntu 的安装包格式,可以使用 dpkg 命令进行软件的安装和卸载。 命令说明dpkg安装和卸载deb安装包 dpkg命令选项: 选项…

pytorch——豆瓣读书评价分析

任务目标 基于给定数据集,采用三层bp神经网络方法,编写程序并构建分类模型,通过给定特征实现预测的书籍评分的模型。 选取数据 在各项指标中,我认为书籍的评分和出版社、评论数量还有作者相关,和其他属性的关系并大。…

C# 图解教程 第5版 —— 第19章 枚举器和迭代器

文章目录 19.1 枚举器和可枚举类型19.2 IEnumerator 接口19.3 IEnumerable 接口19.4 泛型枚举接口19.5 迭代器19.5.1 迭代器块19.5.2 使用迭代器来创建枚举器19.5.3 使用迭代器来创建可枚举类型 19.6 常见迭代器模式19.7 产生多个可枚举类型19.8 将迭代器作为属性19.9 迭代器的…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式&…

Webpack安装及使用

win系统 全局安装Webpack及使用 前提:使用Webpack必须安装node环境,建议使用nvm管理node版本。 1:查看自己电脑是否安装了node 2:npm install webpack版本号 -g 3:npm install webpack-cli -g -g:表示全局安装 4&…

PCL 已知同名点对计算旋转矩阵并对点云进行旋转

目录 一、 算法概述二、代码实现三、测试示例一、 算法概述 适用:已知三组及三组以上的同名点对,计算旋转矩阵;然后根据旋转矩阵对点云进行旋转,最后保存旋转后的点云文件。 二、代码实现 #include <Eigen/Core> #include <Eigen/Dense>