Seldon Core 灰度发布

关于 seldon-core 的流量路由,参考官方文档:Traffic Routing

一、理论

现代云原生应用程序通常由一组可独立部署的组件组成,这些组件也称作微服务。在微服务架构中,每个服务网络执行特定功能,开发者能够非常灵活地对应用做出调整,不会影响服务网络。这种组成应用程序的微服务网络也称作服务网格。
KubeSphere 服务网格基于开源项目 Istio 构建,可以控制应用程序不同部分之间的通信方式。其中,灰度发布策略为用户在不影响微服务之间通信的情况下测试和发布新的应用版本发挥了重要作用。

灰度发布策略

当您在 KubeSphere 中升级应用至新版本时,灰度发布可以确保平稳过渡。采用的具体策略可能不同,但最终目标相同,即提前识别潜在问题,避免影响在生产环境中运行的应用。这样不仅可以将版本升级的风险降到最低,还能测试应用新构建版本的性能。
KubeSphere 为用户提供三种灰度发布策略。

蓝绿部署

蓝绿部署会创建一个相同的备用环境,在该环境中运行新的应用版本,从而为发布新版本提供一个高效的方式,不会出现宕机或者服务中断。通过这种方法,KubeSphere 将所有流量路由至其中一个版本,即在任意给定时间只有一个环境接收流量。如果新构建版本出现任何问题,您可以立刻回滚至先前版本。

金丝雀发布

金丝雀部署缓慢地向一小部分用户推送变更,从而将版本升级的风险降到最低。具体来讲,您可以在高度响应的仪表板上进行定义,选择将新的应用版本暴露给一部分生产流量。另外,您执行金丝雀部署后,KubeSphere 会监控请求,为您提供实时流量的可视化视图。在整个过程中,您可以分析新的应用版本的行为,选择逐渐增加向它发送的流量比例。待您对构建版本有把握后,便可以把所有流量路由至该构建版本。

流量镜像

流量镜像复制实时生产流量并发送至镜像服务。默认情况下,KubeSphere 会镜像所有流量,您也可以指定一个值来手动定义镜像流量的百分比。常见用例包括:
● 测试新的应用版本。您可以对比镜像流量和生产流量的实时输出。
● 测试集群。您可以将实例的生产流量用于集群测试。
● 测试数据库。您可以使用空数据库来存储和加载数据。

灰度发布:将一部分实际流量引入一个新版本进行测试,测试新版本的性能和表现,在保证系统整体稳定运行的前提下,尽早发现新版本在实际环境上的问题。

流量复制:流量复制用来更为真实地测试新版本,提前发现问题,同时不对生产环境产生影响,从而,提高版本发布的安全性可靠性。

参考案例
https://v3-1.docs.kubesphere.io/zh/docs/project-user-guide/grayscale-release/overview/

二、Traffic Routing(流量路由)

Istio has the capability for fine grained traffic routing to your deployments. This allows:

  • canary updates(金丝雀更新)
  • green-blue deployments(蓝绿部署)
  • A/B testing
  • shadow deployments(流量复制)

file-seldon_core_canary_deployment-yaml

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: mexicanfood-canary
spec:
  name: mexicanfood-deployment
  predictors:
  # Green model deployment
  - componentSpecs:
    - spec:
        containers:
        - image: eugenefedorenko/samplemodel:1.0.0
          name: mexicanfood-classifier
          imagePullPolicy: Always
          ports: 
          - containerPort: 8080
            name: http
    graph:
      children: []
      endpoint:
        type: REST
      name: mexicanfood-classifier
    name: mexicanfood-predictor-green
    replicas: 1
    traffic: 70
  # Blue model deployment  
  - componentSpecs:
    - spec:
        containers:
        - image: eugenefedorenko/samplemodel:2.0.0
          name: mexicanfood-classifier
          imagePullPolicy: Always
          ports: 
          - containerPort: 8080
            name: http
    graph:
      children: []
      endpoint:
        type: REST
      name: mexicanfood-classifier
    name: mexicanfood-predictor-blue
    replicas: 1  
    traffic: 30  

istio概念

官方定义:它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用中,它是一个平台,可以与任何日志、遥测和策略系统进行集成,istio多样化的特性能够让你成功且高效的运行微服务架构,并提供保护、连接和监控微服务的统一方法。

定义有点长,可以抽取下几个要点:

istio是一个服务网格产品

拥有服务网格的基本特性,对应用层是透明的

为微服务架构而服务的
istio的核心功能可以提供保护、连接、保护和监控微服务系统

为什么要用istio这个单词来命名呢?大家可以猜测一下 哈哈哈~

这个词它其实并不是一个英语单词,而是来源于希腊语,它的意思是扬帆起航可以从它的logo中看出来是一个船的翻,由此可以联想出另一个产品“kubernetes” 它的logo是一个“舵”,这样一看来是非常有深意的:它的意思是你不仅要有kubernetes这个舵,还得有istio这个帆,由它们一起来驾驭着你的云原生应用扬帆起航驶向彼岸。istio还有一个非常重要的特性,它被称作第二代的Service Mesh在原有的数据平面的基础之上又增加了控制平面。
file
file

为什么使用Istio

优势
  • 轻松构建服务网格
  • 应用代码透明的无需修改
  • 最重要的一点就是功能强大

    流量控制:流量控制也是最重要的功能,比如说我们定义好相应的路由实现应用的蓝绿部署、灰度发布、A/B测试;当然也包括流量转移、超时重试、熔断这几个和系统弹性有关的功能,另外为了进行调试,还引入了故障注入、流量镜像调试功能;

    策略:我们可以通过一些相应的路由配置进行流量限制、黑白名单;

    网络安全:授权及身份验证(传输层安全、key管理);

    可观察性:通过指标收集、日志收集、分布式追踪最后通过可视化页面展示,进行实时观察系统的健壮性;

Istio浅析(概念、架构、核心功能、流量控制、安全)

三、视频

Seamless MLOps with Seldon and MLflow

file

file

file

三、灰度发布

四、流量复制(流量镜像)

流量镜像(Mirroring/traffic-shadow),也叫作影子流量,是指通过一定的配置将线上的真实流量复制一份到镜像服务中去,我们通过流量镜像转发以达到在不影响线上服务的情况下对流量或请求内容做具体分析的目的,它的设计思想是只做转发而不接收响应(fire and forget)。这个功能在传统的微服务架构里是很难做到的,一方面,传统服务之间的通讯是由SDK支持的,那么对流量镜像就代表着在业务服务逻辑中有着镜像逻辑相关代码的侵入,这会影响业务服务的代码的整洁性。另一方面,流量镜像的功能是需要非常灵活的,多维度,可动态管控的一个组件。如果将这样的一个组件集成到SDK中去完成它的使命后却无法及时清除,这样的设计势必是臃肿而繁琐的。所幸的是,随着微服务架构的发展,Service Mesh登上了历史舞台,成为新一代的服务架构引领者。而Istio作为Service Mesh优秀的落地架构,利用它本身使用Envoy代理转发流量的特性,轻松的支持了流量镜像的功能,再加上它的实现不需要任何代码的侵入,只需要在配置文件中简单加上几个配置即可完成。

file


相关文章:
好文|Istio流量镜像
Istio浅析(概念、架构、核心功能、流量控制、安全)
Seldon Core Traffic Routing
Canary Model Deployment with Seldon Core
Istio 实现灰度发布
Istio:灰度发布与技术实现
深度解析Istio系列之流量控制篇
Istio的流量镜像
Istio服务网格中的流量复制

为者常成,行者常至