当前位置: 首页 > 科技观察

Kubernetes最佳实践:如何正确设置资源请求和限制?

时间:2023-03-12 12:38:02 科技观察

翻译|布加迪评论|SunShujuanKubernetes是一个动态系统,可以自动适应用户工作负载的资源利用率。Kubernetes有两个扩展级别。每个单独的Kubernetes部署都可以使用Horizo??ntalPodAutoscaler(HPA)自动扩展,而整个集群则使用ClusterAutoscaler进行扩展。HPA监视部署中各个pod的目标指标(通常是CPU或内存使用率),并根据需要添加或删除pod以使该指标更接近指定目标。同时,ClusterAutoscaler处理集群本身的扩展。它监视无法调度的pod,并在集群中添加或删除节点以容纳这些pod。支持这两种扩展操作的Kubernetes的一个关键特性是能够设置特定的资源请求和工作负载限制。通过对每个pod使用多少CPU和内存设置合理的限制和请求,您可以最大限度地利用基础架构,同时确保应用程序的高性能。要充分利用Kubernetes集群,正确设置资源限制和请求非常重要。对应用程序设置过低的限制可能会导致问题。比如内存限制太低,Kubernetes肯定会因为违反限制而杀掉应用。同时,如果您将限制设置得太高,则会因过度分配而浪费资源,这意味着您最终会支付更高的费用。虽然Kubernetes最佳实践规定您应该始终对工作负载设置资源限制和请求,但了解每个应用程序使用的值并不总是那么容易。结果,一些团队从不设置请求或限制,而另一些团队在初始测试期间将它们设置得太高,然后从不确保它们设置正确。确保缩放正常运行的关键是为每个工作负载正确设置资源限制和请求,以便工作负载高效运行。设置资源限制和请求是尽可能高效可靠地在Kubernetes集群上运行应用程序的关键。1、如何设置Kubernetes资源?Fairwinds的开源项目Goldilocks帮助团队为他们的Kubernetes部署分配资源并微调这些资源。Goldilocks是一个Kubernetes控制器,它收集有关正在运行的pod的数据,并提供有关如何设置资源请求和限制的建议。它帮助组织了解资源使用情况、资源成本和最佳实践以确保效率。Goldilocks使用KubernetesVerticalPodAutoscaler(VPA)。它考虑了工作负载过去的内存和CPU使用情况,以及pod当前的资源使用情况,以便建议如何设置资源请求和限制。(虽然VPA可以为您设置限制,但通常最好只使用VPA引擎来提出建议。)本质上,该工具为命名空间中的每个部署创建一个VPA,然后查询该VPA以获取信息。要查看这些建议,必须使用Kubectl查询每个VPA对象,这对于大中型部署来说很快就会变得很麻烦。这是仪表板派上用场的地方。一旦您的VPA到位,建议将出现在Goldilocks仪表板中。仪表板根据您希望部署的服务质量(QoS)类别提供两种类型的建议:保证,这意味着应用程序将获得比其他工作负载更高的优先级,以保证可用资源。在此类别中,您将资源请求和限制设置为完全相同的值,这将保证容器请求的资源在计划时可用。这种QoS类别通常适用于最稳定的Kubernetes集群。Burstable,这意味着应用程序将保证获得最少的资源,但如果资源可用,则会获得更多。事实上,您的资源请求低于限制。调度程序将使用请求将pod放置到节点上,但随后pod可以在终止或节流之前使用更多资源达到上限。在资源匮乏时决定丢弃哪些工作负载时,此QoS类别的优先级较低。仪表板提供有关保证和突发QoS类别的建议。在Guaranteed类别中,我们建议将Request和Limit设置为VPA“Target”字段。请注意,第三个QoS类别:BestEffort表示未设置任何请求或限制,并且仅当所有其他请求都得到满足时才将资源分配给应用程序。不推荐尽力而为。2.为您的集群使用专用实例组如果您有兴趣微调您的工作负载运行的实例,您可以使用不同的实例组类型和节点标签将工作负载定向到特定的实例类型。不同的业务系统往往有不同规模的资源需求,以及专门的硬件需求(如GPU)。Kubernetes中节点标签的概念允许您在所有不同的节点上放置标签。同时,pod配置好后,可以使用特定的“nodeSelectors”来匹配特定的节点标签,这些标签决定了pod可以调度到哪些节点。通过使用具有适当标记的不同实例类型的实例组,您可以将您选择的云提供商的底层硬件与您在Kubernetes中的工作负载混合和匹配。如果您有不同规模的工作负载和不同的需求,那么将这些工作负载放在不同的实例类型上并使用标签将工作负载定向到这些不同的实例类型在战略上和成本上都是明智的。Spot实例与这个想法密切相关。大多数组织都熟悉按需购买实例或固定期限的预留。但是,如果您的工作负载可能会被中断,您可能需要考虑使用Spot实例。这些实例允许您以大幅折扣使用云提供商的剩余容量,但如果对常规按需实例的需求增加,您的实例可能会面临终止的风险。如果您有一些可以承受实例随机终止风险的业务工作负载,您可以使用相同的节点标签概念将这些工作负载专门调度到这些类型的实例组上,从而显着节省成本。3、关于如何使用Kubernetes资源的建议?Goldilocks是FairwindsInsights用来提供工作负载效率和性能优化的工具之一。借助FairwindsInsights,Goldilocks可以跨多个集群部署,因此团队可以通过单一管理平台获取信息。FairwindsInsights向Goldilocks添加数据和建议,包括潜在的成本节约。显示的仪表板包括命名空间和部署列表,以及平均总成本和成本建议。许多组织将CPU和内存请求和限制设置得太高,因此当他们应用FairwindsInsights的建议时,他们可以将更多的pod放在更少的Kubernetes工作节点上。启用ClusterAutoscaler后,任何冗余节点在不使用时都会被删除,从而节省时间和金钱。使用FairwindsInsights等软件或Goldilocks等开源工具,开发人员可以通过自动为自己提供建议来避免胡乱猜测。反过来,这使您有机会提高集群效率并减少云开销。原文链接:https://www.cncf.io/blog/2022/10/20/kubernetes-best-practice-how-to-correctly-set-resource-requests-and-limits/