更新时间:2023-06-27 gmt 08:00

bookinfo应用的灰度发布实践-凯发k8国际娱乐官网入口

应用服务网格(application service mesh,简称asm)是基于开源istio推出的服务网格平台,它深度、无缝对接了企业级kubernetes集群服务云容器引擎(cce),在易用性、可靠性、可视化等方面进行了一系列增强,可为客户提供开箱即用的上手体验。

入门指引

灰度发布是迭代软件产品在生产环境安全上线的一种重要手段。本教程以bookinfo应用为例,向您讲解服务网格基于istio提供的服务治理能力。

bookinfo应用灰度发布流程包含以下步骤:

图1 入门流程

bookinfo应用分析

bookinfo是一个模仿在线书店的应用,页面上会显示一本书籍的描述,书籍的细节(如页数),以及关于书籍的一些评论。

bookinfo应用由四个单独的服务构成,几个服务是由不同的语言编写的。这些服务对应用服务网格asm并无依赖,但是构成了一个有代表性的服务网格的例子,即由多个服务、多个语言构成,且reviews服务具有多个版本。这四个服务的说明如下:

  • productpage:会调用details和reviews两个服务,用来生成页面。
  • details:包含了书籍的信息。
  • reviews:包含了书籍相关的评论,同时会调用ratings服务。
  • ratings:包含了由书籍评价组成的评级信息。

其中,reviews服务有3个版本:

  • v1(1.5.0)版本不会调用ratings服务。
  • v2(1.5.1)版本会调用ratings服务,并使用1到5个黑色星形图标来显示评分信息。
  • v3(1.5.2)版本会调用ratings服务,并使用1到5个红色星形图标来显示评分信息。

为了直观的展示灰度版本之间流量切换情况,本教程以reviews服务的1.5.1版本(黑星形)、1.5.2版本(红星形)为例进行说明。

图2 bookinfo应用的端到端架构

在asm中运行bookinfo应用,无需对应用自身做出任何改变,只需简单的在asm环境中对服务进行配置和运行,即把envoy sidecar注入到每个服务之中。最终的部署结果如图3所示。

图3 envoy sidecar注入之后的bookinfo应用

所有的服务都和envoy sidecar集成在一起,被集成服务的所有出入流量都被sidecar所劫持,这样就可以利用asm为应用提供服务路由、遥测数据收集以及策略实施等功能。

准备工作

