ECI实例支持秒级启动,且只为运行时间付费,因此特别适用于在线业务的弹性伸缩场景。在ACK集群中,您可以使用ECS节点服务业务的正常需求,使用虚拟节点(底层资源为ECI)服务业务的弹性需求,配合HPA功能即可实现根据业务流量自动扩缩容,从而提高资源利用率,降低使用成本。本文介绍如何在ACK集群中使用ECI来服务业务的弹性需求。
准备工作
创建ACK集群。本文以ACK托管版集群为示例,具体操作,请参见创建Kubernetes托管版集群。
在ACK集群中部署虚拟节点。具体操作,请参见通过虚拟节点将Pod调度到ECI上运行。
在ACK集群中部署virtual-kubelet-autoscaler。具体操作,请参见ACK安装virtual-kubelet-autoscaler。
准备业务镜像
整体业务请求链路如下图所示,您可以请求service-entry(模拟入口业务应用),service-entry会请求service-a(模拟耗CPU应用)和service-b(模拟耗内存应用)。因此需要准备3个镜像。
您可以使用以下镜像进行测试:
service-entry: aliyuneci/ack-vk-autoscaler-demo-service-entry:1.0
部署业务应用
登录容器服务管理控制台。
在集群页面,找到目标集群,单击集群名称,进入集群管理页面。
重复以下步骤,依次部署service-a、service-b和service-entry。
在左侧导航栏,选择工作负载>无状态。
单击使用镜像创建。
配置相关参数,完成Deployment创建。
说明未提及的配置项可以保持默认,或者按照您的实际需求进行配置。
配置页
配置项
service-a
service-b
service-entry
应用基本信息
应用名称
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
。
高级配置
服务(Service)
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-a-svc
端口:8081
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-b-svc
端口:8082
类型:虚拟集群IP(ClusterIP)
端口映射
名称:service-entry-svc
端口:8080
结果示例如下:
为service-entry创建Ingress。
在集群管理页的左侧导航栏,选择网络>路由。
在路由页面,单击创建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
可以将Pod调度到ECI上运行。
ack-virtual-kubelet-autoscaler
当ECS节点计算资源不足时,可以自动将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的在线业务弹性伸缩的细节,请参见在线业务弹性扩缩容最佳实践。