乐趣区

关于kubernetes:6个优化策略助你降低K8S成本

Kubernetes 早已成为容器编排引擎的事实标准,而随着 Kubernetes 环境的复杂性持续增长,老本也在一直攀升。CNCF 公布的调查报告《Kubernetes 的 FinOps》显示,68% 的受访者示意 Kubernetes 开销正在上涨,并且一半的人所在的组织经验了每年超过 20% 的开销增长。
 

因而,Kubernetes 老本治理和优化亟需失去系统管理员的器重。本文咱们将理解 6 个优化 Kubernetes 老本的策略和办法。
 

1、正当调整 Pod 和节点

降低成本最简略的形式之一是治理 Pod 和节点应用的资源。只管通常的倡议是留有足够的机动空间,但 适度配置或容许应用程序无限度地应用资源会带来灾难性的结果。例如,假如一个 Pod 因为应用程序的谬误而耗费了节点的所有可用内存,不必要地利用了资源,这会导致其余 Pod 齐全没有资源可用。
 

为防止这一状况的产生,用户能够在命名空间级别用 Kubernetes 资源配额和限度区间来限度资源利用率。此外,还能够在容器层面上指定资源申请和限度,强制执行容器能够申请多少资源以及资源的最大限度。
 

节点的大小取决于 Pod 所应用的资源。如果你的工作负载只利用了节点中 50% 的资源,并且短期内资源使用量不会激增,那么用户能够适当放大节点的规模以降低成本。
 

另一个思考因素是调整在单个节点上能够运行的 Pod 数量。即使在没有硬性限度的状况下,在单个节点上运行大量的 Pod 也会导致资源利用效率低下。鉴于这类状况,一部分 K8S 的托管服务提供商曾经限度了单个节点上能够运行 Pod 的数量。
 

2、监控集群和基础设施

正当监控集群环境,包含底层或依赖项资源,有助于治理老本。无论你是应用托管的 Kubernetes 集群还是自建的集群,监控资源利用率和总体老本都是降低成本的第一步,这可能让用户高深莫测地理解计算、存储、网络利用率等状况,以及老本在它们之间的散布状况。
 

云厂商通常可能提供内置工具和根本的监控性能。而利用 Prometheus、Kubecost 等工具能够让用户取得更为全面的洞察。近日公布的利用对立部署与治理平台 Seal AppManager 中也内置了老本治理视图,提供 Kubernetes 的资源开销、共享费用(如闲暇费用、管理费用)的老本汇算和摊派,并内置多维度老本剖析视图为用户提供老本洞察。另外,用户也能够根据集群、我的项目、利用等维度自定义老本视图。

 

3、配置弹性伸缩

Kubernetes 反对 3 类弹性伸缩:

  • HPA:主动程度伸缩
  • VPA:垂直主动伸缩
  • 集群主动伸缩
     

主动充分利用 Kubernetes 弹性伸缩的个性能够帮忙用户以一种简略、高效的形式升高整体 Kubernetes 老本。
 

HPA 能够监控 Pod 的应用状况,主动调整大小,以放弃预期的应用程度。VPA 则能够调整集群中的资源申请和容器限度。主动伸缩会依据需要主动从 Kubernetes 集群中增加或删除节点,它有助于确保工作负载总是有足够的基础设施资源来实现它们的工作,但又不至于让用户最终为闲置的基础设施付费。
 

现阶段而言,并非所有的 Kubernetes 服务或发行版都反对主动伸缩。然而,如果你所采纳的服务反对,那么它能够帮忙你大幅升高 Kubernetes 老本。
 

4、为 K8s 工作负载抉择不同的购买策略

对于 AWS 或者 GCP 来说,按需实例是最低廉的选项。因而,咱们应该充分利用预留的实例甚至是 Spot instances(竞价型实例)。
 

相较于按需价格,Spot instances 最高可取得 90% 的折扣(即 1 折)。它们是短期工作或无状态服务的最佳抉择,能够疾速从新调度,同时不会失落数据。为防止中断,用户能够应用工作负载管理工具,将 Spot 实例保留在某个固定时段内。
 

为每个节点都布局购买策略,并在可能的状况下优先应用 Spot 实例,以充分利用购买折扣。如果 Spot 实例不适宜你的工作负载,比方你的容器正在运行数据库,那么能够购买具备稳固可用性的节点。在任何状况下,尽量减少应用按需资源。
 

5、Kubernetes 调度

调整 Pod 和节点的大小和规模后,须要确保 pod 被调度到了正确的节点上。K8s 调度流程将 Pod 与节点相匹配,并且调度器的默认行为能够自定义。假如你想把具备要害业务性能的容器放在一个高性能的节点上,而把其余不太要害的组件放在绝对较低性能的节点上。默认状况下,即使在不同性能层上配置节点,K8s 也无奈匹配正确的节点。
 

如果一个非关键的 pod 被安顿在一个高性能的节点上,会导致性能节约并最终进步老本。Kubernetes 提供诸如 nodeSelector、亲和性以及污点和容忍等个性以解决此类问题并优化调度。它们能够用来齐全配置 Kubernetes 的调度过程,以满足用户的需要,从而使用户可能无效地应用整个节点的可用资源。
 

6、简化开发

只管容器化的浪潮愈演愈烈,但并不意味着所有都须要容器化。一些开发团队试图为了容器化而容器化应用程序或工作负载,这可能会导致在 Kubernetes 集群上运行不必要的工作负载。这类工作负载在其余技术上也能够轻松运行,并且老本会更低。譬如,能够将无服务器技术用于基于事件的个性,而次要将 Kubernetes 用于高可用性和要害工作的性能。
 

总结

老本治理并不总是开发人员的最高优先级,然而的确是必须思考的方面。正确的解决方案能够使 Kubernetes 的老本治理变得及时、经济和毫不费力,使企业可能在老本和性能之间实现完满的均衡。
 

利用不同的云供应商建设多云环境能够使用户从每个平台提供的折扣中获益,甚至能够在平台之间迁徙工作负载以抉择最优惠的选项,同时不会呈现服务中断或服务质量降落的状况。另外,也能够抉择应用不同的技术,将性能卸载到最符合要求的技术或服务上。这种抉择能够在无效治理整个应用程序的同时,更深度地治理老本。

退出移动版