cloudops spot之elastigroup产品调研

背景

今天分享的是netapp旗下的商业化公司spot的产品elastigroup,他们专注于优化用户的cloudops,利用公有云本身的技术红利,帮助用户更好的使用云来降本增效。spot旗下的产品比较多,我们会重点关注几个和公共云弹性资源相关的产品,看看他们是如何利用弹性的云资源来做到降本增效的。

Elastigroup介绍

这个主要是针对虚拟机场景的cloudops产品,核心技术和之前聊过的autospotting有一些接近,通过spot实例的替换来达到最好的成本效益。
image.png

替换策略

在spot实例终止前先提前scale up,避免影响可用性
image.png

产品使用

产品使用视频可以参考油管,具体用法可以参考博客[1]通过产品界面可以大致确认其一些技术实现方式:

  • 基于ASG来管理VM
  • 采用了cloudformation和terraform技术,例如spot控制台创建的ASG会通过TF自动创建

配置体系

基本配置

主要是名称、描述、region
image.png

计算引擎配置

  • 可用区与spot市场market得分
  • spot types策略: 允许定义不同的spot初始化策略,来满足不同的计算场景
  • 启动配置:包括镜像、安全组、标签
  • 附加配置:主要是权限、网络、镜像备份,这与实例上的应用启动比较相关。用户可以添加启动、关闭时的脚本,作为一个hook

image.png

  • **状态性配置(stateful config): **主要是系统卷、数据卷的一些处理策略,private ip的使用策略等

image.png

  • 外围工具集成配置:支持集成很多外部第三方工具:elastic group可以集成一些CI/CD工具或者一些中间件等。
    • 例如集成kafka时,核心原理是将broker拆分到不同的rack,并且确保副本在不同的rack,这样只要确保其中一个broker采用on-demand实例再配合数据卷的reattach就可以保证整体的可用性。
    • 例如集成k8s: spot自己提供了一个K8S集群,上面部署了spot-controller,确保scale up出来的inst在pvc约定的AZ中。scale down时则不会停止那些有pvc关联pod部署的node。采用DaemonSets

image.png

网络配置

网络相关配置:包括负载均衡器和一些auto healing的配置
image.png

重平衡相关设置(predictive rebalancing)

设置workload的容量

主要是on-demand水位、node group相关的容量设置
image.png

定义重平衡的优化策略

主要是兜底策略(新购on-demand或者自动匹配saving plan)、新建实例的类型策略
image.png

持续重平衡优化

image.png

实例可用性配置

可以固化创建的spot instance的region、type信息已经drain timeout
image.png

scale type

scale按照模式不同,主要有两种类型:

  • target scaling: 基于目标可预测的自动弹性,核心是设置个期望的目标metric目标值,elastic group会自动调整容量来确保变更后集群的metric接近这个目标值。这种方式比较简单,支持的metric只能是针对EC2的固定几个指标。
    • Average CPU Utilization (as %)
    • Average Network In (bytes)
    • Average Network Out (bytes)
  • multiple metric scaling: 基于自定义的多个指标来执行扩缩,相比target scalling会更加灵活。需要policy配合自定义的metric list来一起工作

tips: 注意scale type和policy是解耦的,不同的policy都可以选择任意一个scaling type

metric list

用户可以自定义metric list来配合simple scaling policy一起使用,核心基于的metric指标类型可以为:

  • EC2 CPU利用率
  • ELB 延迟
  • EC2 网络出流量
  • 其他:主要是可以指定其他云资源(namespace)

统计上的行为包括:

  • 最大值
  • 最小值
  • 平均值
  • 百分比
  • 采样数
  • 总和

单位也是让用户自己定义的:
image.png

scale policy

target scaling policy

target scalling policy,可以选择使用multi metric scaling或者target scaling两种方式。如果使用target scaling,则按照target scaling的方式去match设置的target value,如果选择multi metric scaling,则会用表达式去匹配定义的metric list。选择这种模式下允许开启predictive autoscalling特性,开启后则会使用机器学习预测前两天的workload数据,可以动态设置target值。
image.png

simple scaling policies

simple scaling policy也同时支持multiple metric scaling和target value scaling两种模式。并且扩容、缩容需要单独设置。相比target scaling policy,具备更强的自定义能力,不过配置起来会更加麻烦。主要可以自定义的内容包括:

  • 关联的metric list
  • 表达式和操作符

tips: 同一时刻只能生效一种类型的scale policy。另外simple scaling policy名字有点误导,其实叫做custom scaling policy更好

termination policy

可以定义当需要终止实例时采用的一些行为策略,包括选择detach哪些实例,包括对特定实例进行上锁,避免被shutdown。

  • default policy: 按照一个综合评分决定选择关闭哪个实例来调整容量。优先关闭的实例会在以下几个维度进行得分评估:
    • 不健康的实例优先关闭
    • spot实例可用性得分低的优先关闭:可以根据spot market查询得分
    • 根据容量策略去选择先关闭什么实例,例如on-demand的数量确定的情况下,优先关闭spot实例
    • AMI老的实例优先被关闭
    • 优先关闭uptime时间最长的实例
  • newest instance policy: 相比default policy主要变化就是在其他判断条件的基础上,优先关闭uptime最短的实例

此外termination policy中还允许定义定时任务来调整容量
image.png

参考资料