【云驻共创】华为云云原生黄金课程10:Istio灰度发布管理

举报
boyce 发表于 2022/02/24 15:13:24 2022/02/24
【摘要】 应用服务网格(Application Service Mesh,简称ASM)是华为云基于开源Istio推出的服务网格平台,它深度、无缝对接了华为云的企业级 Kubernetes 集群服务 CCE,可为客户提供开箱即用的上手体验。无需复杂的后台配置(手写 yaml 文件),只需要通过界面简单的操作就可以实现丰富的灰度发布功能。

一、 业务灰度发布概述

1.1 灰度发布的定义和分类

  • 灰度发布是迭代的软件产品在生产环境安全上线的一种重要手段。
  • 应用服务网格基于 Istio 提供的服务治理能力,对服务提供多版本支持和灵活的流量策略,从而支持多种灰度发布场景。

1.1.2 金丝雀发布(灰度发布)

  • 在生产环境上引一部分实际流量对一个新版本进行测试,测试新版本的性能和表现,在保证系统整体稳定运行的前提下,尽早发现新版本在实际环境上的问题。
  • 通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态。

基于权重的灰度发布

可以根据需要灵活动态的调整不同服务版本的流量比例。

基于内容的灰度发布

可以根据请求的内容控制其流向的服务版本(CookieHeaderOSBrowser)。

 

1.1.3 蓝绿发布

  • 蓝绿发布提供了一种零宕机的部署方式。不停老版本,部署新版本进行测试,确认没问题,将流量切换到新版本,然后老版本同时也升级到新版本,始终有两个版本同时在线,有问题可以快速切换。
  • 在部署应用的过程中,应用始终在线。并且新版本上线过程中,不会修改老版本的任何内容,在部署期间老版本状态不受影响。只要老版本的资源不被删除,可以在任何时间回滚到老版本。

可以根据需要将全部流量在新旧版本之间进行切换。不同于灰度发布的任意切换流量比例,蓝绿发布的流量切换只能是 0 或者 100% 进行全量的切换,这样可以在其中一个版本出现问题的时候迅速切换到另外的版本。

将流量全部流向 Service B v2 版本:

将流量全部流向 Service B v1 版本:

1.2 灰度发布的流程

首先添加灰度版本,然后确认灰度版本正常上线可以接受流量,再配置灰度策略,最后观察灰度版本工作是否正常,是不是符合预期。如果一切正常,且灰度版本验证通过,就可以将灰度本提升为默认流量版本,再把原版本下线。如果灰度版本不正常,直接将灰度版本下线,而不会影响业务处理。

灰度发布全流程自动化管理:

  • 灰度版本一键部署,流量切换一键生效。
  • 配置式灰度策略,支持流量比例、请求内容(CookieOS、浏览器等)、源 IP
  • 一站式健康、性能、流量监控、实现灰度发布过程量化、智能化、可视化。

二、 ASM 灰度发布功能与使用场景介绍

2.1 灰度发布功能-基于内容的灰度发布

