cloudops spot之elastigroup产品调研
背景
今天分享的是netapp旗下的商业化公司spot的产品elastigroup,他们专注于优化用户的cloudops,利用公有云本身的技术红利,帮助用户更好的使用云来降本增效。spot旗下的产品比较多,我们会重点关注几个和公共云弹性资源相关的产品,看看他们是如何利用弹性的云资源来做到降本增效的。
Elastigroup介绍
这个主要是针对虚拟机场景的cloudops产品,核心技术和之前聊过的autospotting有一些接近,通过spot实例的替换来达到最好的成本效益。
替换策略
在spot实例终止前先提前scale up,避免影响可用性
产品使用
产品使用视频可以参考油管,具体用法可以参考博客[1]通过产品界面可以大致确认其一些技术实现方式:
- 基于ASG来管理VM
- 采用了cloudformation和terraform技术,例如spot控制台创建的ASG会通过TF自动创建
配置体系
基本配置
主要是名称、描述、region
计算引擎配置
- 可用区与spot市场market得分
- spot types策略: 允许定义不同的spot初始化策略,来满足不同的计算场景
- 启动配置:包括镜像、安全组、标签
- 附加配置:主要是权限、网络、镜像备份,这与实例上的应用启动比较相关。用户可以添加启动、关闭时的脚本,作为一个hook
- **状态性配置(stateful config): **主要是系统卷、数据卷的一些处理策略,private ip的使用策略等
- 外围工具集成配置:支持集成很多外部第三方工具: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
网络配置
网络相关配置:包括负载均衡器和一些auto healing的配置
重平衡相关设置(predictive rebalancing)
设置workload的容量
主要是on-demand水位、node group相关的容量设置
定义重平衡的优化策略
主要是兜底策略(新购on-demand或者自动匹配saving plan)、新建实例的类型策略
持续重平衡优化
实例可用性配置
可以固化创建的spot instance的region、type信息已经drain timeout
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)
统计上的行为包括:
- 最大值
- 最小值
- 平均值
- 百分比
- 采样数
- 总和
单位也是让用户自己定义的:
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值。
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中还允许定义定时任务来调整容量