04-Revision和流量管理

1 Revision

  • 关于Revision
    • 应用程序代码及相关容器配置某个版本的不可变快照
    • KService上的spec.template的每次变动,都会自动生成一个新的Revision
    • 通常不需要手动创建及维护
  • Revision的使用场景
    • 将流量切分至不同版本的应用程序间(Canary Deployment、Blue/Green Deployment)
    • 版本回滚: 默认的流量策略中,所有的请求都会由就绪状态的最新版本的Revision处理

2 KService的客户端流量处理

  • 集群外部流量
    • 通过KService的外部名称(ksvc-name.namespace.DOMAIN)将流量发给入口网关(例如istio-ingressgateway的Service使用的ExternalIP)的外部地址
      • 需要在集群外部的DNS系统上设定相应的名称解析
      • 暴露的服务较多时,可以使用泛域名解析
    • 通过KService使用的Domainmapping中定义的名称,将流量发往入口网关的外部地址
  • 集群内部流量
    • 未启用mesh时:通过KService的内部名称(ksvc-name.namespace.DOMAIN)将流量发往Knative使用的istio-system名称空间下的knative专用本地流量网关knative-local-gateway
    • 启用mesh时,流量将由mesh根据流量策略进行转发。此时,无须再设置本地流量网关
  • 支撑一个KService对象的流量转发的关键是Route

3 Route

  • Route
    • 由KService的spec.traffic自动生成
    • 未定义时,将由就绪状态的Revision列表中的最新版本的Revision接收和处理该KService的所有请求
    • Route依托入口网关和网格(或本地网关)完成流量转发
    • Route会自动按需创建如下资源
      • Kubernetes Service
      • Istio VirtualService(以Istio为网络层时)
  • 配置Private KService
    • 默认情况下,KService会由Knative同时配置内部(私有)或公共服务
    • 仅创建私有服务的方法,不暴露外部
      • 全局配置:修改configmap/config-domain,将默认域设置为svc.cluster.local;
      • 单KService配置:使用“networking.knative.dev/visibility”标签,并设定其值为cluster-local
        • 设定于KService对象之上
        • 无KService时,设定于相关的Route和Kubernetes Service之上
    • 示例:~$ kubectl label ksvc hello networking.knative.dev/visibility=cluster-local
      • 提示:若为ksvc/hello设置了域名映射,则外部客户端依然可通过该映射对其进行访问

4 自定义流量策略

  • 修改Kservice流量策略的方法

    • 命令行:kn service update <service-name> --traffic revisionRef=percent
      • 引用revision的方法:revisonName、Tag,以及使用“@latest”引用最新的就绪版本
      • "–traffic"选项可以多次使用,直到全部的流量比例之和为100%
    • 在Kservice的资源配置上,使用spec.traffic进行定义
    • 为目标Kservice创建自定义Route资源,为其配置临时流量策略。
  • 命令行配置示例

    • 创建kservice/hello, 有2个revision: revision-001: hello world, revision-002: hello knative

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:name: hello
      spec:template:spec:containers:- image: ikubernetes/helloworld-goports:- containerPort: 8080env:- name: TARGETvalue: "World"
      ---
      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:name: hello
      spec:template:spec:containers:- image: ikubernetes/helloworld-goports:- containerPort: 8080env:- name: TARGETvalue: "knative"
      
    • 目前有2个revision,默认100%流量会到最新的那个revision

      在这里插入图片描述

    • 将流量完全发送给hello-00001这个Revision(rollback)

      kn service update hello --traffic hello-00001=100
      

      可以发现立即生效,所有的流量立马切换到Hello-00001的Revision:

      在这里插入图片描述

    • 将流量切分至不同的Reviision

      kn service update hello --traffic hello-00001=10 --traffic hello-00002=90
      

      验证:

      在这里插入图片描述

    • 将流量完全发送至最新的版本Revision

      kn service update hello --traffic '@latest'=100
      

      验证:将全部流量发送给最新的Revision

      在这里插入图片描述

  • 资源配置清单

    • 将流量发送给最新版本10%, revision-2 70%,revision-1 20%

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:name: hello
      spec:template:spec:containers:- image: ikubernetes/helloworld-goports:- containerPort: 8080env:- name: TARGETvalue: "Little boy"traffic:- latestRevision: truepercent: 10- revisionName: hello-00002percent: 70- revisionName: hello-00001percent: 20

      验证:基本7-2-1比例

      在这里插入图片描述
      在这里插入图片描述

