【云原生系列】第三讲:Knative 之 Serving

news2025/1/17 18:10:43

目录

序言 

1. knative

1.1 发展历程

1.2 特点

2.Serving

2.1 基本介绍 

2.2 支持类型

2.3 资源类型 

2.3.1 service

2.3.2 Route

2.3.3 Configuration

2.3.4 Revision

2.4 Serving管理能力实现方式

2.4.1 四个 kubernetes Service

2.4.2 二个Deployment

2.4.3 Autoscaler的工作流程

​编辑

3总结

3.1 投票


序言 

前段时间研究了knative,今天专门来讲一下Knative 的 Serving模块

三言两语,不如细心探索

本文理论偏多,希望读完此文,能帮助读者对Knative Serving组件有一个初步的了解

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

1. knative

knative的介绍,在这篇文章,如果想详细了解的话,可以阅读一下

【云原生系列】第二讲:Knative 简介

我们来简单回忆一下Knative是什么。

1.1 发展历程

Knative 发展历程如下

1.2 特点

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

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

如下图所示:

Knative 将kubernetes和istio的复杂度进行抽象和隔离,解决了繁琐的构建,部署,服务治理步骤,并且基于开放标准使得服务变得可移植

2.Serving

Knative 组件包含两个大的领域,分别是Serving和Event。现在讲一下Serving部分。

2.1 基本介绍 

Serving即服务

基于Kubernetes的crd提供缩容至零、请求驱动的计算功能。它本质上是无服务器平台的执行和扩展组件。主要有以下特性:

  • 模型抽象:更高级层的抽象化,对象模型更易于理解。可快速部署无服务容器
  • 自动扩容:基于 HTTP 请求的无缝自动扩缩,自动扩缩容机制,支持缩容到零
  • 网络集成:自动集成网络和服务网格
  • 可扩展:连接日志记录、监控、等其他平台

2.2 支持类型

Knative Serving支持容器化的工作负载

      1.FaaS:传统FaaS的函数应用

通过将传统FaaS平台运行时框架与函数应用一起封装到容器中,实现对FaaS函数应用的支持。

       2.单一职责-微服务满足单一职责原则、可独立部署升级的服务

这一点上面,Knative很适合用来部署和管理微服务。

       3.无状态-应用:主要指传统无状态的单体应用

虽然Knative不是运行传统应用的最佳平台,但支持传统无状态应用的部署。

2.3 资源类型 

 Knative Serving 有四个主要资源:

  1. Service(服务)
  2. Route(路由)
  3. Configuration(配置)
  4. Revision(修订)

Knative Serving定义了一套CRD对象。这些对象用于定义和控制Serverless工作负载在集群中的行为,其关系如下:

2.3.1 service

  • Service:service.serving.knative.dev

资源会自动管理工作负载的整个生命周期

它控制其他对象的创建,以确保应用为服务的每次更新都具有路由,配置和新修订版。

可以将服务定义为始终将流量路由到最新修订版或固定修订版

创建服务时,它必须创建并拥有与服务同名的配置和路由、更新规范、元数据、标签和元数据。必须将服务注释复制到适当的配置或路由中,如下所示:

  • 元数据更改必须复制到配置和路由
  • 路由和配置上的dev/service标签必须设置为服务的名称
  • 必须移除上面未指定的配置和路线上的其他标签和注释
  • 特定规范字段与配置和路由中相应字段的映射

同样,服务必须根据其拥有的路由和配置的相应状态更新其状态字段。除一般就绪条件外,服务必须包括ConfigurationReady和RoutesReady条件;也可能存在其他条件。 

2.3.2 Route

  • Route:route.serving.knative.dev

资源将网络端点映射到一个或多个修订版。可以通过几种方式管理流量,包括部分流量和命名路由。

2.3.3 Configuration

  • Configuration:configuration.serving.knative.dev

资源维护部署的所需状态

它在代码和配置之间提供了清晰的分隔,并遵循了十二要素应用程序方法

