技术最终也是需要为运营所服务。每一种可推广的新技术的出现,也都是对原运营模式的一种提升。如何降低成本、提高资源利用率,是每一个资源管理者必定要面临的问题。本文将就云原生生态下,容器技术的资源如何分配、如何管理,结合G行的容器云平台的实践结果,介绍并分享给大家。
在文章最初,我们首先提出三个问题,并带着问题进行探讨。
Q:虚机应用和容器应用的资源分配区别是什么?
Q:如何提高容器服务的资源利用率?
Q:容器平台的资源该如何管理?
先聊聊虚机应用资源,系统管理员在进行物理机切分的时候,通常会有几套标准资源分配模板,例如4C8G,16C32G等等,当我们的项目经理根据应用资源评估,申请对应虚机镜像后,我们最开始的应用资源就已经框定,之后项目开发完毕,进行非功能测试,我们会得到不同的常稳CPU使用率,例如20%、40%。然后考虑到虚机扩容的复杂性和资源降配的管理机制,最终我们在生产上得到的预期资源使用率会在一个范围内波动。总结一下这种资源分配模式,是以资源为模板(定值),应用为适配(不定值)的一种资源分配方式。这种模式我们可能会面临一些问题,例如降配的阈值根据不同类型的应用需要丰富的经验才可以拿捏的住,例如当应用即使在最小资源模板下也低于降配阈值时,存在资源浪费。例如当应用需要调整资源模板时,需要重新进行非功能测试。在这种模式下,目前金融机构普遍的CPU资源平均利用率都在10%-20%,存在可提升空间。
那么对于容器应用来说,我们的资源该如何分配呢?首先我们先来了解下k8s容器在声明机制下的资源参数。
request(资源请求量)容器启动时的最低资源分配值,如果集群不满足该资源请求,容器服务无法启动。
limit(资源约束量)容器最大能够请求到的资源。
图1
结合CPU的时间片机制、k8s的调度策略以及容器快速扩容能力。我们可以畅想下应用资源理想的使用场景:常稳TPS使用率在request值和limit值之间,峰值TPS使用小于limit值。然后在划分CPU密集型应用和非密集型应用类别之后,我们还可以对节点资源进行一定程度的超分,以达成我们资源共享的目的。那么以此理想场景下,可实践的资源分配策略需要优秀的非功能测试团队以及合理的资源计算分配模型。我们可以把此类机制总结为以应用需求为依据(定值),资源进行适配(不定值)的一种资源分配方式。我们期望自此模型下运行的应用平均CPU资源利用率达到20%-40%,同时保障生产的稳定性。
那么我们如何把这种高效的资源分配方式进行落地呢?首先,笔者相信在容器平台建设之初,因为需求方需要时间进行思维模式转变,平台需要加快推动应用容器化策略,肯定会存在资源的浪费情况,可能某天我们可爱的平台管理员在巡检时发现,集群资源已经紧张了,但是上面的应用连10%的CPU使用率都不到。我们就需要想办法扭转这个问题。G行结合容器技术进行了大量的实践,决定首先从非功能测试方面入手。首先我们摒弃掉固定的资源模板,为应用服务准备一个足够大的limit值,对其未来几年常稳TPS下的资源使用情况请进行测试,得到实际使用量(current),再通过不同的应用类型及一定的冗余值,计算出生产环境资源最大分配的建议值(limit),request值根据应用灾备级别取limit的25%-100%不等(涉及到k8s驱逐策略)。同时我们也摒弃掉了虚机拐点的测试方式,推动根据常稳TPS的阶梯式调整,测试出在不同倍数下的资源实际使用量,可按一定比例转化为POD数量,为生产应用管理员提供容量预测数据。以此模式下上线的系统资源的使用率明显得到了提升,节点上能够承载的服务数量也达到了理想场景,同时在理想情况下,应用服务达到常稳TPS后的资源使用率为定值,风险得到了把控。最后根据容量预测数据,我们也可以快速的调整POD服务数量或容器limit值。
图2
当然,在介绍完资源分配策略后,我们也需要配套的资源管理策略。笔者调研过一些同业的管理方式,比较常用的是根据使用率砍掉一定量的request值,保持limit值不变。基于各家自研的或开源的调度器及优秀的调度策略,这是一种过渡或可长期使用的方案。当然缺点大家也可以想一下,一头(request)限制住了,另一头(limit)却放开,在未来不可预期的野蛮申请下,可能导致集群超分过重,产生雪崩等异常情况。那么优秀的资源管理策略的制定,则是平台管理层必须要进行思考及实践的工作。
G行结合实践经验,从应用等级划分入手,持续改进容器平台资源运营管理策略。根据应用系统灾备等级对limit和request比例进行规范要求,重要系统采取保守策略,一般系统采用高效策略;根据应用服务CPU使用类型,优化服务调度策略,规避高风险场景;根据应用服务特殊需求,划分专用节点,缓释关联故障发生等等,结合平台容量周报、超分阈值、服务数量等,不断地磨合各类应用系统,持续优化资源运营策略。当然,优秀的管理策略也同样需要不断强化的技术能力、可落地的执行方案,技术、方案、管理三者相结合,才能真正的把资源使用“提“起来,把成本”降“下来。
图3
总结
最后,资源使用一直是业内持续研究的方向,同时容器资源的管理也不单单是PaaS层的优化,node节点的资源切分比例,网络的带宽限制等等因素都会最终影响到我们的资源管理策略,这也是资源统筹的难点。本文以三个问题入手,结合G行实践经验,重点介绍了PaaS层CPU方面的资源运营策略,希望能以此文和各位碰撞出思维的火花,感谢各位读者阅读。