【51CTO.com快译】调查表明,Kubernetes如今主导着容器市场。根据云原生计算基金会(CNCF)的一项调查,2020年Kubernetes在生产中的使用率为93%,远高于2019年的78%。此外,这项调查表明,2020年容器在生产中的使用率为92%,与云原生计算基金会(CNCF)在 2016年的第一次调查相比,这一数字增长了3倍。
由于越来越多的DevOps团队采用了Kubernetes,并且在开源社区的支持下,这一数字可能还会增加。如果还保持目前的价格,将会增加更多的市场份额。虽然Kubernetes使很多事项变得简单,但总是面临一些挑战。其中包括在网络、存储、跟踪、监视、准备不足,以及成本管理等方面出现的问题。
运行Kubernetes的成本可能会非常昂贵,尤其是效率低下的话。当用户首次尝试将Kubernetes纳入其业务时,通常会使用与最初的试点项目相同的架构和设置。但是,这种设置通常没有经过成本优化,因此用户可能并没有意识到费用问题。而用户从一开始就养成良好的成本优化习惯,能够节省大量的成本。
以下介绍几种控制和降低Kubernetes成本的方法。此外,由于Amazon EKS是继自我管理的Kubernetes之后最常见的容器管理方法,因此将针对AWS云平台上的Kubernetes成本优化提供更具可行性的建议。
1.Kubernetes成本监控
这是开始更有效地管理Kubernetes成本的合乎逻辑的一个步骤。监控将显示用户有关Kubernetes的支出方式。更重要的是,应该确定节省成本的机会。
云计算供应商通常会为用户提供需要支付费用的帐单摘要,但是,其概述通常比较简单,这对于多租户Kubernetes集群用处并不大,并在私有云中是不可访问的。因此,使用外部软件来监控Kubernetes的使用情况很普遍。Prometheus、Kubecost、Microtica和Replex就是该领域中的一些有用工具。
用户需要选择适用的工具监控Kubernetes成本。然后,开始为Kubernetes成本优化采取更具体的行动。
2.限制资源的使用
有效地限制资源的使用,可以确保Kubernetes系统的任何程序或操作不会使用过多的处理能力。因此,可以为用户节省成本,例如避免出现意外的帐单。
容器使用的资源不能超过设置的资源限制。如果将某个特定容器的内存上限设置为4GB,那么kubelet(与容器运行时)将不会超过这个内存上限。容器在运行时禁止超过配置的资源上限。当容器中的进程试图使用超出允许的内存量时,系统内核会以内存不足的错误中止这一进程。
用户可以通过两种方式进行限制。首先,当Kubernetes系统检测到违规行为时就会做出反应。第二种方法是强制执行,这意味着Kubernetes系统从来不会允许容器超过限制。可以针对不同的运行时间以各种方式实现相同的限制。
限制资源至关重要,尤其是在许多用户可以直接访问Kubernetes的情况下。这种方法可以确保公平共享可用资源,从而减小了整个群集的规模。如果没有限制,某一名用户就可能消耗所有资源,这将会严重影响其他用户的工作,从而导致需要更多的计算资源。
但是,需要注意的是不要过分地限制资源。如果资源数量限制得太低,软件将无法正常运行。而采用Prometheus和Kubecost一些Kubernetes成本优化工具,可以帮助用户保持资源的平衡。
3.自动扩展
自动扩展意味着用户需要为其所需的东西支付更多费用。因此,用户必须根据自己的特定需求调整群集的规模。这个功能可以允许Kubernetes自动扩展以适应快速变化。
水平动扩展和垂直自动扩展是两种可用的自动扩展类型。简而言之,水平自动扩展涉及根据负载是高于还是低于指定水平来插入和移除计算Pod。其Pod的比例与垂直自动扩展比例保持平衡。
这两种自动扩展方法都可用于使可用的计算能力动态地适应用户的实际需求。但是,这种方法并不理想,因为它不适用于所有用例。例如,当某些事物采用更多的计算资源之后,Kubernetes系统不会自动缩小规模。
4.选择合适的AWS实例
AWS Kubernetes的成本受到开发人员用来管理Kubernetes集群的AWS实例的直接影响。其实例以多种不同形式出现,具有不同的内存和计算资源组合。Kubernetes Pod的使用方式相同,但资源分配不同。控制AWS Kubernetes成本的关键是确保Pod在用户的AWS实例上有效使用。而AWS实例应该与用户使用的Pod的大小匹配。
Pod的规模、数量和历史资源利用趋势都将决定使用哪个AWS实例。应用程序可能具有不同的存储或CPU要求,这会影响要使用的实例类型。
确保Kubernetes Pod的资源消耗与其所使用的AWS实例上的可用总体CPU和内存相关,这对于优化资源使用和降低AWS成本至关重要。
5.使用竞价型实例
对于AWS实例,可以在三种计费配置文件中找到它们:按需实例、预留实例、竞价型实例。按需实例的成本最高,但灵活性最高。竞价型实例的成本最低。但是需要通过2分钟的警告来终止它们。用户还可以在一定时间内获取预留实例,以节省成本。因此,实例形式的选择直接影响在AWS云平台上运行Kubernetes的成本。
用户可以将竞价型实例用于并不是一直需要资源的工作负载,并且可以处理很多中断。AWS公司声称现竞价型实例将帮助用户节省多达90%的EC2按需实例成本。
由于竞价型实例必须立即运行,因此并不是用户采用应用程序的最佳选择,那么如果在固定时间内使用这些服务,则可能会获得一些折扣。如果用户同意一年或三年的使用期限,则将获得更多的折扣。AWS公司表示,其折扣可能达到40%到60%。
6.设定休眠时间表
无论用户是在按需实例、预留实例还是竞价型实例上运行Kubernetes集群,确保终止未充分利用的集群对于成本管理都是至关重要的。用户可以按配置它们的时间段计算AWS EC2的费用。即使未充分利用的实例对资源的影响比必要时要大得多,它们仍然使用户花费运行实例的全部费用。
简而言之,如果用户使用基于云计算的Kubernetes环境,并且只在工作时间内使用,那么他们每周工作40个小时,而Kubernetes环境在其余时间正常工作,那么没有必要为每周其他的128个小时支付费用。当然,并不是每个用户都是这样,特别是他们工作时间更加灵活的的话,但是在没有工作的情况下关闭环境可以显著地优化Kubernetes的成本。
用户可以通过自动安排休眠时间表并在需要时唤醒环境来设置这些功能。设置这计划意味着Kubernetes系统将自动缩减未使用的资源。这保证其环境得到了保存。此外,当用户再次需要启用时,其环境将会自动地被“唤醒”,这意味着工作流中不会中断。
7.定期进行Kubernetes清理
如果让用户完全可以根据需要构建名称空间或使用基于持续集成(CI)/持续交付(CD)的Kubernetes,那么最终可能会出现大量未使用的对象或集群,这些对象或集群仍然会使用户的成本升高。如果休眠模式减少了计算资源,那么它只用于暂时不活动的资源,仍然保留存储和配置。因此,当用户发现某些资源长时间处于非活动状态时,删除它们将是一件明智的事情。
8.正确设置Kubernetes集群的大小
在各种情况下,管理Kubernetes集群是不同的。有多种方法可以正确调整群集的大小,并且开发应用程序以确保一致性和持久性很重要。用户在构建集群之前,经常需要考虑将在集群上运行的应用程序的规范。
在设计可扩展应用程序时,正确调整节点大小非常重要。大量的小节点和少量的大节点是两个截然不同的事物。这就是在这两个目标之间找到适当的平衡是最好的方法的原因。
但是,用户对于应用程序的不同要求需要不同数量和不同大小的节点,因此需要了解各种应用案例所需的大小和数量。
9.标记资源
在任何环境中,无论是云平台、内部部署设施还是容器,标记资源都是一个明智的想法。在具有众多测试、暂存和开发环境的Kubernetes环境中,一些服务必然会被忽略。即使不使用这些服务,它们也一直成为用户的长期负担。应使用标记来确保所有服务均受到控制。
AWS公司为此提供了一种强大的标记方案,可用于标记属于Kubernetes的服务。其用户可以使用这些标记来停留在资源、资源持有者和资源使用率之上。有效的标记使用户可以轻松地分类和消除未使用的服务。一旦AWS计费仪表板中启用了这些标记,用户将能够分配成本,并查看各种服务的费用明细。
结论
Kubernetes成本优化的第一步是开始进行监视。然后,为避免使用不必要的计算资源,用户可以设置资源限制,这将使成本更易于管理。
确定资源的最佳规模对于降低成本至关重要,自动扩展也将有助于实现。如果使用AWS公司的服务,用户可以采用成本更低的选项,例如竞价型实例。删除空闲资源的其他步骤包括自动休眠计划和清理未使用的Kubernetes资源。最后,用户可以调整Pod大小,实现资源标记,以更好地优化Kubernetes成本。
将这些技巧整合到用户的流程中将会构建成本优化的Kubernetes系统。这将为用户更关键的业务运营和产品改进节省更多的成本。
原文标题:How to Achieve Effective Kubernetes Cost Optimization,作者:Sara Miteva
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】