修改配置会创建一个新修订。

十二要素应用程序方法 

  1. One codebase, one application - 一个代码库,一个应用程序
  2. Dependency management - 依赖管理
  3. Design, build, release, and run - 设计、构建、发布和运行
  4. Configuration, credentials, and code - 配置、证书和代码
  5. Logs - 日志
  6. Disposability - 易处理
  7. Backing services - 后端服务
  8. Environment parity - 环境等价
  9. Administrative processes - 管理进程
  10. Port binding - 端口绑定
  11. Stateless processes - 无状态进程
  12. Concurrency - 并发性

为了云原生应用程序而新增加3个因素:

  1. API first - API 优先
  2. Telemetry - 遥测
  3. Authentication and authorization - 认证和授权

2.3.4 Revision

  • Revision:reversion.serving.knative.dev

资源是对工作负载进行的每次修改的代码和配置的时间点快照

修订是不可变的对象,可以保留很长时间。也可以根据传入流量自动缩放实例数。

有关更多信息,请参见配置自动缩放器。

2.4 Serving管理能力​​​​​​​实现方式

Knative Serving组件包含k8s的

  • 4个kubernetes Service
  • 2个Deployment

构成了Serving的整体管理能力。

2.4.1 四个 kubernetes Service

1.autoscaler:接收请求指标数据并调整需要的Pod数量以处理流量负载

2.activator:负责为不活跃状态的修订版接收并缓存请求,同时报告指标数据给autoscaler。在autoscaler扩展修订版之后,它还负责将请求重试到修订版

3.controller协调所有公共Knative对象,自动扩展CRD

当用户请求一个Knative service给Kubernetes API,controller将创建对应配置和路由,并将配置转换为revision,同时将revision转化为deployment和KPA。

4.webhook拦截所有Kubernetes API调用以及所有CRD的插入和更新操作,用来设置默认值,拒绝不一致和无效的对象,验证和修改Kubernetes API调用。

2.4.2 二个Deployment

1.networking-certmanager:协调集群的ingrese为证书管理对象。

2.networking-istio:协调集群的ingress为Istio的虚拟服务。

2.4.3 Autoscaler的工作流程

Serverless的重要特点之一就是事件驱动计算

当没有请求时,系统不会分配相应的资源给服务。

因此,Knative Serving支持从零开始扩容,也支持缩容到零

在初始状态下,修订版的副本是不存在的。客户端发起请求时,系统要完成工作负载的激活过程。

Knative的扩缩容的流程如下图所示:

 初次请求:

1.请求通过入口网关转发给Activator

2.Activator负责为不活跃状态的修订版接收并缓存请求,同时报告指标数据给Autoscaler;3.Autoscaler会创建修订版的Deployment对象;Deployment对象根据Autoscaler设定的扩展副本数创建相应数量的Pod副本。

一旦Pod副本的状态变为Ready,Activator会将缓存的客户端请求转发给对应的Pod副本

4.Gateway然后会将新的请求直接转发给相应的Pod副本,不再转发给Activator

缩容到零的流程:

一定时间周期内没有请求时,Autoscaler会将Pod副本数设置为零回收Pod所占资源。

同时Gateway会将后续请求路由到Activator,如果后续请求出现可以触发初次请求流程

持续请求流程:

修订版副本中的Queue Proxy容器会不断报告指标数据给Autoscaler,Autoscaler会根据当前的指标数据情况以及扩缩容算法不断调整修订版的副本数量。

 Queue Proxy:

Knative服务对应的Pod里有两个容器,分别是

  1. User Container
  2. Queue Proxy

User Container:为Knative服务中定义的业务容器,包含应用程序及其依赖的运行环境。Queue Proxy:是系统容器,以Sidecar方式存在

Knative Serving为每个Pod注入Queue代理容器 (queue-proxy)。

queue-proxy容器负责向Autoscaler报告用户容器流量指标。

