## 容器集群缺少弹性导致资源浪费?
亚马逊云科技提供的弹性能力使得我们可以随时开启资源部署业务,然而在提供方便的同时如果缺乏管理,经常会造成资源的浪费。业务日常运行的时候往往是为了高峰期流量准备服务器,由于服务器集群缺少弹性,使得服务器在大部分时间都处于浪费的状态。
## Spot实例便宜但不稳定?
亚马逊云科技的Spot实例让我们可以利用亚马逊云科技云中空闲的EC2容量。和按需实例的价格相比,使用Spot实例最高可以享受90%的折扣。但是,Spot实例经常会因为Ondemand资源的诉求而导致中断,中断仅在2分钟前发送通知,留给业务做资源切换的时间很少,如果没有相应的自动化机制,则会严重影响业务稳定性。因此,很多企业实际无法真正享受到Spot实例带来的成本优势。
## 聚云科技SpotX
针对如上两个场景的使用痛点,聚云科技特别推出SpotX方案,提供容器集群的弹性伸缩和稳定使用Spot实例的能力,让客户最大化利用计算资源的同时,在保证业务稳定的基础上放心使用AWS Spot实例,充分享受Spot实例的价格优势!
# SpotX方案介绍
SpotX是聚云科技推出的针对AWS EKS、ECS容器集群的自动弹性伸缩和稳定使用Spot实例的解决方案,针对不同客户的需求分为两种交付形态:本地部署解决方案和SaaS服务。
### 本地部署解决方案
![20230804-145624.png](https://dev-media.amazoncloud.cn/be32472bacbf488bbfbb5295175b5206_20230804-145624.png "20230804-145624.png")
本地部署解决方案会在客户环境部署两个 Lambda Function:
**1、PredictFuction:**
每分钟计算Node Group的资源饱和度,也就是可容纳Pod的数量,并且推送到CloudWatch Metrics,以这个指标作为弹性伸缩的依据来创建CloudWatch Alarm进而触发节点的扩缩容。
**2、DrainingFunction:**
当饱和度指标达到设置的扩容阈值的时候会自动启动新实例进行扩容。当达到缩容阈值或者接收到Spot实例中断信号和Rebalance Recommendations信号的时候触发 DrainingFunction,在节点回收之前把节点中的Pod优雅调度到其他节点,保证业务稳定。
### SaaS服务
目前,SpotX SaaS版服务正在紧锣密鼓开发中,在本地部署方案的基础上提供更多增强功能,包括:
1、可视化控制台界面:
a.可快速创建弹性伸缩节点组,不需要手动在控制台设置ASG、Cloudwatch、Lambda等资源。
b.可直观查看集群饱和度指标、Spot实例回收历史、弹性伸缩历史、节点和Pod健康情况等。
![1.png](https://dev-media.amazoncloud.cn/22c956b37c604c94a46a9e363ced170c_1.png "1.png")
2、更丰富的成本展示以及Pod Right Sizing等成本优化功能
![2.png](https://dev-media.amazoncloud.cn/9836e961d25c4d299db29038a27a9509_2.png "2.png")
3、资源碎片整理功能进一步提升资源利用率
4、当Spot资源不足的时候临时启动Ondemand节点,在Spot资源充足的时候再自动替换回Spot实例
5、结合RI和Savings Plan的利用率和覆盖率情况决定Ondemand和Spot资源的轮转
6、多种缩容策略。节点缩容时根据如下条件选择一台节点作为回收节点,最大化保证缩容时的业务稳定。
![1691396760213.jpg](https://dev-media.amazoncloud.cn/7a9c16b8229f4d21a560d5bdf117ee19_1691396760213.jpg "1691396760213.jpg")
### 方案优势
当前在亚马逊云科技有两种实现集群弹性伸缩的方案:Cluster Autoscaler和Karpenter,相比前两者SpotX的主要优势有如下几点:
1、可灵活对Spot实例进行管理,当Spot资源不足的时候启动Ondemand节点作为临时补充,在Spot资源充足的时候再自动替换回Spot实例。
2、可视化控制台界面,快速创建弹性伸缩节点组,并可直观查看集群饱和度指标、Spot实例回收历史、弹性伸缩历史、节点和Pod健康情况等。
3、SpotX解决方案基于现有亚马逊云科技的常用服务,部署简单,易于维护,没有学习成本。
4、SpotX可以支持ECS和EKS两种容器服务的弹性伸缩配置。
5、SpotX通过饱和度指标判断集群扩缩容情况,可追溯可查看。并且可在Pod扩容前准备好节点资源,以便Pod快速启动,属于主动预测,更适合在线应用场景。而Cluster Autoscaler和 Karpenter的扩容是基于Pod Pending 事件,属于被动响应,更适合离线业务场景。
6、Spotx方案中,Spot实例中断的时候,中断实例中的Pod可以快速调度到其他Running节点,如果是通过Pending事件触发扩容则需要等待节点启动,使业务中断风险增加。
## SpotX 客户案例
### 面临的挑战
客户的EKS集群因没有实现弹性,需要为请求高峰期准备资源,而申请资源的时候很难预估未来的请求量,因此会留出过多的余量,这就导致该客户某EKS集群原有50台c5.2xlarge的按需实例,日常平均资源利用率仅为20%。
### 采用SpotX方案后
通过使用SpotX,从如下几个方面对EKS集群进行了优化:
1.EKS 集群通过SpotX进行自动化的弹性伸缩配置,把节点数量缩减到25台,其他节点按需扩容,提升资源利用率达40%左右,费用节省 50%。
2.进一步对这25台服务器配置弹性伸缩,在每天晚上业务请求低峰期的时候停掉部分机器。
3.集群节点使用竞价实例的部分可以再节省 60%(按照c5.2xlarge 类型Spot 实例的折扣情况计算,其他实例折扣会更低)
最终该EKS集群每月降低了70%左右的成本,后续业务上线也可以按需扩容,而不需要提前预置过多的资源。
当前客户该EKS集群由于业务增长节点数已达到140台以上,并且通过弹性伸缩结合Savings Plan和Spot实例使成本得到有效控制。
![3.png](https://dev-media.amazoncloud.cn/4bf0afac1c8b44c4bd73e64323d6c772_3.png "3.png")