阿里云首页 弹性容器实例

虚拟节点实现在线业务弹性伸缩

本文介绍如何使用ACK和ECI完成在线业务的弹性伸缩=

准备业务镜像

整体业务请求链路如上图所示,您可以请求service-entry(模拟入口业务应用),service-entry会请求service-a(模拟耗CPU应用)和service-b(模拟耗内存应用),所以需要准备3个Docker镜像。

创建ACK集群

本文使用Kubernetes托管版类型的集群,使用ECS Node服务业务的正常水位,通过ack-virtual-kubelet-autoscaler来使用Virtual Node(底层资源是ECI),以服务业务的弹性水位。

部署VK和vk-autoscaler

在容器服务控制台的市场>应用目录中,依次安装ack-virtual-node和ack-virtual-kubelet-autoscaler。

部署业务应用

容器服务控制台的应用中,根据业务形态选择对应的部署形式,本文采用无状态部署(Deployment)。

填入相关内容,选择前面准备好的业务镜像,暴露相关的端口信息(service-entry为8080,service-a为8001,service-b为8002),配置service,即可创建完成。

创建service-entry的时候,需要传入2个环境变量(值来自service-a和service-b的service内部端点)。并且service-entry需要提供出ingress路由,将业务能力暴露到外部环境。

配置弹性伸缩策略

应用>无状态中,选择业务app,配置容器组水平伸缩器。目前默认策略支持mem和cpu,也可以自己实现更多复杂的策略。

本文为上述提及的App均配置了CPU、内存维度的HPA(容器组水平伸缩器)。

部署三方应用

在市场-应用目录中,可以根据业务需要,安装部署相应的App,本文中部署了以下App。

  • ack-virtual-node:通过vk来将pod创建在eci上。

  • ack-virtual-kubelet-autoscaler:通过vk动态的将pod创建在eci上(本文在eci上实现的弹性伸缩能力就是借助于此)。

  • ahas:提供应用架构自动探测,故障注入式高可用能力评测和一键流控降级等功能。

  • arms-pilot:自动发现应用拓扑、自动生成 3D 拓扑、自动发现并监控接口、捕获异常事务和慢事务。

  • arms-prometheus:对接开源 Prometheus 生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的 Prometheus 服务。

PTS 压测

使用PTS对服务进行压测,来模拟业务低峰期到高峰期的一个过程。本文从5个并发施压,一直递增到40个并发。

观察效果

可以看到随着施压并发的递增,各个App(如截图中的service-b)根据自身的负载情况进行了动态的扩容。

当ECS Node上资源不足的时候,Pod被自动调度到了Virtual Node,实现了ACK+ECI的在线业务弹性伸缩的效果。

更多关于ACK+ECI的在线业务弹性伸缩的细节,请参见在线业务弹性扩缩容最佳实践

首页 弹性容器实例 最佳实践 虚拟节点实现在线业务弹性伸缩