文档

ACK+ECI实现在线业务弹性伸缩

更新时间:

ECI实例支持秒级启动,且只为运行时间付费,因此特别适用于在线业务的弹性伸缩场景。在ACK集群中,您可以使用ECS节点服务业务的正常需求,使用虚拟节点(底层资源为ECI)服务业务的弹性需求,配合HPA功能即可实现根据业务流量自动扩缩容,从而提高资源利用率,降低使用成本。本文介绍如何在ACK集群中使用ECI来服务业务的弹性需求。

准备工作

  1. 创建ACK集群。本文以ACK托管版集群为示例,具体操作,请参见创建Kubernetes托管版集群

  2. 在ACK集群中部署虚拟节点。具体操作,请参见通过虚拟节点将Pod调度到ECI上运行

  3. 在ACK集群中部署virtual-kubelet-autoscaler。具体操作,请参见ACK安装virtual-kubelet-autoscaler

准备业务镜像

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

您可以使用以下镜像进行测试:

部署业务应用

  1. 登录容器服务管理控制台

  2. 集群页面,找到目标集群,单击集群名称,进入集群管理页面。

  3. 重复以下步骤,依次部署service-a、service-b和service-entry。

    1. 在左侧导航栏,选择工作负载>无状态

    2. 单击使用镜像创建

    3. 配置相关参数,完成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.png

  4. 为service-entry创建Ingress。

    1. 在集群管理页的左侧导航栏,选择网络>路由

    2. 路由页面,单击创建Ingress

    3. 在弹出的对话框中配置路由信息,然后单击确定

      路由规则说明如下:

      • 域名:使用集群测试域名,格式为*.[cluster-id].[region-id].alicontainer.com,您可以在集群的基本信息页获取。本文示例为demo.c1bd53c8352574c33885966afc3******.cn-beijing.alicontainer.com

      • 路径:您可指定服务访问的URL路径,本文示例为/

      • 服务名称:选择service-entry。

      • 端口:8080。

配置弹性伸缩策略

  1. 在集群管理页面的左侧导航栏,选择工作负载>无状态

  2. 重复以下步骤,分别为service-entry、service-a和service-b创建HPA。

    1. 单击应用名称,然后选择容器伸缩页签。

    2. 指标伸缩(HPA)处,单击创建

    3. 在弹出的对话框中,配置伸缩参数,然后单击确定

      本文采用以下配置作为示例:

      • 指标:CPU使用量阈值50%,内存使用量阈值50%。

      • 最大容器数量:10。

      • 最小容器数量:1。

      弹性伸缩-hpa

部署三方应用

  1. 在容器管理控制台的左侧导航栏,选择市场>应用市场

  2. 根据业务需要,选择应用进行部署。

    本文部署了以下应用:

    应用名称

    说明

    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个并发。

  1. 登录PTS控制台

  2. 在左侧导航栏,选择性能测试>创建场景

  3. 单击PTS压测

  4. 配置测试参数,然后进行压测。

    弹性伸缩-pts

    本文采用以下配置作为示例:

    • 场景配置:压测URL为service-entry Ingress的访问域名,示例为http://demo.c1bd53c8352574c33885966afc3******.cn-beijing.alicontainer.com/;请求方式为GET。

    • 施压配置:压力模式为并发模式,

    更多信息,请参见PTS压测快速入门

  5. 返回容器服务管理控制台,观察业务应用的伸缩效果。

    可以看到随着施压并发的递增,各个业务应用根据自身的负载情况进行了动态的扩容。

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

相关视频教程

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

  • 本页导读 (1)
文档反馈