王玉君,腾讯云后台高级开发工程师,负责腾讯云原生系统开发及建设。
晏子怡,腾讯云容器产品经理,在K8s弹性伸缩、资源管理领域有丰富的实战经验。
导语Kubernetes 作为 IaaS 和 PaaS 中间的一层,通过声明式API/控制器模式、以应用服务为中心、并且从API到运行时都提供了高度灵活的可扩展机制,为云厂商、各企业构建应用托管服务甚至云原生服务提供了统一的标准和基础设施管理的各项能力。
随着企业上云进入稳定期,**成本控制 **就是永远逃不开的话题。本文通过 Kubernetes 的扩展机制 Admission Webhook、Scheduler Framework 和 CRD+Operator,结合云上资源的特异性,介绍如何基于 Kubernetes 和云上环境构建成本控制系统。
TKE的头部客户S(离线计算场景),面对增长的客户月活以及相应剧增的计算需求,强烈希望腾讯云容器服务能提供更低单价的算力和更弹性的架构。S通过构建合适的成本控制系统,将月账单降低了接近80%(业务计算量相同)。结合S的业务场景,我们主要建议S做了如下低成本改造动作:
通过 Spot Controller 配置了较高的竞价实例比例(接近90%),同时配置了10%左右的包年包月实例作为稳定资源的 buffer 池。由于 Spot 比例设置较高,为了增强资源供应的稳定性,S配置了多种备选机型来扩大资源池的供应范围,保持回收频率在极低水平。
为了进一步保障业务的高可用,S设置了多可用区平衡分布的扩容策略,来保障实例在多可用区打散分布。
为了保证弹性以及架构的容错性,S同时使用了业务弹性伸缩(HPA)+资源弹性伸缩(节点池)来完成应用层弹性伸缩到资源层的弹性伸缩平滑过渡,同时也可以在业务低谷时自动释放闲置资源,进一步节成本。
为了应对极端情况下的回收情况,S安装了 Spot Agent 来保障业务的优雅终止以及计算过程的断点续传。
WHY SPOT ? 我们需要一种云原生的低成本算力TKE 能力的底座是集群以及节点能力(底层依赖腾讯云的CVM实现),而TKE本身是不计费的,那么您购买节点时选择的计费方式将极大程度上决定您的总体使用成本。
根据不同的使用场景,用户最常使用的计费方式为按量计费或者包年包月:
按量计费是一种符合云计算理念的计费方式 —— 按需使用,弹性供应,秒级计费。
按量计费的这种按需使用的特性,和云上的弹性伸缩能力天然适配,很多用户也会搭配使用。
包年包月是一种更低成本的计费方式 —— 提前付费,降低成本
您在十分明确使用期限的情况下,可以以低折扣按月、按年、按周的方式购买实例。
那么,有没有一种计费类型,既具备云原生按量计费的特性、能够匹配弹性伸缩能力,又能够像包年包月实例一样提供较低折扣呢? 竞价实例,就是这个问题的答案。
竞价实例(Spot)是云服务器 CVM 的一种新实例运作模式,它最核心的特点是折扣售卖和系统中断机制。
竞价实例是三种计费模式中成本最低的一种使用方式(低至两折), 可以极大程度降低您的云资源支出。
但正如它的名字一样,您和其他同时使用竞价实例的用户存在一定的竞争关系 :在特定场景下,实例可能会被回收,我们官方将这种回收定义为系统主动中断(库存波动):当前阶段,在腾讯云的竞价实例模型下,仅会因为竞价实例资源池库存不足而产生中断。资源管控系统会自动根据实时库存变化回收这些折扣售卖的实例。
当您成功购买一个竞价实例后,它的使用和按量计费的 CVM 实例基本毫无区别,包括控制台操作、远程登录、服务部署、关联 VPC 等。
在丰富的实践与探索中,我们发现,Spot 非常适合容器、无状态服务、 CI/CD 、强化学习、离线转码、大数据分析等具有容错能力的业务应用,尤其是基于云原生框架构建的应用,在这些场景下可以在巨幅降低成本(80%以上)的前提下,保证业务的稳定性。
不惧中断 — 云原生框架保证业务稳定性上面我们已经介绍了竞价实例的核心特性,可能您看到系统主动中断这个概念,心里会浮现一些顾虑以及疑惑:
Q1: 回收机制是怎么样的?会提前通知吗?
Q2: 我想要节约成本,我可以做些什么来降低甚至消除回收带来的潜在风险吗?
Q3: 是否有自动化的方式可以抵消回收带来的对业务的潜在影响?
Q4: 怎么判断我的业务是否适合使用竞价实例?
这几个问题,本文都会一一解答。我们依托于丰富的实战经验,基于 Kubenetes 构建了云上成本控制系统,利用弹性供应能力以及云原生的维持业务期望状态的能力,定义且实现了一种低成本且稳定的算力交付形式。