通过EDAS实现K8s微服务应用的金丝雀发布
1. 金丝雀发布流程示意图
2. 实验资源方式简介及开始实验
云起实验室实验资源方式介绍
云起实验室支持公开通免费试用、个人账户资源两种实验资源方式。
- 开通免费试用
- 使用个人账号开通试用,平台仅提供手册参考。
- 所有实验操作将保留至您的账号,请谨慎操作。
- 在实验页面下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
- 说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
- 个人账户资源
- 使用您个人的云资源进行操作,资源归属于个人。
- 所有实验操作将保留至您的账号,请谨慎操作。
- 平台仅提供手册参考,不会对资源做任何操作。
- 说明:使用个人账户资源,在创建资源时,可能会产生一定的费用,请您及时关注相关云产品资源的计费概述。
准备开始实验
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
3. 领取免费试用资源
实验前必看!
- 如果您的阿里云主账号符合开通企业级分布式应用服务EDAS免费试用的资格,建议您进行开通免费试用。企业级分布式应用服务EDAS免费额度,是指可抵扣5个后付费托管实例,超出部分按EDAS按量付费计算,详情请参见计费概述。
- 如果您的阿里云主账号符合开通容器服务Serverless版ACK Serverless免费试用的资格,建议您进行开通免费试用。容器服务Serverless版ACK Serverless免费试用时长为7天,ACK Serverless试用集群减免的费用和不会减免的费用详情,请参见试用前说明。ACK Serverless试用集群减免额度以节省计划形式发放到账户,实际消耗会因应用部署、网络环境等变化。不使用时,请及时释放资源。在试用期即将到期后,ACK Serverless试用集群减免的费用。如果您需要继续使用集群,请至少在试用期到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。在使用ACK Serverless Pro版集群过程中用到的其他阿里云云产品资源,相关计费说明,请参见云产品资源计费。
- 如果您的阿里云账号只能领取部分免费试用产品,请您领取符合免费试用资格的产品,然后进入实验,不满足免费试用资格的产品将会使用个人账户资源进行创建,并会产生一定的费用,请您及时关注账户扣费。
- 为了避免资源浪费并造成账号扣费的情况,请严格按照本文提供的参数进行配置。在实验完成之后,请您及时删除或禁用压测任务。
- 在实验开始前,请您选择开通免费试用。
- 开通企业级分布式应用服务EDAS免费试用。
2.1 在实验室页面下方,选择企业级分布式应用服务EDAS,单击立即试用。
2.2 在企业级分布式应用服务EDAS面板,选中服务协议,单击立即试用。
- 开通容器服务Serverless版ACK Serverless免费试用。
3.1 在实验室页面下方,选择容器服务Serverless版ACK Serverless,单击立即试用。
3.2 在Serverless容器服务ACK Serverless面板,在服务协议右侧,单击已完成服务角色的授权链接,然后单击同意授权,完成ACK Serverless试用集群的授权操作。
3.3 返回Serverless容器服务ACK Serverless面板,选择任一地域,本教程以华东1(杭州)地域为例,其他配置项保持默认。仔细阅读各服务协议,并选中服务协议选框,然后单击立即试用。
3.4 试用申请成功通过后,系统将会为您自动创建ACK Serverless标准版集群。前往容器服务ACK Serverless控制台,集群创建大约需要10分钟,当集群状态为运行中时,即可正常使用。
- 领取完免费试用后,返回资源领取界面,单击我已开通,进入实验。
说明:如果您的阿里云账号只能领取部分免费试用产品,请您领取符合免费试用资格的产品,然后进入实验,不满足免费试用资格的产品将会使用个人账户资源进行创建,并会产生一定的费用,请您及时关注账户扣费。
4. 创建资源
- 开通企业级分布式应用服务EDAS。
说明:
- 如果您选择的免费试用,并且在上一步骤中领取了企业级分布式应用服务EDAS免费试用,请您跳过本步骤,直接进行下一小节操作。
- 如果您选择的免费试用,但是您的阿里云主账号没有资格领取企业级分布式应用服务EDAS的免费试用,请您根据如下操作,开通企业级分布式应用服务EDAS,会产生一定的费用,具体计费详情,请参见计费概述
- 如果您选择的个人资源,请您根据如下操作,开通企业级分布式应用服务EDAS,会产生一定的费用,具体计费详情,请参见计费概述。如果您已开通企业级分布式应用服务EDAS,请您跳过本步骤,直接进行下一小节操作。
1.1 前往EDAS控制台,提示您尚未开通企业级分布式应用服务EDAS,请前往开通页面开通,单击免费开通进入服务开通流程。
1.2 在开通服务页签,单击免费开通。
1.3 在服务开通页面,选择计费模式,您可以选择按量付费或包年包月。包年包月模式支持标准版、专业版、铂金版系列,然后单击立即购买。
1.4 在确认订单页面,选中服务协议,单击立即开通。
说明:本实验以按量付费模式为例进行说明。
1.5 完成开通后,返回开通服务页签,单击刷新,然后单击下一步。
1.6 在角色授权页签,单击立即授权。
1.7 在云资源访问授权页面,单击同意授权。
1.8 返回角色授权页签,单击刷新,然后单击下一步。
返回如下页面,表示您已成功开通企业级分布式应用服务EDAS。
- 创建容器服务Serverless版ACK Serverless。
说明:
- 如果您选择的免费试用,并且在上一步骤中领取了容器服务Serverless版ACK Serverless的免费试用,后台会自动为您创建容器服务Serverless版ACK Serverless集群,请您跳过本步骤,直接进行下一小节操作。
- 如果您选择的免费试用,但是您的阿里云主账号没有资格领取容器服务Serverless版ACK Serverless的免费试用,请您根据如下操作,创建容器服务Serverless版ACK Serverless集群,并且会产生一定的费用,详情请参考云产品资源计费。
- 如果您选择的个人资源,请您根据如下操作,创建容器服务Serverless版ACK Serverless集群,并且会产生一定的费用,详情请参考云产品资源计费。
2.1 前往容器服务ACK Serverless控制台,在集群列表页面,单击创建集群。
2.2 在集群配置页面,集群类型为ACK Serverless集群,集群规格为标准版,自定义集群名称,地域选择华东1(杭州),本教程以华东1(杭州)为例,Kubernetes版本选择<=1.24,其他配置保持默认即可,然后单击下一步:组件配置。
说明:本试用教程以下列的配置信息为例,实际操作时,建议根据您的实际业务体量和需求选择。
参数说明:
2.3 在组件配置页面,关闭日志服务,单击下一步:确认配置。
2.4 在确认配置页面,选中服务协议,单击创建集群。
2.4 在日志页面,单击集群列表。
2.5 在集群列表页面,等待大约3~5分钟。状态变为运行中后,表示ACK Serverless集群创建完成,即可使用该ACK Serverless集群。
5. 在EDAS控制台导入ACK Serverless集群
- 前往EDAS控制台,在左侧导航栏,选择资源管理>Serverless K8s集群。
- 在Serverless K8s集群页面,您可以看到已创建好的ACK Serverless集群,单击其集群右侧操作列下的导入。
- 在警告对话框中, 单击确定。
- 在导入预检对话框中,单击继续导入。
- 在导入Kubernetes集群对话框中,单击导入。
- 在Serverless K8s集群页面,等待导入状态变为导入成功,表示已成功导入。
- 在Serverless K8s集群页面,单击右侧操作列下的日志。
返回如下结果,您可以查看集群导入时的EDAS管控组件安装进度。
6. 部署Demo应用
- 在左侧导航栏,选中应用管理 > 应用列表。
- 在应用列表页面,单击创建应用。
- 在应用基本信息页签,选择集群类型为Kubernetes集群,托管应用类型为Java,其他配置保持默认即可,单击下一步。
- 部署Consumer Demo应用。
- 在应用配置页签,选择应用需部署到的目标微服务空间、集群和K8s Namespqce,设置应用名称为canary-demo-a,上传Demo应用的JAR包,版本使用用时间戳作为版本号,设置Pod总数为1,单击下一步。
说明:Consumer Demo应用请单击此链接下载canary-demo-a.jar。
- 在应用高级设置页签,单击下一步。
- 在分组设置(选填)页签,选择资源组,然后单击创建应用。
- 在应用创建完成页签,确认应用配置信息后,单击确定创建应用。
- 在应用变更预检确认对话框,单击开始预检。
- 在应用变更预检确认对话框,预检通过后,单击继续。
- 在应用列表页面,稍等片刻,应用状态为运行中,表示应用部署成功。
- 根据上述操作步骤,部署Provider Demo应用。设置应用名称为canary-demo-b,Provider Demo应用请单击此链接下载canary-demo-b.jar。由于演示实验为金丝雀发布应用,所以在应用配置页签,需设置Provider应用的Pod总数为2。
- 创建完成后,您可以在应用列表中查看已部署的Demo应用。
7. 为Consumer应用绑定SLB
- 在应用列表页面,单击部署的Consumer应用的应用名称canary-demo-a ,进入应用总览页面。
- 在访问方式配置区域,单击负载均衡(公网)右侧的图标,为应用绑定公网负载均衡。
- 在负载均衡(公网)对话框,单击TCP | HTTP 协议右侧的+添加新的监听,参考如下说明配置端口信息,然后单击确认。
参数说明:
- SLB端口(应用名):负载均衡前端端口,设置为80。
- 容器端口(Target port):后端端口,设置为20001。
等待应用变更流程结束,刷新页面,您即可在访问方式配置区域看到已绑定的负载均衡IP地址。
8. 测试Demo应用
在浏览器中打开新页签,在地址栏中输入Consumer应用绑定的负载均衡公网IP地址访问接口/content,可以看到请求会轮询访问两个Provider Pod的IP地址。
9. 按内容金丝雀发布Provider
- 在应用列表页面,单击部署的Provider应用的应用名称canary-demo-b,进入应用总览页面。
- 在页面右上角,选择部署 > 部署,进入选择部署模式页面。
- 选择金丝雀发布(灰度)发布模式,单击开始部署。
- 在金丝雀发布(灰度)页面,配置应用部署信息。配置完成后,单击确定。
- 单击用时间戳作为版本号修改版本。
- 在发布策略区域,使用默认配置。 首批灰度数量:1 剩余批次:1 批次内部署间隔:10秒
- 在按内容灰度区域,单击添加策略,配置按请求参数Parameter进行流控的灰度策略,如下图所示。请求参数tag为gray的流量,将转发至灰度版本的实例中。
- 在添加内容灰度策略面板,配置策略名称为canary-rule-param。
- 单击创建流量规则,然后单击+添加规则条件,配置以下规则,然后单击确定。 参数类型:Parameter 参数:tag 条件:= 值:gray
- 在选择策略列表,选择已创建好的灰度策略,单击确定。
- 在应用变更预检确认对话框,单击开始预检。
- 在应用变更预检确认对话框,,预检通过后,单击继续开始金丝雀灰度部署。
- 在变更记录页面,查看当前应用金丝雀发布的部署详情,以及当前生效的灰度发布策略。
- 打开浏览器,验证金丝雀按内容灰度流控规则生效。 当灰度版本实例发布完成后,需等待客户端缓存刷新Pod实例的实例列表(刷新周期默认为30s),流量才会按规则访问到目标实例。
- 带请求参数tag=gray访问,流量始终发送到新版本Pod实例上。
- 不带参数访问或带tag!=gray参数访问,流量始终发送到原Pod实例上。
- 在变更记录面板,单击灰度发布区域的执行下一批,清理金丝雀流控规则,完成应用金丝雀发布流程。
- 打开浏览器,验证金丝雀流控规则已清理,且不再生效。此时,请求会轮询访问两个Provider Pod实例。
10. 按比例金丝雀发布Provider
- 在应用列表页面,单击部署的Provider应用的应用名称canary-demo-b,进入应用总览页面。
- 在页面右上角,选择部署 > 部署,进入选择部署模式页面。
- 选择金丝雀发布(灰度)发布模式,单击开始部署。
- 单击用时间戳作为版本号修改版本。
- 按比例金丝雀发布Provider应用,在金丝雀发布(灰度)页面的发布策略区域,选择按比例灰度发布模式,并设置流量比例为10%,如下图所示,然后单击确定。
- 在应用变更预检确认对话框,单击开始预检。
- 在应用变更预检确认对话框,,预检通过后,单击继续开始金丝雀灰度部署。
- 您可在变更记录页面查看发布详情及灰度流量策略。
- 验证金丝雀按比例灰度流控规则生效,您可多次调用接口查看访问Provider Pod实例的情况,访问到新版本Pod的概率大致为1/10。
- 在变更记录页面,单击灰度发布区域的执行下一批,清理金丝雀流控规则,完成应用金丝雀发布流程。
- 验证灰度流控规则已清理,请求会轮询访问两个Provider Pod实例。
11. Demo代码
Consumer应用
该应用提供接口/content、/path(接口/path可用于验证按内容灰度时设置按请求路径灰度),并在请求处理中输出本机IP地址。通过restTemplate调用sc-B服务接口,且请求sc-B服务时,/content接口透传了env标签和tag参数。
Provider应用
该应用提供接口/b、/bb,输出本机IP地址。
demo包下载
- Consumer应用:canary-demo-a.jar
- Provider应用:canary-demo-b.jar
12. 清理及后续
完成教程后,请及时清理测试数据和试用资源,避免产生额外资损。
清理
- EDAS应用
- 如果无需继续使用EDAS应用,请登录EDAS控制台,在左侧导航栏选择应用管理 > 应用列表,在应用列表的应用名称列单击目标应用名称,在实例部署信息页签的右上角单击停止,然后在对话框中单击确定。应用停止后,在页面右上角单击删除应用,在对话框中单击删除,完成应用的释放。
- 如果仍需要继续使用EDAS应用,您可以继续创建应用实例。当实例数量超过5个时,EDAS开始计费。更多信息,请参见计费概述。
- ACK Serverless集群
- 如果无需继续使用集群,请登录容器服务管理控制台,在集群列表页面的操作列,单击目标集群对应的更多>删除。在删除集群页面,选中同时删除集群下的ALB资源、同时删除集群下的PrivateZone资源和我已知晓以上信息并确认删除集群,然后单击确定。关于删除ACK Serverless集群的更多信息,请参见删除集群。
- 如果需要继续使用集群,请至少在试用期到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。在使用ACK Serverless Pro版集群过程中用到的其他阿里云云产品资源,相关计费说明,请参见云产品资源计费。
后续
您可以基于EDAS应用,完成EDAS应用的其他试用教程。您可以基于ACK Serverless集群,对ACK Serverless集群和应用进行增删改查操作,更多信息,请参见删除集群、查看集群信息。
实验地址:https://developer.aliyun.com/adc/scenario/9968657f36ec4d209daf059157e324dd