5 路由标签(tag)

  • 场景:可以为特定的Revision打上tag,然后可以通过特定的URL格式来访问

    • 附带tag的路由项指向的Revision,可通过<tag-name>-<ksvc-name>.<namespace>.<domain>的歌格式访问;
    • 无tag的路由项,仅可通过<ksvc-name>.<namespace>.<domain>的格式访问
  • 管理标签的方法

    • 在Traffic Target上直接配置

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:name: hello
      spec:template:spec:containers:- image: ikubernetes/helloworld-goports:- containerPort: 8080env:- name: TARGETvalue: "Cloud-Native"traffic:- latestRevision: truepercent: 0tag: staging- revisionName: hello-00002percent: 90- revisionName: hello-00001percent: 10
      
    • 命令

      • 设定标签:kn service update <ksvc> --tag revisionRef=tagNmae
      • 删除标签: kn service update <ksvc> --untag tagName
    • 示例

      • 先给hello-00001打上tag名字为staging的标签:

        kn service update hello --tag hello-00001=staging
        
        kubectl get ksvc hello -o yaml
        

        在这里插入图片描述

      • 访问带tag的revision 00001

        curl -H "Host: staging-hello.default.icloud2native.com" 192.168.58.100
        

        在这里插入图片描述

6 Configuration Target和流量逐步迁移

  • Configuration Target

    • ConfigurationName也可以作为路由项中的流量目标,意味着相关的流量部分由该Configurate下最新就绪的Revision承载

    • 存在问题

      • 在新的Revision就绪之后,Configuration Target上的所有流量会立即转移至该Revision
      • 这可能会导致QP或Activator的请求队列过长,以至于部分请求可能会被拒绝
    • 解决方式

      • 在KService或Route上使用“serving.knative.dev/rollout-duration”注解来指定流量迁移过程的时长;新的Revision上线后,它会先从Configuration Target迁出1%的流量;随后再等分迁出余下的流量部分

      • 配置案例

        apiVersion: serving.knative.dev/v1
        kind: Service
        metadata:name: helloannotations:serving.knative.dev/rollout-duration: "380s"
        spec:
        ...traffic:- percent: 55configurationName: hello # Pinned to latest ready Revision- percent: 45revisionName: hello-00001 # Pinned to a specific Revision.
        

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

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

相关文章

MySQL查询语句基础解析

一般查询&#xff1a; ## 直接查询 语法&#xff1a;select 字段 from 表名&#xff1b; 举例&#xff1a;select name, age from student; 解析&#xff1a;从 student 表中查询 name 与 age## 条件查询 语法&#xff1a;select 字段 from 表名 where 条件&#xff1b; 举例&…

静态路由及动态路由

文章目录 静态路由及动态路由一、静态路由基础1. 静态路由配置2. 负载分担3. 路由备份4. 缺省路由5. 静态路由实操 二、RIP 动态路由协议1. RIP 协议概述2. RIP 协议版本对比2.1 有类路由及无类路由 3. RIP 路由协议原理4. RIP 计时器5. 度量值6. 收敛7. 示例 静态路由及动态路…

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…

使用TensorRT对Yolov5进行部署【基于Python】

如果还未配置TensorRT&#xff0c;请看这篇博文&#xff1a;Win11下TensorRT环境部署 这里使用TensorRT对Yolov5进行部署流程比较固定&#xff1a;先将pt模型转换为onnx&#xff0c;再将onnx模型转为engine&#xff0c;所以在执行export.py时要将onnx、engine给到include。 P…

Linear Regression线性回归(一元、多元)

目录 介绍&#xff1a; 一、一元线性回归 1.1数据处理 1.2建模 二、多元线性回归 2.1数据处理 2.2数据分为训练集和测试集 2.3建模 介绍&#xff1a; 线性回归是一种用于预测数值输出的统计分析方法。它通过建立自变量&#xff08;也称为特征变量&#xff09;和因变…

【Redis】五、Redis持久化、RDB和AOF

文章目录 Redis持久化一、RDB&#xff08;Redis DataBase&#xff09;触发机制如何恢复rdb文件 二、AOF&#xff08;Append Only File&#xff09;三、扩展 Redis持久化 面试和工作&#xff0c;持久化都是重点&#xff01; Redis 是内存数据库&#xff0c;如果不将内存中的数据…

微服务实战系列之ZooKeeper(实践篇)

前言 关于ZooKeeper&#xff0c;博主已完整的通过庖丁解牛式的“解法”&#xff0c;完成了概述。我想掌握了这些基础原理和概念后&#xff0c;工作的问题自然迎刃而解&#xff0c;甚至offer也可能手到擒来&#xff0c;真实一举两得&#xff0c;美极了。 为了更有直观的体验&a…

