阿里云云原生容器工程师ACP认证(十四)—应用与发布管理

 

容器服务ACK发布管理-灰度发布概念

灰度发布,又称金丝雀发布,是将应用的旧版本A与新版本B同时部署在环境中,业务请求可能会被路由到版本A的后端上,也可能会被路由到版本B的后端上。您可以自定义灰度发布策略,快速调整版本A和B的流量占比。

灰度发布可以在发布新版本应用时:

  • 自定义控制新版本应用流量比重
  • 渐进式完成新版本应用的全量上线
  • 最大限度地控制新版本发布带来的业务风险,
  • 降低故障带来的影响
  • 同时支持快速回滚

灰度发布流程图

在这里插入图片描述

容器服务ACK发布管理-灰度发布实现

灰度发布是可以帮助您渐进式更新Deployment的工具

  • 它能结合路由控制器(Ingress Controller)实现多版本共存,发布暂停,流量百分比切换,健康检查等功能
  • 极大解放灰度发布过程中的手动操作,全自动化实现线上灰度流量切换

发布管理-安装灰度发布组件

在ACK中安装对应的组件后才可以使用灰度发布功能。 在灰度发布页面,直接通过单击开始安装即可实现对应的组件安装。 1.登录容器服务管理控制台。 2.在控制台左侧导航栏中,单击集群。 3.在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。 4.在集群管理页左侧导航栏中,单击灰度发布。 5.单击开始安装。完成灰度发布组件安装后,控制台自动跳转到灰度发布页面。

发布管理-使用手动发布模式创建灰度发布

在使用灰度发布的手动发布方式的时候,您需要创建一个Ingree、Service和Deployment结构的应用。目前灰度发布只支持基于Deployment和Ingress的灰度发布。

本实践举例介绍使用手动发布方式的灰度发布流程。

  • 步骤一:创建测试应用

    本文使用以下YAML文件模板作为测试示例。该示例使用Deployment部署一个Web应用,并通过路由(Ingress)向外暴露服务(Service)。

    在这里插入图片描述

  • 步骤二:创建灰度发布 创建灰度发布时,设置上述创建的Deployment、Service、Ingress,然后设置发布方式为手动发布。

    在这里插入图片描述 完成创建灰度发布后,单击创建的灰度发布名称,发布状态显示初始化完毕。如果显示初始化中的话,可以多次单击刷新。

  • 步骤三:执行灰度发布 初始化完毕后,就可以进行灰度发布。 开始灰度发布前,您需要先更新一下应用。

    本文示例以更新镜像tag为例,修改镜像tag中的green为blue。先发布两个Pod为新版本,同时将新版本的灰度流量设置为10%。 1.单击目标灰度发布名称,然后在详情页面,单击发布对象名称后面的编辑图标。 2.在查看YAML面板中,将green修改为blue,然后单击确定。 3.在灰度发布基本信息区域,编辑当前权重[0-100]为10,新版容器组副本数[0-4]为2。

    可以看到,新版本的Pod已经创建。这时候访问应用观察流量情况,可以看到流量中绿色占比90%,蓝色占比10%。

在这里插入图片描述

根据业务的实际情况,不断调整新旧版容器数量,将旧版Pod缩容,新版Pod扩容,然后将更多的流量导入到新版本的Pod中。当测试完毕且没有问题时,单击页面右上方的确认发布,完成此次发布。发布成功后,可以查看流量情况。当业务的所有流量都转向了新的Pod时,就完成了一次应用的发布。您可以单击页面右上方的完成,结束此次发布动作。

查看历史记录

每次发布完成后,您可以查看发布的记录:在灰度发布页面的历史记录区域,您可以查看所有创建的灰度发布的发布记录。在每个创建的灰度发布详情页面下方的发布日志区域,查看发布的过程。

发布管理-使用自动发布模式创建灰度发布

容器服务ACK的灰度发布功能除了手动发布方式外,还提供了自动发布方式。自动发布模式可以让您全自动化地完成灰度发布流程。

  • 步骤一:创建测试应用 本文使用以下YAML文件模板作为测试示例。该示例使用Deployment部署一个Web应用,并通过路由(Ingress)向外暴露服务(Service)。
  • 步骤二:创建灰度发布 创建灰度发布时,设置上述创建的Deployment、Service、Ingress,然后设置发布方式为自动发布。

    在这里插入图片描述

    完成创建灰度发布后,发布流程会全自动化地进行。 当一个新版本的Pod创建出来后,流量切换百分之20至新版本Pod,此时旧版本的一个Pod会被删除,然后系统会再继续创建一个新的Pod删除一个旧版Pod,以此类推,直到完毕。

    在配置自动发布模式时,需要注意以下两点:

  • 和手动发布不同,使用自动发布模式时,需要在创建灰度发布的时候编辑发布对象里面的YAML以设置需要更新的新版本Deployment。本文示例将发布的版本镜像blue修改成green。
  • 需要设置权重调整步长。该值设置每次以多少步长来调整新版本的权重流量。本文以20为例,期初会以0%的流量切至新版本。随着新版本的Pod创建出来后,第一次切换20%的流量至新版本Pod,然后随着新版本的Pod数量变多,流量逐步切换到40%,60%,80%,直到100%。

发布管理-基于Helm的发布管理

阿里云Kubernetes服务集成了Helm包管理工具,帮助您快速构建云上应用,因为chart可以多次发布(release),这就带来一个发布版本管理的问题。因此,阿里云Kubernetes服务提供了发布功能,通过Web界面的方式对通过Helm发布的应用进行管理。

前提条件

  • 您已经成功创建一个Kubernetes集群.
  • 您已经使用应用目录或服务目录功能,安装了Helm应用,本例中是一个tf-model应用。

Helm是由Deis发起的一个开源工具,有助于简化部署和管理Kubernetes应用。 Helm可以理解为Kubernetes的包管理工具,可以方便地发现、共享和使用Kubernetes构建的应用。

查看发布的详情

1.登录容器服务管理控制台。 2.在控制台左侧导航栏中,单击集群。 3.在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。 4.在集群管理页左侧导航栏中,单击应用。 5.单击Helm页签,进入发布列表页面。 6.以tf-model为例,您可查看发布的详情信息,单击右侧的详情,进入该发布的详情页面。 可以查看该发布的当前版本和历史版本等信息,当前版本为1,无历史版本。 还可查看tf-model的资源信息,如资源名称、资源类型,以及查看YMAL信息。 7.单击参数页签,您可查看该Helm包安装的参数配置。

更新发布的版本

1.在控制台左侧导航栏中,单击集群。 2.在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。 3.在集群管理页左侧导航栏中,单击应用。 4.单击Helm页签,进入发布列表页面。 5.以tf-model为例,您可更新该发布,单击右侧的更新,弹出更新发布对话框 6.在更新发布对话框中修改相关参数,随后单击更新,可对该发布进行更新。

在发布列表页面,您可以看到当前版本变为2,您可以在历史版本菜单下找到版本1,单击回滚到该版本,可进行回滚。

删除发布

1.单击Helm页签,进入发布列表页面。 删除应用 2.以tf-model为例,您可删除该发布,单击右侧的删除。 确定要删除应用 ack-alibaba-cloud-metrics-adapter? 3.在删除应用对话框中,勾选是否清除发布记录,然后单击确定,您可以删除tf-model应用,其包含的service、deployment等资源都会一并删除。