Autoscaler接收到这些指标之后,会根据流量指标相应的算法调整Deployment的Pod副本数量,从而实现自动扩缩容。

扩缩容算法:

Autoscaler 默认基于Pod接收到的并发请求数扩缩容资源。

Pod并发请求数的目标值(target)默认为100。

计算公式是:Pod数=并发请求总数/Pod并发请求数的目标值

如果Knative服务中配置并发请求数的目标值为10,那么如果加载了50个并发请求到Knative服务,Autoscaler 就会创建了5个 Pod。

Autoscaler实现了两种模式的缩放算法:

  1. 稳定模式(Stable)
  2. 恐慌模式(Panic)

稳定模式: 

在稳定模式下,Autoscaler自动调整Deployment的大小,以实现每个Pod所需的平均并发数。

Pod的并发数是根据60秒窗口期内接收到的所有数据请求的平均数来计算得出。

恐慌模式:

1.Autoscaler计算60秒窗口期内的平均并发数,系统需要60秒内稳定在所需的并发级别。

2.同时,Autoscaler 也会计算6秒的窗口期

当6秒窗口期内达到了目标并发数的2倍则会进入恐慌模式。

 

在恐慌模式下,Autoscaler将在时间更短、对请求更敏感的紧急窗口上工作。一旦紧急情况持续 60 秒,Autoscaler 将返回初始的 60 秒稳定窗口

3总结

Knative Serving组件是Knative的核心组件,它完成了一个Serverless计算平台最重要的能力,即服务的部署与弹性伸缩

Knative Service资源对象集成了配置管理、版本管理、流量控制以及扩缩容控制,极大地简化了Serverless的服务管理。

容器的主要限制:

  1. 必须是无状态的HTTP服务
  2. 允许挂载configmap,secret,projected,但不允许挂载持久卷pvc
  3. 一个Service只能有一个用户容器

若表达不当的地方,欢迎各位大佬评论区留言讨论~

3.1 投票

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

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

相关文章

5G无线技术基础自学系列 | 5G下行物理信道和信号

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G空中接口下行的物理信道包括PB CH、P…

[附源码]计算机毕业设计JAVA基于web旅游网站的设计与实现

[附源码]计算机毕业设计JAVA基于web旅游网站的设计与实现 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: …

docker打包多架构镜像(manifest)

在docker仓库上,经常能看到这样的镜像 在一个”镜像“中,包含了三个架构的镜像 本质上,外部看到的这个镜像,其实不算是一个镜像,应该称它为镜像清单列表(manifest list) manifest是一个文件&a…

通过面积证明:两个函数相乘 / 相除的导数为什么长成这样?

参考视频 MIT 微积分课程 两个函数相乘的导数 (f(x)g(x))′f′(x)g(x)g′(x)f(x)(f(x)g(x))^{}f^{}(x)g(x)g^{}(x)f(x)(f(x)g(x))′f′(x)g(x)g′(x)f(x) 这是我们都非常熟悉的公式,熟悉到根本不知道是咋推出来的其实推导这个公式有两种方法,一种就是靠…

微服务平滑迁移上云最佳实践

作者:草谷 背景 许多企业在做微服务架构改造的时候,在自建还是上云的选择上难以决策,选择上云后,在微服务上云过程中,如何能够做到不影响业务情况下平滑迁移呢,通过阅读本文,你可以快速获得以…

树之基本概念(有图头真相)

文章目录树的概念及结构1.树的概念2.树的相关概念3.树的表示4.树在实际中的应用树的概念及结构 1.树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#…

高项 干系人管理论文

4个过程: 1,识别干系人:识别能影响项目决策、活动或结果的个人、群体或组织,以及被项目、活动或者结果影响的个人、群体或者组织,并分析和记录他们的相关信息的过程。这些信息包括他们的利益、参与度、互相依赖、影响…

PDF怎么编辑文字?教你两招非常实用的方法

