看腾讯如何提升 Kubernetes 集群利用率?( 二 )


基于CraneEHPA算法修正HPA触发条件;
梯度扩容减少扩容频率 , 提高利用效率 。
第三 , 设置合理的CronHPA 。
对于周期性明显的业务 , 可以设置定时周期扩缩容;
在节假日、活动促销时 , 可以提前设置时间段扩容 。
第四 , 根据用户的策略 , 设置适当的VPA 。腾讯医疗服务案例
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
从上图可以看出 , 上午时段流量上涨迅速且每周五具有HPV疫苗抢购活动 , 所以需要在该时段进行提前自动扩容设置 。
同时 , 根据低峰期、高峰期、平峰期所需要的节点数(分别为2、18、8) , 用户可以结合HPA和CronHPA做简单的调整——将实例范围设置为2-30 , CPU使用率达到Limit值的50%时触发策略 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
通过以上一系列操作 , 相比未开始HPA时 , 成本可以有效减少60% , 达到“降本”的目的 。
2.平台篇优化思路
前面已提到 , Node资源并不能够全部被Pod所使用 , 需要预留部分资源给操作系统和Kubelet , 同时还会产生无法满足Pod调度要求的碎片资源 。 那么在这种情况下 , 该如何充分提高利用率呢?
第一 , 动态Pod压缩 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
如上图所示 , 我们可以看到Pod被分配至节点A、B、C上 , 其中PodA、PodB的CPUUsage较低 , 这种情况下可以对PodA、PodB进行压缩 , 将其余待调度的Pod放置在该节点 , 以实现平均CPU负载提升的目的 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
需要特别注意的是 , 在线业务没有优先级之分 , 每一个Pod都非常重要 , 不能因为其中某一个Pod占用多数资源或可能造成其他资源异常就对其进行驱逐 。
同时 , 做资源压缩的前提是用户已设置Request值与Limit值 , 且二者初始值一般相等 。 这可以保证用户可使用的最大值不变 , 在对Request值进行压缩时 , 一个节点可以容纳更多的Pod 。
此外 , 起初可以设置全局默认压缩比 , 随后可根据历史数据进行行态调试 , 以达到最佳值 。
第二 , Node节点超卖 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
如上图所示 , 假设左侧节点为30核 , 若能通过一系列的手段让Kubelet、Kubernetes调度器认为该节点为60核 , 那是不是就能够调度更多的Pod呢?
该如何去做呢?分两个阶段:
设置全局默认超卖比;
根据历史数据、实时数据动态改变超卖比 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
第三 , 碎片整理 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
如上图 , 我们可以看到节点A、B的资源均不满足未调度PodG的需求 , 且节点B中的PodE可以调度到节点A中 , 腾挪空间 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
这种情况下 , 可以PodE从节点B调度至节点A , 以此增加节点B的空闲资源来满足未调度的PodG的需求 。 这就是碎片资源整理的过程 。
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
第四 , 在离线混部 。
看腾讯如何提升 Kubernetes 集群利用率?