调查显示,Kubernetes主导着当今的集装箱市场。根据云原生计算基金会的调查,2020年Kubernetes在生产中的使用率为93%,远高于2019年的78%。此外,这项调查显示,2020年生产中容器的利用率为92%,比2016年云原生计算基金会的首次调查高出3倍。
随着越来越多的DevOps团队采用Kubernetes,加上开源社区的支持,这个数字可能会增加。如果保持目前的价格,它将增加更多的市场份额。虽然Kubernetes使许多事情变得简单,但它总是面临一些挑战。包括网络、存储、跟踪、监控、准备不足、成本管理等方面的问题。

运行Kubernetes可能非常昂贵,尤其是在效率低下的情况下。当用户第一次尝试将Kubernetes整合到他们的业务中时,他们通常使用与最初的试点项目相同的架构和设置。但是,这种设置通常不是成本优化的,因此用户可能没有意识到成本问题。而且用户从一开始就养成了成本优化的好习惯,可以节省很多成本。
下面介绍控制和降低Kubernetes成本的方法。此外,由于亚马逊EKS是自管Kubernetes之后最常见的容器管理方式,将为AWS云平台上的Kubernetes成本优化提供更为可行的建议。
1.Kubernetes成本监控
这是开始更有效地管理Kubernetes成本的合理步骤。监控将显示用户如何在Kubernetes上花钱。更重要的是,应该确定节约成本的机会。
云计算提供商通常会向用户提供需要支付的账单汇总,但汇总通常很简单,对于多租户Kubernetes集群来说用处不大,在私有云内也无法访问。因此,通常使用外部软件来监控Kubernetes的使用情况。Prometheus、Kubecost、Microtica和Replex是这方面的一些有用工具。
用户需要选择合适的工具来监控Kubernetes的成本。然后,开始为Kubernetes的成本优化采取更具体的行动。
2.限制资源的使用
有效地限制资源的使用可以确保Kubernetes系统的任何程序或操作都不会使用过多的处理能力。所以可以为用户节省成本,比如避免意外账单。
容器使用的资源不能超过设置的资源限制。如果一个特定容器的内存限制被设置为4GB,那么kubelet不会超过这个内存限制。当容器运行时,禁止超过配置的资源限制。当容器中的一个进程试图使用超过允许的内存量时,系统内核会以内存不足错误中止该进程。
用户可以通过两种方式进行限制。首先,Kubernetes系统会在检测到违规时做出反应。第二种方法是强制执行,这意味着Kubernetes系统从不允许容器超过限制。对于不同的运行时间,可以用不同的方式实现相同的限制。
限制资源是至关重要的,尤其是当许多用户可以直接访问Kubernetes时。这种方法可以保证可用资源的公平共享,从而减小整个集群的规模。如果没有限制,一个用户可能会消耗掉所有的资源,这将严重影响其他用户的工作,从而需要更多的计算资源。
但是,我们应该注意不要过度限制资源。如果资源数量限制得太低,软件将无法正常工作。而一些Kubernetes的成本优化工具如Prometheus和Kubecost可以帮助用户保持资源的平衡。
3.自动扩展
自动扩展意味着用户需要为他们所需要的支付更多的费用。因此,用户必须根据自己的具体需求调整集群的大小。这个功能可以让Kubernetes自动扩展以适应快速变化。
水平扩展和垂直自动扩展是两种可用的自动扩展类型。简而言之,水平自动扩展包括根据负载是高于还是低于指定级别来插入和移除计算舱。Pod比例与垂直自动扩展比例平衡。
这两种自动扩展方法都可以用来根据用户的实际需求动态调整可用的计算能力。然而,这种方法并不理想,因为它并不适合所有的用例。比如某个东西使用了更多的计算资源,Kubernetes系统就不会自动缩小它的规模。
4.选择适当的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的成本。
用户可以将bidding实例用于不总是需要资源的工作负载,并且可以处理许多中断。AWS声称,当前的竞价实例将帮助用户节省高达90%的EC2按需实例成本。
由于竞价实例必须立即运行,所以用户采用应用程序并不是最佳选择,所以如果他们在固定时间内使用这些服务,他们可能会获得一些折扣。如果用户同意一年或三年的使用期限,他们将获得更多的折扣。AWS表示,其折扣可能达到40%至60%。
6.制定睡眠时间表。
无论用户是在按需实例、预留实例还是竞争实例上运行Kubernetes集群,确保未充分利用的集群因成本管理而终止都是至关重要的。用户可以根据他们被配置的时间段来计算AWS EC2的成本。即使未充分利用的实例对资源的影响比必要的大得多,它们仍然会使用户花费运行实例的所有成本。
简而言之,如果用户使用基于云计算的Kubernetes环境,并且只在工作时间使用,那么他们每周工作40小时,而Kubernetes环境在其余时间正常工作,因此不需要为每周的其他128小时付费。当然,并不是每个用户都是这样的,尤其是如果他们的工作时间更加灵活,但是在不工作的情况下关闭环境可以显著优化Kubernetes的成本。
用户可以通过自动安排睡眠时间表和在必要时唤醒环境来设置这些功能。设置此计划意味着Kubernetes系统将自动减少未使用的资源。这确保了它的环境得以保存。此外,当用户需要再次启用时,他的环境将被自动“唤醒”,这意味着工作流不会出现中断。
7.定期清洁Kubernetes。
如果用户可以根据需求构建names 空或使用基于持续集成/持续交付的Kubernetes,最终可能会出现大量未使用的对象或集群,这仍然会增加用户的成本。如果睡眠模式减少了计算资源,它仅用于暂时不活动的资源,并且仍然保留存储和配置。因此,当用户发现一些资源长时间处于非活动状态时,删除它们将是明智的。
8.正确设置Kubernetes集群的大小。
在所有情况下,管理Kubernetes集群是不同的。有许多方法可以正确地确定集群的规模,开发应用程序以确保一致性和持久性是非常重要的。在构建集群之前,用户通常需要考虑将在集群上运行的应用程序的规格。
在设计可伸缩应用程序时,正确调整节点大小非常重要。大量的小节点和少量的大节点是完全不同的两回事。这就是为什么在这两个目标之间找到适当的平衡是最好的办法。
但是用户对于应用的不同需求需要不同数量和大小的节点,所以需要了解各种应用案例所需的大小和数量。
9.标签资源
在任何环境中,无论是云平台、内部设施还是容器,标记资源都是一个明智的想法。在Kubernetes环境中,有许多测试、测试和开发环境,有些服务肯定会被忽略。即使不使用这些服务,也一直是用户的长期负担。应使用标记来确保所有服务都处于受控状态。

AWS为此提供了一个强大的标记方案,可以用来标记属于Kubernetes的服务。用户可以使用这些标记停留在资源、资源持有者和资源利用率上。的有效标记便于用户对未使用的服务进行分类和剔除。在AWS Billing Dashboard中启用这些标签后,用户将能够分配成本并查看各种服务的费用详细信息。
结论
Kubernetes成本优化的第一步是开始监控。然后,为了避免使用不必要的计算资源,用户可以设置资源限制,这将使成本更容易管理。
确定资源的最佳规模对于降低成本至关重要,自动扩展也将有助于实现这一目标。如果使用AWS的服务,用户可以采用成本更低的选项,比如竞价举例。删除空空闲资源的其他步骤包括自动休眠调度和清理未使用的Kubernetes资源。最后,用户可以调整Pod的大小并实现资源标记,以更好地优化Kubernetes成本。
将这些技能整合到用户的流程中,将构建一个成本优化的Kubernetes系统。这将为用户更关键的业务运营和产品改进节省更多成本。


