【K8S系列】第十讲:Knative 简介

news2025/7/12 15:08:04

目录

一、 Serverless介绍

二、Knative 介绍

2.1  Knative 的定位

2.2 Knative的组成 

2.2.1 Build 构建系统

2.2.2 Serving:服务系统

2.2.3 Eventing:事件系统

补充: 

三、总结:


一、 Serverless介绍

在讲Knative之前,需要先讲一下Serverless。

对于Serverless,目前还没有形成一个比较权威的定义,最新的一个定义是这样描述的:

“无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。”

最开始,“无服务器”架构试图帮助开发者摆脱运行后端应用程序所需的服务器设备的设置和管理工作。

这显然是不成立的,因为这项技术的目标并不是为了实现真正意义上的“无服务器”,而是指由第三方云计算供应商负责后端基础结构的维护,以服务的方式为开发者提供所需功能,例如数据库、消息,以及身份验证等。

简单地说,这个Serverless架构的目标:就是要让开发人员关注代码的运行而不需要管理任何的基础设施。

程序代码被部署在诸如AWS Lambda这样的平台之上,通过事件驱动的方法去触发对函数的调用。

也可以理解为,这是一种完全针对程序员的架构技术。为了简化开发人员的工作,提高业务实现效率而研发的一种架构。

其技术特点包括了事件驱动的调用方式,以及有一定限制的程序运行方式,例如AWS Lambda的函数的运行时间默认为3秒到5分钟。

从这种架构技术出现的两年多时间来看,这个技术已经有了非常广泛的应用,例如移动应用的后端和物联网应用等。

简而言之,无服务器架构的出现不是为了取代传统的应用。而是从具有高度灵活性的使用模式及事件驱动的特点出发

开发人员/架构师应该重视这个新的计算范例,它可以帮助我们达到减少部署、提高扩展性并减少代码后面的基础设施的维护负担

如下图,按照传统的方式,一个项目前端+后端+基础设施都是必须的,基本上项目都是需要有一套。

但是,对于无服务架构来说,拆分后端,比如把权限、业务应用、数据库等拆分,从而使得开发更灵活,复用性更强,也就是一直说的,缩短产品到落地的时间,从而缩短产品周期,提高整个项目实现的效率

这个也是无服务的主要意义。感觉架构的发展也好,服务的演变也好,所有的发展,基本上为了提高效率,更快的从想法到产品的一个落地实施。

但是,传统的 Serverless 解决方案自身的问题有一些问题,目前存在以下问题:

  • 缺乏统一标准。呈现碎片化,各家都有各自的实现。
  • 厂商锁定比如使用 AWS Lambda 就必须配套使用 AWS 的 DB, S3 等产品,这样用户就被该厂商绑定,不能进行随意的迁移或者迁移成本非常高。

为了解决传统的 Serverless这几个问题,Knative就出现了。 

二、Knative 介绍

Knative 是谷歌牵头发起的 Serverless 项目。

其目标是基于 Kubernetes 的 Serverless 解决方案,旨在标准化 Serverless,简化其学习成本。

Knative 是以 Kubernetes 的一组自定义资源类型(CRD)的方式来安装的,因此只需使用几个 YAML 文件就可以轻松地开始使用 Knative 了。

这也意味着,在本地或者托管云服务上,任何可以运行 Kubernetes 的地方都可以运行 Knative 和代码。

2.1  Knative 的定位

Knative构建在Kubernetes、Istio、Container的基础上,以K8S的CRD形式存在。

  1. 基础设施:Kubernetes作为基础设施:容器编排,解决应用编排和运行环境
  2. 通信设施:Isito作为通信基础设施层,保证服务的运行可检测、可配置、可追踪
  3. 模板+环境:Knative使用应用模板和统一的运行环境来标准化服务的构建、部署和管理

2.2 Knative的组成 

为了实现 serverless 应用的管理,knative 把整个系统分成了三个部分:

  • Build:构建系统,把用户定义的函数和应用 build 成容器镜像
  • Serving:服务系统,用来配置应用的路由、升级策略、自动扩缩容等功能
  • Eventing:事件系统,用来自动完成事件的绑定和触发

