Knative 介绍

发布时间: 更新时间: 总字数:1332 阅读时间:3m 作者: IP上海 分享 网址

Knative是一个开源的企业级解决方案,用于在kubernetes平台中构建Serveless和管理事件驱动的应用程序。

介绍

  • Knative is an Open-Source Enterprise-level solution to build Serverless and Event Driven Applications
  • Serverless Containers in Kubernetes environments.
  • knative 是 k8s 原生扩展组件,用于部署、运行和管理 Serverless 类型的云原生应用
  • knative(读音 kay-nay-tiv),由 Google 在2018年7月正式发布,当前由 Redhat、Google和IBM,以及各种初创公司组成的开源社区共同维护

为什么需要 Serverless 容器

  • 配置简单,通过简化的YAML定义自定义的 CRDs
  • 弹性伸缩:支持缩资源数量为 0
  • 渐进式发布:根据您的需要选择发布策略
  • 事件集成:支持处理来自多个源的事件
  • 处理事件:支持事件代理(event broker)触发程序
  • 可扩展:Kubernetes原生集成和扩展

核心组件

knative flowchart graphic

说明:

  • ServingEventing 协同工作,管理任务和应用
  • Serving
    • 支持由请求驱动计算
    • 关注应用的网络、弹性伸缩(支持缩容至0)和版本(revision)记录
      • When you build or run a function, an Open Container Initiative (OCI) format container image is generated automatically for you, and is stored in a container registry(参考
    • 部署、管理和伸缩无状态应用规模
      • 替代 kubernetes Deployment 控制器,负责编排运行基于 HTTP 协议的无状态应用
      • knative 的 Serving 对象,相当于 Kubernetes 的 Service + Deployment 的功能
      • 流量切分
      • 通过在 Pod 扩展时缓冲请求来削峰填谷
      • 基于单个请求进行负载均衡
      • 基于请求的速度、自动扩缩容
  • Eventing
    • 以声明的方式创建对事件源的订阅,并将事件路由到目标端点
    • 管理事件的订阅(subscription)分发(delivery)和处理
    • 基于 pub/sub 模型连接 Serving
  • 旧版本存在的 Build 组件,已经拆分为 Tekton 项目,主要作用包括
    • 从源码构建出应用镜像

Serving

knative serving

参考:knative Serving

  • 相关资源定义在 serving.knative.dev 群组中
  • 主要包括4个CRDs
    • Service: service.serving.knative.dev
      • 自动控制下面三种类型资源对象的管理
      • 是对 Serverless 类型应用功能的抽象,负责整个 Serverless 的声明周期
    • Route: route.serving.knative.dev
      • 将请求路由到目标 Revision
      • 支持将流量按比例切分并路由到多个 Revision
    • Configuration: configuration.serving.knative.dev
      • 定义 Service 期望状态(spec)的配置
      • Service 的更新,也将导致 Configuration 的更新
    • Revision: revision.serving.knative.dev
      • Service 的每次代码或配置变更都生成一个 revision
      • revision 是快照数据,不可变

Eventing

参考:CloudEvents 介绍

Knative Eventing 是一个API集合,允许应用使用事件驱动架构(Event-driven architecture)模型

核心概念

kantive eventing

图参考自互联网

  • 事件源(Event Source) 事件生产者的抽象,参考
  • 事件类型(Event Type) 事件类型,在 Event Registry 中定义
  • 事件处理流(Eventing Flows) 支持两种类型:
    • Sequence
    • Parallel
  • Event Sinks 能接收 Event 的可寻址(addressable)或可调用(Callable)的资源,Knative Eventing Sink 支持三种类型:
    • Knative Service
    • Channels
    • Brokers
  • Knative Eventing 支持的事件传递模式
    • Sources to Sink:
      • 单一 Sink 模式,事件接收过程中不存在队列和过滤等操作
    • Channels and Subscriptions
      • Event Source 将事件发到多个 Channel
      • Channel 可以有多个 Subscription(即 Sink)
      • Channel 中的事件以 Cloud Event 格式传递
      • 不支持事件过滤
kantive eventing channel workflow

图参考

  • Brokers and 【
  • Brokers and Triggers
    • 功能类似于 Channels and Subscriptions 模式,且支持消息过滤
    • 事件过滤机制运行 Subscription 使用事件属性的条件表达式(Trigger)筛选事件
    • Trigger 负责订阅 Broker,并对 Broker 传递的消息进行过滤,并对消息进行格式化
    • 该模式为生产推荐的使用模式

代码架构

Knative 遵循 kubernetes 扩展方式,通过自定义 API 资源类型实现如下:

  • Serving 自动化完成服务的部署和扩缩容
  • Eventing 标准化事件驱动
  • knative
    • Serving
      • Serving Controller
      • Resources API
        • Service
        • Route
        • Configuration
        • Revision
    • Eventing
      • Eventing Controller
      • Resources API
        • Broker
        • Trigger
        • EventType

说明

  • Knative 并不提供 FaaS 方案,用户可以在 Knative + Kubernetes 基础上,借助其他项目(如Kyma)构建 FaaS 系统

参考

  1. https://knative.dev/docs/
  2. https://istio.io/latest/zh/blog/2022/merbridge/
  3. https://www.oreilly.com/library/view/knative-cookbook/9781492061182/ch04.html
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数