之前写过一篇K8S云原生系统的弹性伸缩优化方案
K8S云原生系统架构优化(三)弹性伸缩_extendedhpa.option: '{"downscalewindow-CSDN博客https://blog.csdn.net/weixin_53439529/article/details/132618655在这篇文章中只描述了负载(pod)弹性伸缩的方式,而没有详细介绍节点弹性伸缩,原因如下:
系统是使用固定容量的物理机,目前资源也达不到扩大和虚拟化,所以暂时不做节点弹性伸缩策略。
其实这也是自建K8S集群的一个普遍的问题,那就是很难实现节点层也就是虚拟机层面的弹性伸缩,集群的规模是固定大小的(后面再解释为什么自建的很难实现)。
什么是节点弹性伸缩?
为什么要实现节点的弹性伸缩?
很多人不了解这个功能的重要性,其实可以说没有节点弹性伸缩能力的系统不算真正的云原生系统。可以反向思考一下:如果一个系统没有节点弹性伸缩能力,会发生什么?
第一个问题就是资源利用率低。
如果系统不具备节点弹性伸缩的能力,那么用户只能按照业务高峰期预留资源,除非业务高峰期是在固定时间出现且在该时间之前能保证交付需要的虚拟机资源,否则一定会存在超配问题,即按照预估业务高峰期需求申请资源,但是这些虚拟机长期利用率很低,等于大量的资源和成本浪费了。
第二个问题就是扩容比较麻烦。
这个问题和一开始说的自建K8S无法节点弹性伸缩是一个原因,无法弹性伸缩的集群可以视为固定容量的集群,这个集群释放虚拟机也就是缩容比较简单,因为云原生系统是支持pod的自动漂移的,不能实现的可以看这一篇。
K8S云原生系统架构优化(一)可用性_statefulset部署无法自动转移-CSDN博客https://blog.csdn.net/weixin_53439529/article/details/132575756但是集群新增虚拟机也就是扩容需要解决一个问题,那就是怎么把这个虚拟机加到集群里面去?K8S在部署的时候会往master节点和worker节点部署不同的组件,组件之间有关联关系,是K8S部署的时候自行建立的,作为用户,后续新增进去的节点如何建立这个关联关系?这个问题我也不知道,因为我自建的集群确实没这么做过。
那么云服务的这个功能是怎么实现的呢?
以HW公有云为例,云容器引擎服务(CCE)在购买的时候只交付一个K8S的master集群,应该是三服务器的,但是三个服务器不开放给用户,用户只能从控制台操作。只有master节点当然是不可用的,所以还需要用户再购买worker节点,这时候可以选择固定的几个节点,或者选择有上限的节点池(这个上限是整个集群可用的最大规模上限),比如用户通过对业务预估认为全年业务高峰也不超过10台服务器,日常稳定在5台服务器左右,那么可以先购买5台服务器,节点池上限设为10或超过10一点。这个3master+5worker的集群如果正常运行业务,观察一下资源利用情况,可以设置弹性伸缩,实现步骤看下文。对于自动加进来的节点,开通虚拟机的过程中就会自动部署K8S需要的组件,加进这个集群,同时部署一些厂商需要的东西(计费什么的)。虚拟机正常运行起来,pod就可以自动漂移到这个节点,原来的几个节点的压力就会减小,如果设置CPU利用率在30-70%之间伸缩,那么最终就是让每个worker的资源利用率都处于30-70%之间。
弹性伸缩的关键
自建不考虑,只说云服务厂商提供的云容器引擎要实现节点的弹性伸缩,关键是什么?答案是弹性计费。弹性计费是一种计费方式,按照用户的实际使用时长*每小时单价来核算费用,先用再付。目前大部分用户是按照包年包月计费方式的,也就是一个月的费用或者一年的费用提前预付。
我们可以假设这么一种情况:如果按照大部分用户使用的包年包月计费,假设包月吧,然后你开通了弹性伸缩,白天业务量大,不定时会加进来几台虚拟机,然后晚上又释放掉了,月底云服务商找你核算费用,按照你使用的最高数量来核算月单价*数量你肯定不干,但是按照你一开始买的数量来核算云厂商肯定也不干,这时候就产生分歧,按多少来算呢?没有答案,因为不定期不定量地加进来的,谁也不知道是多少。
这就是为什么要配合弹性计费才能实现节点弹性伸缩,因为这个技术其实并不难,有点规模的云厂商都能做,问题就是弹性计费的实现才难,这关系到另一个部门就是成本核算部门,业务上打通了技术上才能实现对吗。
说到这里提醒一下,有想要用这个功能的最好慎重,这个功能很好,但是问题在于弹性计费的单价太贵了!有的用户可能为了节省成本才开通节点弹性伸缩的,为的是业务低谷期可以释放掉一部分服务器,但是那句话怎么说?你可能小赚,卖家永远不亏。人家可以把弹性计费的虚拟机单价提高一倍甚至几倍,这样算下来就把费用找回去了。
怎么实现节点弹性伸缩?
预期效果
以一个公有云容器服务中运行的测试系统为例,节点弹性伸缩的过程如下:
模拟业务稳定运行中
开通弹性伸缩并设置伸缩策略
模拟业务压力增大:
自动弹出2虚拟机,按运行开始时间计费
模拟业务压力减小
自动释放多余虚拟机