2.2.1 Build 构建系统

build 的功能是把用户的代码自动化构建成容器镜像

与普通docker+Dockerfile 构建容器相比较

Knative优势

  • 内部构建:是它的构建完成是在 kubernetes 中进行的,和整个 kubernetes 生态结合更紧密
  • 标准化:它旨在提供一个通用的标准化的构建组件,可以作为其他更大系统中的一部分

它的存在,更多是为了定义标准化、可移植、可重用、性能高效的构建方法

Knative 提供了 Build CRD 对象,让用户可以通过 yaml 文件定义构建过程。一个典型的 Build 配置文件如下:

apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: test-build
spec:
  serviceAccountName: build-auth-test #认证信息
  source:
    git:
      url: https://github.com/your-example/build-example.git #代码地址
      revision: master #分支信息
  steps:
  - name: ubuntu-example
    image: ubuntu
    args: ["ubuntu-build-example", "SECRETS-example.md"]
  steps:
  - image: gcr.io/example-builders/build-example
    args: ['echo', 'test-example', 'build']
  1. serviceAccountName :是构建过程中需要用到的密码和认证信息(比如连接到 git repo 的 SSH keys、push 镜像到 registry 的用户名和密码等);
  2. source :是代码信息,比如这里的 git 地址和分支;
  3. steps :是真正运行过程中的各个步骤,这个只是作为 demo,真正的构建过程一般是 pull 代码、 build 镜像和 push镜像到 registry 等逻辑。

因为大部分的构建过程都是一致的,因此 knative 还提供了 Build template 的概念,

Build template 封装了预先定义好的构建过程(就是封装了上面的 steps 过程),并提供了非常简单的配置参数来使用。