@Resource 和 @Autowired区别是什么?

Resource 和 Autowired 时&#xff0c;它们都是用于依赖注入的注解&#xff0c;但它们有一些不同之处。 来源&#xff1a; Resource 是Java EE标准的一部分&#xff0c;而且是JDK提供的&#xff0c;不属于Spring框架的注解。它的使用范围更广泛&#xff0c;不仅可以用在Spring中…

uniapp 预览图片

preImg(index){let urls []this.images.map((item,i) > {if(indexi){urls.unshift(item.file_path)}else{urls.push(item.file_path)}})uni.previewImage({urls})}

linux之Samba服务器

环境&#xff1a;虚拟机CENTOS 7和 测试机相通 一、Samba服务器_光盘共享&#xff08;匿名访问&#xff09; 1.在虚拟机CENTOS 7安装smb服务&#xff0c;并在防火墙上允许samba流量通过 2. 挂载光盘 3.修改smb.conf配置文件&#xff0c;实现光盘匿名共享 4. 启动smb服务 5.在…

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…

《C++并发编程》《线程管理》

文章目录 一、线程的基本管控1.1发起线程1.2等待线程完成1.3出现异常情况下等待1.4后台运行线程 二、向线程函数传递参数三、转移线程归属权四、运行时选择线程数量五、识别线程六、总结七、参考书籍 一、线程的基本管控 1.1发起线程 线程通过构建std::thread对象而启动&…

英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案

12月13-14日&#xff0c;“凝心聚力&#xff0c;共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动&#xff0c;市场总监李甘来先生现场发表了题为《AI哨兵&#xff0c;为铁路安全运营站好第一道岗》的精彩主题演讲&…

系统学习Python——装饰器:使用和定义装饰器

分类目录&#xff1a;《系统学习Python》总目录 正如我们所看到的&#xff0c;Python本身带有扮演特殊角色的内置装饰器一一静态方法和类方法声明、property创建等。此外&#xff0c;很多流行的Python工具包括装饰器&#xff0c;可执行管理数据库或用户接口逻辑等任务。在这样的…

1951 年以来的美国ACIS 气候地图数据集(5 公里空间分辨率)

应用气候信息系统 (ACIS) NRCC NN ACIS是Applied Climate Information System的缩写&#xff0c;是由美国国家气象局&#xff08;NOAA&#xff09;开发的一种气候信息系统。ACIS气候地图是通过收集和整理全球的气象数据&#xff0c;利用计算机技术和数据分析方法生成的气候图表…

计算机组成原理-选择语句和循环语句的汇编表示

文章目录 选择语句jmpjxx示例&#xff1a;选择语句的机器级表示扩展&#xff1a;cmp指令的底层原理 循环语句使用条件转移指令实现循环用loop指令实现循环 选择语句 不一定知道指令的位置&#xff0c;所以jmp直接跳转到指令的位置很难办 jmp 标号相当于位置&#xff0c;名字…

解决win11杀毒(不能安装破解软件的问题)

1、下载火绒APP&#xff0c;打开火绒APP软件 2、点击菜单&#xff0c;选择安全设置 3、选择病毒防护&#xff0c;修改病毒处理方式为询问我 4、这样在解压激活的软件就不会被windows的杀毒软件自动删除了 5、问题解决了就点击三连吧

Mysql基础知识

第一章&#xff1a;数据库概述 前置:LAMP LNMP 企业架构&#xff0c;服务定位示例 车库 菜场篮子 生活中的数据微信&#xff08;视频、音频、图片文字&#xff09;、饿了吗、美团、qq、绝地求生、王者荣耀 一、数据库基本概念 1.1 数据 1&#xff09; 描述事物的符号记录称…

永久删除的文件如何恢复?这3个简单方法可以帮到你!

“我在清理电脑的过程中&#xff0c;一不小心就删除了一些很重要的文件和数据&#xff0c;很想通过某种方法将这些数据找回来&#xff0c;但是不知道应该如何操作&#xff0c;有朋友可以分享一下文件找回的简单方法吗&#xff1f;” 在日常生活和工作中&#xff0c;我们时常会遇…

正则表达式零宽断言

正则表达式零宽断言 工具类&#xff0c;正则表达式匹配文本内容正则表达式语法例子例子01零宽断言?< 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类&#xff0c;正则表达式匹配文本内容 /*** 正则表达式工具类*/ public class…