01-Knative基础

2023-12-20 22:51:51

1.1 Knative是什么

  • 基于kubernetes平台,用于部署和管理现代serverless工作负载,是serverless平台,而非serverless实现

    在这里插入图片描述

  • 若能够把kubernetes看作是一个分布式内核,则Knative也可被类比为该内核之上的分布式libc;

在这里插入图片描述

1.2 Knative项目

  • Knative项目简介
    • Google于2018年7月正式发布;
    • Kubernetes平台的原生扩展组件,让其能够轻松的部署,运行和管理serverless类型的云原生应用
    • 由RedHat,Google和IBM等公司,以及各种初创公司组成的开源社区共同维护
    • 目标在于Serverless技术标准化
  • Knative的组件
    • Serving
      • 部署管理及扩展无状态应用
      • 支持由请求驱动计算
      • 支持缩容到0
    • Eventing
      • 以声明的方式创建对事件源的订阅,并将事件路由到目标端点
      • 事件订阅、传递和处理
      • 基于pub/sub模型连接knative的工作负载
    • Build
      • 从源代码构建出应用镜像
      • 已经由独立的Tekton项目取代

1.3 Knative 架构

  • 遵照Kubernetes的范式,以扩展的方式,通过自定义API资源类型支持
    • 自动化完成服务的部署和扩缩容(Serving)
    • 标准化事件驱动基础设施(Eventing)
  • Serviing
    • Serving Controller
    • Resources API
      • Service
      • Configuration
      • Revision
      • Route
  • Eventing
    • Eventing Controller
    • Resources API
      • Broker
      • Trigger
      • EventType

1.3.1 Knative Serving架构

  • 相关的资源API定义在"serving.knative.dev"群组中

  • 主要包括四个CRD

    • Service
      • 对自动编排Serverless类型应用的功能的抽象,负责自动管理工作负载的整个生命周期
      • 能自动控制下面三个类型的资源对象的管理
    • Configuration
      • 反映了Service当前期望状态(Spec)的配置
      • Service对象的更新,也将导致Configuration的更新
    • Revision
      • Service的每次代码或者配置变更都会生成一个Revision
      • 快照型数据,read-only
    • Route
      • 将请求流量路由到目标Revision
      • 支持将流量按比例切分并路由到多个Revision

1.3.1 Knative Eventing

1.3.1.1 事件
  • 关于“事件”
    • 时间是一个不可变的小段数据,记录了系统在特定时间内的特定行为,或状态的转变
    • 通过读取系统的事件流(序列),可以重建系统的运行历史
    • 事件的格式
      • 事件的格式完全可由开发者自行决定
      • CNCF的CloudEvents规范至力于事件格式的标准化
      • 目前,众多云服务商都开始支持该规范
  • 关于“事件驱动”
    • 不存在一个规范、严格的定义,任何使用事件通知范式(pub/sub)的系统都是事件驱动的系统
    • 事件驱动的系统大体分为两类
      • 响应式(reactive):本质上是非同步性质的函数调用(或HTTP RESTful/RPC调用)
      • 流处理(stream processing):密集式、面向数据式使用事件,订阅者通常是流处理器,它从事件流中提取状态,并将状态传递给相关方
  • 关于“事件源(Event Sourceing)”
    • 事件数据的持久化模式
    • 通常基于事件日志保存不可变的事件信息
1.3.1.2 Knativing Eventing
  • Knative Eventing

    • 负责为事件的生产和消费提供基础设施,可将事件从生产者路由到目标消费者,从而让开发人员能够使用事件驱动架构
    • 各资源者是松散耦合关系,可分别独立开发和部署
    • 遵循CloudEvents规范

    在这里插入图片描述

1.4 重点说明

  • Knative是FaaS解决方案吗?
    • Knative并提供FaaS
    • 用户可在Knative和Kubernetes之上,借助于第三方项目自行构建FaaS系统,例如Kyma Project
  • Knative为Kubernetes扩展出的功能
    • Serving
      • 替代Deployment控制器,负责编排运行基于HTTP协议的无状态应用
      • 额外提供的功能特性
        • Knative的Service对象,相当于Kubernetes上的 Service+Deployment 的功能
        • 基于单个请求进行负载均衡
        • 基于请求的快速、自动化扩缩容,并支持收缩至0实例
        • 通过在Pod扩展时缓冲请求来削峰填谷
        • 流量切分
    • Eventing
      • 声明式事件配置接口

1.5 Knative适合运行的应用类型

  • Knative仅适合运行特定类型的应用:无状态、容器化的服务器应用
    • 监听于某套接字之上提供服务的应用,不适合运行批处理作业
    • 仅支持无状态应用,同一服务的各实例间无差别,可简单进行扩容和缩容;
    • 仅支持通过HTTP/1、HTTP/2或gRPC通信的服务端应用;
    • 应用程序要能够构建为OCI容器镜像;

1.6 如何获取Knative服务

  • 自行部署Knative
    • 需要事先准备出Kubernetes集群
    • 事先选定一个可用的网络层来路由和治理流量
      • Istio(istio-ingressgateway)
      • Contour
      • Kourier
  • 基于Knative的商业产品
    • Cloud Native Runtimes for VMware Tanzu
    • Google Cloud Run:Google完全托管(包括Kubernetes集群)的Knative平台
    • Google Cloud Run for Anthos/GKE:GKE集群中托管的Knative安装
    • IBM Cloud Kubernetes Service:IKS集群中托管的Knative安装
    • Red Hat OpenShift Serverless:Openshift托管的Openshift集群上的Knative安装
    • Pivotal Function Service(PFS):在Kubernetes上构建和运行函数、应用程序和容器的平台

文章来源:https://blog.csdn.net/weixin_38753143/article/details/135068052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。