在开始之前,您需要完成如下的准备工作。

  1. 创建虚拟私有云和子网。

    虚拟私有云(virtual private cloud,简称vpc)提供一个隔离的、用户自主配置和管理的虚拟网络环境,可以提升资源的安全性,简化用户的网络部署。

    1. 登录虚拟私有云vpc控制台。
    2. 单击右上角的“创建虚拟私有云”。
    3. 如果无特殊需求,界面参数均可保持默认,单击“立即创建”。

      详细参数说明可参考。

  2. (可选)创建密钥对。

    创建集群节点时,如果使用密钥对登录方式,需要提前创建好密钥对。

    1. 登录数据加密服务dew控制台。
    2. 选择左侧导航中的“密钥对管理”,单击“创建密钥对”。
    3. 输入密钥对名称,单击“确定”。

      密钥对名称由两部分组成:keypair-4位随机数字,使用一个容易记住的名称,如keypair-xxxx_asm。

      图4 创建密钥对
    4. 您的浏览器会提示您下载或自动下载私钥文件。文件名是您为密钥对指定的名称,文件扩展名为“.pem”。请将私钥文件保存在安全位置。然后在系统弹出的提示框中单击“确定”。

      为保证安全,私钥只能下载一次,请妥善保管,否则将无法登录节点。

  3. 创建负载均衡。

    弹性负载均衡将作为服务网格对外访问入口,被服务网格管理的应用流量,均从此实例进入并分发到后端服务。

    1. 登录弹性负载均衡elb控制台。
    2. 单击右上角的“购买弹性负载均衡”。
    3. 参考完成共享型弹性负载均衡的购买。
      • 网络类型:选择“公网”
      • 所属vpc、子网:选择1中创建的虚拟私有云和子网。
      图5 购买弹性负载均衡
  4. 创建集群。
    1. 登录云容器引擎cce控制台。
    2. 选择左侧导航中的“资源管理 > 集群管理”,单击“cce集群”右侧的“购买”按钮。

      创建集群的详细步骤请参见。

    3. “服务选型”页面设置如下参数,其余参数均采用默认值。
      • 集群名称:用户自行输入,此处设置为“cce-asm”
      • 虚拟私有云、所在子网:选择1中创建的虚拟私有云和子网。
    4. 单击“下一步:创建节点”,配置添加节点的参数。除节点规格和登录方式外,其余参数保持默认。
      • 节点规格:vcpus为4核,内存为8gb。

        此规格为部署bookinfo应用所需的最小资源。

      • 登录方式:选择2中创建的密钥对,用于远程登录节点时的身份认证。
    5. 单击“下一步:安装插件”,在“安装插件”步骤中选择要安装的插件。

      “系统资源插件”为必装插件,“高级功能插件”可根据实际需求进行选择性安装。

    6. 单击“下一步:配置确认”,阅读使用说明并勾选“我已知晓上述限制”,确认所设置的服务选型参数、规格等信息。
    7. 确认订单无误后,单击“提交”,集群开始创建。

      如果选择购买“包年/包月”的集群,请单击“去支付”,根据界面提示进行付款操作。

      集群创建预计需要6-10分钟,您可以单击“返回集群管理”进行其他操作或单击“查看集群事件列表”后查看集群详情。

  5. 自行准备bookinfo应用所需的镜像(如表1所示),将它们上传至swr镜像仓库,并且设置为“公开”。

    每个服务的镜像名称和镜像tag必须与表1保持一致,否则体验任务可能部署失败。

    表1 镜像列表

    服务

    镜像名称

    镜像tag

    productpage

    examples-bookinfo-productpage-v1

    1.5.0

    details

    examples-bookinfo-details-v1

    1.5.0

    ratings

    examples-bookinfo-ratings-v1

    1.5.0

    reviews

    examples-bookinfo-reviews-v1

    1.5.1

    examples-bookinfo-reviews-v1

    1.5.2

    以社区的bookinfo镜像为例,详细指导如下所述:

    1. 准备一台机器,要求可访问internet,并且已安装1.11.2及以上版本的docker。
    2. 依次执行以下命令,下载bookinfo应用所需的镜像。

      docker pull docker.io/istio/examples-bookinfo-productpage-v1:1.5.0

      docker pull docker.io/istio/examples-bookinfo-details-v1:1.5.0

      docker pull docker.io/istio/examples-bookinfo-ratings-v1:1.5.0

      docker pull docker.io/istio/examples-bookinfo-reviews-v2:1.5.0

      docker pull docker.io/istio/examples-bookinfo-reviews-v3:1.5.0

    3. 连接容器镜像服务,具体操作请参见使用容器引擎客户端上传镜像
    4. 5.b中下载的镜像打标签,注意镜像名称和镜像tag与表1保持一致。

      docker tag docker.io/istio/examples-bookinfo-productpage-v1:1.5.0 swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-productpage-v1:1.5.0

      docker tag docker.io/istio/examples-bookinfo-details-v1:1.5.0 swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-details-v1:1.5.0

      docker tag docker.io/istio/examples-bookinfo-ratings-v1:1.5.0 swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-ratings-v1:1.5.0

      docker tag docker.io/istio/examples-bookinfo-reviews-v2:1.5.0 swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-reviews-v1:1.5.1

      docker tag docker.io/istio/examples-bookinfo-reviews-v3:1.5.0 swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-reviews-v1:1.5.2

      其中,swr.cn-north-4.myhuaweicloud.com为镜像仓库地址,group为组织名称,请替换为实际取值。

    5. 上传镜像至swr镜像仓库。

      docker push swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-productpage-v1:1.5.0

      docker push swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-details-v1:1.5.0

      docker push swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-ratings-v1:1.5.0

      docker push swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-reviews-v1:1.5.1

      docker push swr.cn-north-4.myhuaweicloud.com/group/examples-bookinfo-reviews-v1:1.5.2

    6. 将镜像类型修改为“公开”,具体操作请参见编辑镜像属性

购买网格

企业版和基础版网格均支持一键体验任务。基础版可治理单个集群,且免费提供200实例规格,建议您的业务在正式加入网格前先使用基础版。

  1. 登录应用服务网格asm控制台。
  2. 单击右上角“购买网格”。
  3. 设置如下参数,其余参数均采用默认值。
    • 网格类型

      选择基础版。

    • 网格名称

      设置网格的名称。

    • istio版本

      网格支持的istio版本。

    • 集群

      选择4中创建的集群。

    • istio控制面节点

      如果需要高可用,建议选择两个或以上不同可用区的节点。

    • sidecar配置

      勾选集群的“default”命名空间,选择重启已有服务。

      图6 sidecar配置
  4. 设置完成后,在右侧的配置清单中确认网格配置,单击“提交”。

    创建时间预计需要1~3分钟,请耐心等待。当网格状态从“安装中”变为“运行中”,表示网格创建成功。

一键创建bookinfo应用