可根据请求的内容控制其流向的服务版本(CookieHeaderOSBrowser

2.1.1 界面操作

步骤1. 发起金丝雀灰度发布任务,选择一个服务进行灰度发布,选择一个灰度服务,再填入版本号。

步骤2. 给选定服务创建灰度版。选择镜像以及镜像对应的版本。

步骤3. 提交并等待灰度版本正常启动。当版本正常启动后,就可以进行下一步的配置。

步骤4.  在实例正常启动后,可以给灰度版本配置流量规则,分配流量。在这里选择基于内容的策略类型,然后可以配置 Cookie 内容、自定义 Header、允许访问的操作系统、允许访问的浏览器。

步骤5. 经过一段时间的运行,确认灰度版本正常运行,满足业务需求,则可以切换全部流量到灰度版本,原来版本下线。

2.1.2 后台操作

首先部署了一个 v2 版本,一个 k8s Deployment,在 labels 中定义了 app forecastversion v2,其中倒数第四行可以看到镜像的版本是 v2,最后一行配置了容器的端口号是 3002,这部分配置中最重要的是 labels 中的 version v2,使用它来区分服务不同的版本。

上面稍微了解了 Deployment Destination Rule,发布策略其实是定义在 Virtual Service中的。

对于一个 http 请求,如果 Header User-Agent Chrome 的请求,就会被路由到 subset v2,也就是上面的 v2 版本。如果 User-Agent 不是 Chrome 的请求,就会被路由到 subset v1 也就是 v1 版本。

结合上述的 DeploymentDestination Rule Virtual Service 就完成了基于内容的灰度发布。

2.2 灰度发布功能-基于权重的灰度发布

可以根据需要灵活动态的调整不同服务版本的流量比例。

2.2.1 界面操作

步骤1. 发起金丝雀灰度任务,选择一个服务进行灰度发布。

步骤 2. 给选定服务创建灰度版本。

步骤 3. 提交并等待灰度版本正常启动。

步骤 4. 在实例正常启动后,可以给灰度版本配置流量规则,分配流量。例如,基于流量的比例,40% 的流量访问 v2 版本,60% 的流量仍然访问 v1 版本。

步骤 5. 经过一段时间的运行,确认灰度版本运行正常,满足业务需求,则可以切换全部流量到灰度版本,原来版本下线。

2.2.2 后台操作

关于 Deployment Destination Rule 的配置和上面基于内容的灰度发布一致,主要区别是在 Virtual Service 上面。

这里没有 header 匹配的相关配置,而从 gateway 中进入的流量直接按照 destination weight 的配置比例访问不同的版本,60% 访问 v140% 访问 v2

2.3 灰度发布功能-蓝绿发布

可以根据需要将全部流量在新旧版本之间切换。

2.3.1 界面操作

步骤 1. 发起蓝绿发布任务,选择一个服务进行蓝绿发布。

步骤 2. 给选定服务创建灰度版本。

步骤 3. 提交并等待灰度版本正常启动,在实例正常启动后,切换全量流量到灰度版本。

步骤 4. 如果发现灰度版本有问题,也可以一键迁移回原版本,从而完成安全快速热回退。

2.3.2 后台操作

关于 Deployment Destination Rule 的配置也和上面基于内容的灰度发布一致,主要区别也是在 Virtual Service 上面。

这里和基于权重发布的区别在于,v2 版本的权重是 100,也就是全部流量都进入 v2

三、实验:基于 ASM 实现 web app 版本的灰度发布

3.1 实现程序功能简介

这款天气查询服务总共分为 4 个模块:

  • frontend:前台服务,展示整个应用的页面,使用js 开发而成。
  • advertisement:广告服务,返回静态的广告图片,使用 Golang 开发而成。
  • forecast:天气预报服务,返回相应城市的天气数据,使用js 开发而成。
  • recommendation:推荐服务,根据天气情况向用户推荐穿衣和运动等信息,使用 java 开发而成。

上图右侧为该服务的应用系统拓扑图。其中需要大家注意的时候,只有 v2 版本才会调用 recommendation 服务,而 v1 版本不会调用该服务。后面实验的时候可以看到调用不同版本的效果。

3.2 实验程序版本介绍

frontend 服务有两个版本:

  • v1 版本的界面按钮为绿色。

 

  • v2 版本的界面按钮为蓝色。

forecast 服务有两个版本:

  • v1 版本直接返回天气信息。

  • v2 版本会根据 recommendation 服务,获取推荐信息,并结合天气信息一起返回数据。

3.3 实验介绍

实验目的:

  • 能够对灰度发布的流程有一定的认识和了解。
  • 能够理解灰度发布的类型,配置简单的灰度策略。
  • 能够掌握检查灰度策略是否生效的方法,包括界面和后台命令。

实验前置条件:

  • 在 Kubernetes 集群上启用 Istio 服务网格。
  • 在集群上部署好天气预报应用的四个服务的 v1 版本,可实现服务间的访问互通。

实验关键步骤:

  1. 观察当前的服务调用关系,服务拓扑图和应用 UI
  2. 对 forecast 服务进行基于权重/内容的灰度发布,权重/策略可任意调整,并观察服务的调用关系。

常用命令:

kubectl get vs -n <namespace-name>     # 查看 virtual service
kubectl get dr -n <namespace-name>     # 查看 destination service 

如果想了解更多实验信息,请访问该课程华为云云原生黄金课程10Istio灰度发布管查看详细信息。

四、总结

应用服务网格(Application Service Mesh,简称ASM)是华为云基于开源Istio推出的服务网格平台,它深度、无缝对接了华为云的企业级 Kubernetes 集群服务 CCE,可为客户提供开箱即用的上手体验。无需复杂的后台配置(手写 yaml 文件),只需要通过界面简单的操作就可以实现丰富的灰度发布功能。

 

本文整理自华为云社区【内容共创】活动第13期。
https://bbs.huaweicloud.com/blogs/330939
任务16.
华为云云原生黄金课程10:Istio灰度发布管理

­­

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。