怎么在PDF文件上直接编辑文字呢?相信这是大家在刚接触PDF文件不久时发出的疑问。在发现文件中有需要改正的地方,想要编辑时发现编辑不了,出现这种情况时应该怎么办呢?今天教大家两种非常简单实用的方法,有需要的小伙伴…

《元宇宙工程》南京首发 落地实用是关键

2022年11月20日上午,由江苏省人工智能学会、南京信息工程大学人工智能学院(未来技术学院)、中国移动通信联合会元宇宙产业工作委员会联合主办,由南京信息工程大学元宇宙研究院、江苏省人工智能学会元宇宙专委会(筹&…

PMP考前最后2天思路整理

1 问题解决的思路,先分析,再行动。要直接、要直面。要有担当,要有作为,敢负责任。 2 风险管理里面的三个文件一定要分清楚:风险管理计划、风险登记册和风险报告。风险应对的五种方法每个是什么。各自在书里面举的例子…

NAND闪存改变了现代生活

1989年 我出生了, 额,扯远了。 1989年NAND闪存面世了,它曾经且正在改变了我们的日常生活。 NAND 闪存发明之所以伟大,是因为,有了这项颠覆性的发明,才有了我们现如今用的智能手机的高速大容量内存(eMMC、UF…

react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题

文章目录react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题需求问题问题根源部分代码参考react-window构造的虚拟列表使用react-resizable动态调整宽度和使用react-drag-listview拖拽变换列位置的问题 需求 项目中使…

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计

java项目-第154期ssm足球赛会管理系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm足球赛会管理系统》 该项目分为2个角色,管理员、用户。 用户可以浏览前台,包含功能有: 首页、球队介绍、球星介绍、线下足球、赛论坛信…

Revit中项目的正负零零,尺寸标注,标注生成问题

一、 Revit中如何改变项目的正负零零 有时候,在一个项目中,我们要改变项目的 正负零零,如下图 第一步,打开视图的“可见性/图形”,如图2 第二步,在“可见性/图形替换”中勾选“项目基点”,如图 …

TK爆品剖析 水晶首饰降临节日历持续火爆TikTok,独立站卖到断货

圣诞节是年末促销旺季的关键节点,很多商家都会推出圣诞主题礼物产品,比如圣诞树、圣诞贺卡、圣诞老人等等,但很少会推出降临节日历。 其实,“降临节日历”一直是人们在圣诞节前最喜欢的礼物。谷歌趋势显示,2021年圣诞节…

[Spring Cloud] Ribbon介绍与定义负载均衡

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

QXlsx 使用

QXls使用分两种方式: 1 直接加载pri文件,就可以使用;2 编译后作为Qt的模块加载使用; 此文章主要针对第二种使用方式做记录,该方式又分为两种编译器进行说明: 第一种,使用MinGW64位编译器&…

nginx部署web项目(跟着搞不出来,来砍我)

前端打包成dist,详情可以参考我的vue博客 vue速学_我要用代码向我喜欢的女孩表白的博客-CSDN博客 nginx下载地址:nginx1.16.1离线安装包_nginx1.16.1依赖-Web服务器文档类资源-CSDN下载 (如果报错缺少依赖,可以参考我的nginx-rtmp直播流博客…

文献阅读01_基于深度学习的个性化新闻推荐方法研究_20221114

论文信息 Subjects:新闻推荐;长短期用户表示;多视角学习;联合学习; (1)题目:Attention Is All You Need (你需要的就是关注) (2)文章下载地址:https://kreader.cnki.net/Kreader/Ca…

行业安全解决方案|腾讯打造汽车一体化安全防护,助力车企数字化安全

随着汽车智能化的发展,车联网、自动驾驶、车路协同等应用快速落地,汽车作为智能终端所产生的数据成指数级增长态势。然而,当汽车行业数字化转型正如火如荼进行时,新的安全挑战也接踵而至,车企甚至可能因忽视安全建设&a…