使用 build template 构建容器镜像就更简单了,只需要提供代码的地址和镜像名字即可,比如下面是使用 Google kaniko 模板构建 github 源码的 yaml 文件(需要在代码根目录存在 Dockerfile 文件

apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: test-kaniko-build
spec:
  serviceAccountName: build-auth-test #认证信息
  source:
    git:
      url: https://github.com/your-user/your-repo
      revision: master
  template:
    name: kaniko
    arguments:
    - name: IMAGE
      value: us.gcr.io/my-project/my-app

2.2.2 Serving:服务系统

基于负载自动伸缩,包括在没有负载时缩减到零。

允许为多个修订版本(revision)应用创建流量策略,从而能够通过 URL 轻松路由到目标应用程序。

knative serving 功能是基于 kubernetes 和 istio 开发

  • kubernetes 来管理容器(deployment、pod)
  • istio 来管理网络路由(VirtualService、DestinationRule)

可以认为 knative 提供了更高的抽象,自动封装掉了 kubernetes 和 istio 的实现细节。

serving 的核心功能是让应用运行起来提供服务。虽然听起来很简单,但包括了很多的事情:

  • 自动化启动和销毁容器
  • 根据名字生成网络访问相关的 service、ingress 等对象
  • 监控应用的请求,并自动扩缩容
  • 支持蓝绿发布、回滚功能,方便应用方法流程

2.2.3 Eventing:事件系统

使得生产和消费事件变得容易。

抽象出事件源,并允许操作人员使用自己选择的消息传递层。

serverless 最重要的是基于事件的触发机制,也就是说当某件事发生时,就触发某个特定的函数。

事件概念的出现,让函数和具体的调用方能够解耦。

函数部署出来不用关心谁会调用它,而事件源触发也不用关心谁会处理它。

为了让整个事件系统更有扩展性和通用性,knative 定义了很多事件相关的概念。简单介绍一下:

  • EventSource:事件源,能够产生事件的外部系统
  • Feed:把某种类型的 EventType 和 EventSource 和对应的 Channel 绑定到一起
  • Channel:对消息实现的一层抽象,后端可以使用 kafka、RabbitMQ、Google PubSub 作为具体的实现。
  • Subscription:把 channel 和后端的函数绑定的一起,一个 channel 可以绑定到多个knative service

补充: 

对于服务系统和事件系统,涉及到的内容比较多,后面会专门用2篇文章来讲解

三、总结:

knative的优势

  • 便利性:Knative 以 Kubernetes 作为其底层框架,因此无论是线上还是线下,任何 Kubernetes 集群,无论是云上 Kubernetes 服务还是自建 Kubernetes 集群,都可通过安装 knative 插件快速的搭建 serverless 平台。
  • 标准化:Knative 联合 CNCF,把所有事件标准化,统一为 CloudEvent,提供事件的跨平台,同时让函数和具体的调用方能够解耦。
  • 服务间解耦:使用 Knative 使得应用不在与底层依赖服务强绑定,可以跨云实现业务互通
  • 成熟的生态:Knative 基于 Kubernetes 体系构建,与 kubernetes 生态结合更紧密;
  • 自动伸缩:监控应用的请求,并自动扩缩容, 借助于istio(ambassador,gloo等)天生支持蓝绿发布、回滚功能,方便应用发布流程。
  • 应用监控:支持日志的收集、查找和分析,并支持 VAmetrics 数据展示、调用关系 tracing

Knative 解决了现在Serverless 的诸多问题

如果kubernetes是容器编排的事实上的标准,那么Knative也许就是未来serverless的事实上的标准

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【毕业设计】机器视觉手势检测和识别系统 - python 深度学习

文章目录0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构4 最后0 前…

线程池源码解析 2.工作原理与内部结构

线程池源码解析—工作原理与内部结构 工作原理 概述 线程池是线程的池子,本质上是通过单个线程执行多个并发任务,使得尽量少的创建线程,减少开销。在线程池内部,是没有区分核心线程和非核心线程的,是通过 Set 集合的…

拒绝内卷,阿里架构师整理的这份Java核心手册,堪称最强

2022年注定是不寻常的一年,在今年因为疫情以及各大大厂纷纷传来裁员的消息,引得整个互联网圈动荡不堪。腾讯裁员30%、京东、百度、字节等大厂都在纷纷裁员,引的这些中厂和小厂也跟风裁员。 这个时候外部的各种变化愈发证明一个重要的一点&am…

2022.11.7-11.13 AI行业周刊(第123期):技术人员的职业发展在哪里?

篇章一:技术人员的职业发展 上周和大学时的舍友聊天,交流当前大家的生活状态。 我们已经本科毕业将近10年了,他目前也有两个孩子,在湖北的一个地级市中,从事的是通信行业。 不过随着工作的时间越久,他发…

软件测试面试真题 | 黑盒测试和白盒测试的基本概念是什么?

在软件测试的面试中,什么是黑盒测试,什么是白盒测试是特别容易被问到的一个问题。 面试官问出这个问题,其实考察的是大家对于软件测试基础理论的掌握程度。下面来梳理一下这个问题的回答思路。 黑盒测试 黑盒测试会把被测的软件看作是一个…

只会加班的项目经理,迟早被淘汰

早上好,我是老原。 最近看到一个文章的标题「废掉一个人最好的方式,就是让他忙到没时间学习」,具体内容是什么我还没有细读,只看完标题,有一丝心酸和自豪: 有那么一群人,在玻璃渣里找糖吃&…

皮带跑偏检测系统

皮带跑偏检测系统对皮带运行状态进行全天候实时监测,一旦皮带跑偏检测系统监测到现场皮带跑偏、撕裂、堆煤、异物等异常情况时,系统马上开展警报,通知后台,并提醒相关人员及时处置。皮带跑偏检测系统并把警报截屏和视频储存到数据…

附参考文献丨艾美捷Cholesterol胆固醇说明书

Cholesterol胆固醇以固体形式提供。可以通过将胆固醇溶解在所选择的溶剂中来制备储备溶液,该溶剂应使用惰性气体吹扫。胆固醇以约30mg/ml的浓度溶于有机溶剂氯-仿中。 艾美捷Cholesterol胆固醇参数: CAS号:57-88-5 正式名称:&am…

自动驾驶入门:预测

目录 概念 预测方式 障碍物预测 递归神经网络在预测中的应用 轨迹生成 概念 无人车是在许多物体间穿梭行驶,其中许多物体本身就是一直在移动的,比如像其他汽车、自行车、行人。无人车需要预测这些物体的行为,这样才能确保做出最佳决策。…

工作中对InheritableThreadLocal使用的思考

最近在工作中结合线程池使用 InheritableThreadLocal 出现了获取线程变量“错误”的问题,看了相关的文档和源码后在此记录。 1. 先说结论 InheritableThreadLocal 只有在父线程创建子线程时,在子线程中才能获取到父线程中的线程变量;当配合…

coding持续集成

先看看官网的一些操作提示 1、创建SSH密钥对 2、创建制品仓库 看完官网的介绍,持续集成需要提前准备好SSH凭证和制品仓库,下面将让我们动手开始吧 一、创建SSH密钥对 登录服务器控制台,创建 SSH 密钥对。获取私钥对后将其录入至 CODING 中…

Netty源码阅读(2)之——服务端源码梗概

上文我们把客户端源码梗概大致了解了一下,这样再了解服务端源码就轻松一点,我们将从服务端和客户端的区别着手去解析。 目录 区别 ④ ③ ① ⑤ 区别 ④ 客户端:.option(ChannelOption.TCP_NODELAY, true) 在TCP/IP协议中,无论…

贪心算法小结

A-金银岛 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同&am…

ffmpeg视频编解码 demo初探(一)(包含下载指定windows版本ffmpeg)分离视频文件中的视频流每一帧YUV图片

参考文章1:YUV数据流编码成H264 参考文章2:【FFmpeg编码实战】(1)将YUV420P图片集编码成H264视频文件 文章目录第一个项目:分离视频文件中的视频流每一张图片弯路步入正轨下载官方编译的ffmpeg4.3(win64-g…

SpringFramework:SpringBean的生命周期

SpringFramework:SpringBean的生命周期 文章目录SpringFramework:SpringBean的生命周期一、SpringBean的生命周期1. 实例化 Bean2. 填充属性(DI)3. 初始化4. 销毁二、BeanDefinition1. 基本概念2. 大致结构3. Spring 构建它的优势…

深度学习必备Python基础知识充电2

一、python中的类 1.1 python中是有内置的数据类型的 intstr 1.2 创建新的数据类型 自定义类来实现这样的功能 二、年轻人的第一个python类 2.1 来尝试一下 # 年轻人的第一个自定义python类class Man:def __init__(self, name):self.name nameprint(initialized Succes…

【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

Validated参数校验的使用及注解详解你还在用if做条件验证吗?一、优雅的参数验证Validated1.Valid和Validated的用法(区别)2.引入并使用Validated参数验证二、javax.validation.constraints下参数条件注解详解三、自定义条件注解你还在用if做条件验证吗? …

【云原生之K8s】 Pod控制器

文章目录一、Pod控制器及其功用二、控制器的类型1.Deployment2.StatefulSet2.1 StatefulSet的组成2.2 常规service和无头服务区别2.3 示例小结3.DaemonSet4.Job5.CronJob一、Pod控制器及其功用 Pod控制器,又称之为工作负载(workload)&#x…

【毕业设计】机器视觉火车票识别系统 - python 深度学习

文章目录0 前言1 课题意义1.1 课题难点:2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别2.3.1 部分实现代码3 实现效果4 最后0 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问…

疑似大厂泄露!阿里内部Redis教程笔记,细节点满/效率翻倍

Redis是一个key-value存储系统,是当下互联网公司广泛采用的NoSQL数据库之一,也是Java程序员应知应会的必备技术。 这套笔记教程采用Redis 6.2.1版本,内容由浅入深,循序渐进,从Redis的基本概念开启讲解,内容…