竞价实例优化运营成本
竞价实例(Spot Instance)也叫抢占式实例是一种按需实例,旨在降低部分场景下使用ECS的成本,创建竞价实例时,必须为指定的实例规格设置一个价格上限,当指定的实例规格的当前市场价格低于出价时,就能成功创建竞价实例,并按当前市场价格计费。默认能稳定持有实例一小时。之后,当市场价格高于出价或者资源供需关系变化时,实例会被自动释放。
合理的使用阿里云ECS竞价实例,最高可以降低50% – 90% 的运营成本(相比按量付费的实例),可以用相同的预算,将计算容量提升 2 – 10 倍。为了保证尽可能高概率的弹出竞价实例,可以设置多个AZ多个规格进行竞价,大大提升了竞价实例的创建成功率。
竞价实例助力Cluster-Autoscaler弹性升级
上周,阿里云容器服务发布了Cluster-Autoscaler的支持,初次使用的开发者可以先阅读下入门文档,开发者可以通过页面简单的配置即可完成集群的伸缩配置,实现节点级别的弹性伸缩。当Cluster-Autoscaler遇到Spot Instance又会擦出什么火花呢?
Cluster-Autoscaler + Spot Instance特别适用于无状态的应用场景,比如可弹性伸缩的Web站点服务、图像渲染、大数据分析和大规模并行计算等。应用程序的分布度、可扩展性和容错能力越高越能节省成本和提升吞吐量。在kubernetes中可以将期望使用Spot Instance的复杂通过设置nodeSelector
为workload_type=spot
主动选择Spot Instance为弹性伸缩组,这样工作负载就可以并发伸缩出带有workload_type=spot
标签的节点,并进行调度。在控制台开启竞价实例的伸缩组非常简单。
- 创建Spot Instance的伸缩组
- 配置伸缩配置,选择合适的价格。此处最佳出价应该足够高,而且要充分考虑到市场价格的波动。这样抢占请求才会被接受处理,而且创建后才不会因为价格因素被释放。另外,出价还必须符合您根据自身业务评估后的预期。通常情况下对于价格不是特别敏感,只是期望通过竞价实例来降低成本的,可以选择价格的最大值,此时创建出的实例会根据市场的价格不断变换,但无论如何便变换,实例都能够保证不会因为价格的因素被释放且价格低于按量实例的价格。
另外可以通过设置节点标签的方式实现定向的调度,默认情况下抢占式实例的标签为:
workload_type=spot
,普通实例为:workload_type=cpu
, GPU实例为:workload_type=gpu
。 - 检查伸缩组件状态
- 验证弹性伸缩,可以通过设置nodeSelector的方式明确指定设置弹性伸缩组。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment-basic
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
workload_type: spot
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
最后
Cluster-Autoscaler与Spot Instance相结合可以提供更灵活与弹性的伸缩,可以节约运营的成本,是对于无状态高可用应用的一种理想的伸缩方式。但同样对于有状态应用而言,选择标准的伸缩组或许是更好的一种实践。