为集群开启应用服务网格功能后,可以通过“体验任务”创建一个bookinfo应用demo,具体操作如下:

  1. 登录应用服务网格asm控制台。
  2. 单击网格名称,进入详情页面。
  3. 选择左侧导航中的“体验任务”,单击bookinfo任务中的“安装”。
  4. 在右侧页面设置bookinfo应用所在的集群,在“负载均衡”中选择与所选集群处于同一vpc和子网的共享型负载均衡实例,设置一个对外端口,并填写bookinfo应用镜像所在的镜像仓库地址,如“swr.cn-north-4.myhuaweicloud.com/group”(group表示组织名称),单击“安装”。
    图7 安装bookinfo
  5. 等待bookinfo应用创建完成。创建完成后进入“服务管理”页面,配置诊断栏将显示为“正常”,bookinfo应用包含productpage、details、reviews、ratings四个服务。
    图8 服务列表

为服务添加灰度版本

本步骤将为bookinfo应用的“reviews”服务添加新的灰度版本,并配置相应的灰度策略,将原有生产环境的默认版本的流量引流一部分到新版本中。

下面将以为“reviews”服务添加一个v3新版本,且v3新版本接收bookinfo应用的30%流量为例进行配置。

部署灰度版本

  1. 在左侧导航中选择“灰度发布”,在金丝雀发布下,单击“立即发布”
  2. 配置灰度发布基本信息。
    • 灰度任务名称:用户自定义,此处设置为reviews-v3。
    • 命名空间:选择服务所在命名空间。
    • 灰度发布服务:在下拉框中选择reviews。
    • 工作负载:选择服务所属的工作负载。
  3. 配置灰度版本信息。
    • 部署集群:选择服务所属的集群。
    • 版本号:配置为v3。
    • 实例数量:使用默认。
    • 实例配置:镜像版本选择1.5.2,其他参数保持默认。
  4. 单击“发布”,待启动进度为100%,表明灰度版本部署成功。
    图9 查看启动进度

配置流量策略

为灰度版本设置流量策略,灰度版本会根据配置的流量配比引流老版本中的部分或全部流量。

  1. 灰度版本部署成功后,单击“配置流量策略”
  2. 设置流量策略。

    策略类型分为“基于流量比例”“基于请求内容”,通过页签选择确定。

    • 基于流量比例:根据流量比例配置规则,将从原版本中切分指定比例的流量到灰度版本。例如80%的流量走原版本,20%的流量走灰度版本。
    • 基于请求内容:根据请求内容配置规则,只有请求内容中满足特定条件的流量会切分到灰度版本上。例如只有在windows操作系统上的用户可以访问灰度版本。

    “基于流量比例”为例,且v3版本流量配比为20%。

    图10 流量策略
  3. 单击“策略下发”

    灰度策略的生效需要几秒的时间,您需要在“监测与处理”页面开通免费体验apm,或者购买apm套餐包,否则无法观测到原版本和灰度版本的流量监控数据。

    图11 开通免费体验apm
  4. “服务列表”页面,单击productpage服务中的“访问地址”。不断刷新页面,页面在v1和v3版本之间来回切换,并且比例大致接近4:1。
    图12 v1版本页面
    图13 v3版本页面
  5. 您也可以在一台已连接公网的机器上执行如下命令,持续访问productpage服务。

    while true;do wget -q -o- http://ip:port/productpage; done

    返回控制台的“监测与处理”页面查看v1和v3版本的实时流量监控情况。

    图14 流量监控详情
  6. 在“流量监控”页面,您可以查看bookinfo应用各服务之间的实时拓扑。asm提供的流量监控功能,可监控服务之间的拓扑、会话请求调用链、各环节耗时和rps、rt等性能状态。
    图15 流量监控拓扑

    从拓扑图可以看出,reviews-v1和reviews-v3服务的调用次数分别为706和167,比例大致接近4:1,符合设定的流量比例策略。成功实现了灰度发布。

灰度版本切换

检查v3版本的资源数与v1版本是否相匹配,确认其能承接v1的所有流量后,即可将v1流量全部切换到v3。

  1. 在“监测与处理”页面,单击v3版本后的“全流量接管”
    图16 全流量接管
  2. 单击“确定”

    页面右上角会提示全流量接管成功。在bookinfo应用页面,不断刷新页面,页面仅显示v3版本信息,即星形图标全部为红色。

    图17 v3版本页面

结束灰度任务

v3承接v1版本所有流量后,即可结束灰度任务,释放v1版本的资源。

  1. 在“监测与处理”页面,单击“结束灰度任务”。
  2. 单击“确定”,结束灰度任务将下线原版本,并删除灰度任务。
    图18 结束灰度任务

    下线服务版本,会将包含的工作负载和istio相关配置资源全部删除。

清除资源

到此本demo已全部操作完成,因节点和应用运行过程中会产生费用,如果无特殊要求,请及时删除应用和节点,避免费用产生。

  1. 选择左侧导航中的“体验任务”,单击bookinfo任务中的“卸载”。
  2. 单击“确定”。卸载bookinfo体验任务,会自动删除productpage、details、reviews、ratings服务及相关资源。
    图19 卸载体验任务

    卸载体验任务后,已完成灰度发布的服务,其灰度版本对应的负载需要手动在cce控制台删除。

分享:
网站地图