ACK+ECI实现在线业务弹性伸缩
本文介绍如何使用ACK和ECI完成在线业务的弹性伸缩。
准备工作
本文以ACK托管版集群为示例,使用ECS Node服务业务的正常水位,使用Virtual Node(底层资源是ECI)服务业务的弹性水位。
创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。
在ACK集群中部署Virtual Kubelet。具体操作,请参见通过部署ACK虚拟节点组件创建ECI Pod。
在ACK集群中部署virtual-kubelet-autoscaler。具体操作,请参见ACK安装virtual-kubelet-autoscaler。
准备业务镜像
整体业务请求链路如下图所示,您可以请求service-entry(模拟入口业务应用),service-entry会请求service-a(模拟耗CPU应用)和service-b(模拟耗内存应用)。因此需要准备3个Docker镜像。

service-entry: aliyuneci/ack-vk-autoscaler-demo-service-entry:1.0
部署业务应用
登录容器服务管理控制台。
在集群页面,找到目标集群,单击集群名称,进入集群管理页面。
重复以下步骤,依次部署service-a、service-b和service-entry。
在左侧导航栏,选择工作负载>无状态。
单击使用镜像创建。
配置相关参数,完成Deployment创建。
配置页
配置项
service-a
service-b
service-entry
应用基本信息
副本数量
1
1
2
容器配置
镜像
aliyuneci/ack-vk-autoscaler-demo-service-a
aliyuneci/ack-vk-autoscaler-demo-service-b
aliyuneci/ack-vk-autoscaler-demo-service-entry
镜像tag
1.0
1.0
1.0
端口
8081
8082
8080
环境变量
不涉及
不涉及
增加2个环境变量:
名称为service.a.endpoint,值为service-a对应服务的内部端点,如
service-a-svc:8081
。名称为service.b.endpoint,值为service-b对应服务的内部端点,如
service-b-svc:8082
。
高级配置
服务
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-a-svc
端口:8081
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-b-svc
端口:8082
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-entry-svc
端口:8080
说明未提及的配置项可以保持默认,或者按照您的实际需求进行配置。
预期结果如下:
为service-entry创建Ingress。
在集群管理页的左侧导航栏,选择网络>路由。
在路由页面,单击创建。
在弹出的对话框中配置路由信息,然后单击创建。
路由规则说明如下:
域名:使用集群测试域名,格式为
*.[cluster-id].[region-id].alicontainer.com
,您可以在集群的基本信息页获取。本文示例为demo.c1bd53c8352574c33885966afc3******.cn-beijing.alicontainer.com
。路径:您可指定服务访问的URL路径,本文示例为
/
。服务:选择service-entry,端口为8080。
结果示例如下:
配置弹性伸缩策略
在集群管理页面的左侧导航栏,选择工作负载>无状态。
重复以下步骤,分别为service-entry、service-a和service-b创建HPA。
单击应用名称,然后选择容器伸缩页签。
在指标伸缩(HPA)处,单击创建。
在弹出的对话框中,配置伸缩参数,然后单击确定。
本文采用以下配置作为示例:
指标:CPU使用量阈值50%,内存使用量阈值50%。
最大容器数量:10。
最小容器数量:1。
部署三方应用
在容器管理控制台的左侧导航栏,选择市场>应用市场。
根据业务需要,选择应用进行部署。
本文部署了以下应用:
应用名称
说明
ack-virtual-node
通过VK将Pod创建在ECI上。
ack-virtual-kubelet-autoscaler
当ECS节点计算资源不足时,可以通过VK自动将Pod创建在ECI上。
ack-ahas-sentinel-pilot
接入应用高可用服务AHAS,提供应用架构自动探测,故障注入式高可用能力评测和一键流控降级等功能。
ack-onepilot
接入应用实时监控服务ARMS,实现自动发现应用拓扑、自动生成3D拓扑、自动发现并监控接口、捕获异常事务和慢事务,大幅提升线上问题诊断的效率。
ack-prometheus-operator
对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。
使用PTS进行压测并观察效果
使用PTS对服务进行压测,来模拟业务低峰期到高峰期的一个过程。本文从5个并发施压,一直递增到40个并发。
登录PTS控制台。
在左侧导航栏,选择性能测试>创建场景。
单击PTS压测。
配置测试参数,然后进行压测。
本文采用以下配置作为示例:
场景配置:压测URL为service-entry Ingress的访问域名,示例为
http://demo.c1bd53c8352574c33885966afc3******.cn-beijing.alicontainer.com/
;请求方式为GET。施压配置:压力模式为并发模式,
更多信息,请参见PTS压测快速入门。
返回容器服务管理控制台,观察业务应用的伸缩效果。
可以看到随着施压并发的递增,各个业务应用根据自身的负载情况进行了动态的扩容。
当ECS Node上资源不足的时候,Pod被自动调度到了Virtual Node,实现了ACK+ECI的在线业务弹性伸缩的效果。
相关视频教程
更多关于ACK+ECI的在线业务弹性伸缩的细节,请参见在线业务弹性扩缩容最佳实践。