草庐IT

Kubecost - Kubernetes 开支监控和管理

east4ming 2023-03-28 原文

?️URL: https://www.kubecost.com/

?Description:

Kubeccost 为使用 Kubernetes 的团队提供实时成本可视化和洞察,帮助您持续降低云成本。

昨天浏览 Kubectl 插件的时候发现了 Kubecost,一看惊为天人啊,这个功能对于运营团队和 PM 团队领导来说太重要了。直接把监控数据换算成钱,而且明确告诉你钱花在哪个 namespace、哪个应用、哪个标签、哪个 deployment下,明确告诉你那些钱花得值、哪些钱浪费了,有哪些办法可以减少浪费… 真的都是实打实的「降本」功能。

下面详细介绍一下。

亮点:监控和降低云成本

Kubeccost 为使用 Kubernetes 的团队提供实时成本可视化和洞察,帮助您持续降低云成本。

产品功能

?️ 成本分摊

按 Kubernetes 概念划分成本,包括部署(Deployment)、服务(Service)、命名空间(Namespace)、标签(Label)等等。开销视图可以跨越单个视图中的多个集群或通过单个 API 端点。

? 统一成本监控

将 Kubernetes 的成本与任何外部云服务或基础设施的支出结合起来,就可以获得一个完整的图景。可以分摊外部成本,然后归因于任何Kubernetes 概念,以实现综合支出。

⚖️ 成本优化方案

不牺牲绩效的前提下接受动态的建议。优先考虑关键基础设施或应用程序更改,以提高资源效率和可靠性。

? 开销警报和治理

alerts: # Kubecost 产生关于群集数据的警报
    # 在命名空间 `kubecost` 的每日预算警报
  - type: budget # 支持: 预算, recurringUpdate, 等.
    threshold: 50 # 预算警报所需
    window: daily # 或 1d
    aggregation: namespace
    filter: kubecost

在成本超支和基础设施中断风险成为实时通知问题之前,迅速捕捉它们。通过集成像 PagerDuty 和 Slack 这样的工具来保留工程工作流。

而且可以运行在以下环境:

  • Azure
  • AWS
  • Google Cloud
  • 内网环境
  • Kubernetes
  • 本地部署

安装

可以使用 Helm Chart 进行安装。

![[K8S 实用工具之四 - kubectl 实用插件#cost https github com kubecost kubectl-cost]]

安装见这里:《K8S 实用工具之四 - kubectl 实用插件:cost

部署完成后,访问 kubecost-cost-analyzer 的 9090 端口即可查看 UI,Ingress 方式或者 port-forward 都可以。

kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090

升级

helm repo update && helm upgrade kubecost kubecost/cost-analyzer -n kubecost

卸载

也是 Helm:

helm uninstall kubecost -n kubecost

? 实际效果展示

以我的集群为例,这展示的不是 UI,这展示的是白花花银子、绿油油的美元 ? 啊!

Kubecost 有以下几大菜单项,各个都是省钱能手。

  1. ?️ Overview(总览)
  2. ? Cost Allocation(成本分摊)
  3. ? 资产
  4. ? 节流
  5. ? 健康状态
  6. ? 报告
  7. ? 开销警报

总览

通过 port-forward 方式,访问 http://localhost:9090,首先的页面平平无奇:

Kubecost 第一屏:Cluster 集群 #1, 5 个节点,每月开销 138.39 美元。

点进去后,真正的大杀器来了:

  • 左上角:识别到 5 条省钱小妙招,每月可以帮我节省 $93.64。?

  • 右上角:每月开销 $138.39,成本效益 2.7%,97.3% 都让云厂商白嫖啦 ?

  • 左下角:每月集群开销,基于资源价格的每月运行费率费用走势图,这里还可以拆分到:

    • 计算:

    • 内存

    • 存储

    • 此外!点击右侧「CLUSTER METRICS」还可以直接跳转到我们熟悉的 Grafana 仪表板,查看监控指标和 ? 的具体联系。(下一篇再补充)

  • 右下角:资源浪费率(?资源利用率),基于当前已购的资源和过去 7 天的用量

    • 计算:每月空跑 $105.10 ?
    • 内存:每月空跑 $20.51 ?
    • 存储:每月空跑 $9.10 ?
    • 刨去空跑,我的应用主要的消耗在内存的 $1.34,另外存储方面 System 用了 $1.53

Overview 继续下拉,还是震惊:

  • 左上角:基于 Controller 维度的成本分摊,根据过去 2 天的资源消耗,算出 Controller 的每月分摊成本,比如我的:
    • kubecost/deployment:kubecost-cost-analyzer 成本占比 $8.37 (17.1%)
    • monitoring/statefulset:prometheus-prometheus-operator-prometheus 成本占比 $5.83(11.9%)
    • monitoring/statefulset:alertmanager-prometheus-operator-alertmanager: 成本占比 $2.81(5.7%)
  • 右上角:基于 Service 维度的成本分摊,根据过去 2 天的资源消耗,算出 Service 的每月分摊成本,比如我的:
    • kubecost/kubecost-cost-analyzer 成本占比 $8.37 (17.1%)
  • 左下角:基于 NameSpace 维度的成本分摊,以及成本效益评分(1-100分),比如我的:
    • kubecost:每月开销 $10.74,效益 22 分,不及格!?
    • monitoring:每月开销 $9.63,效益 42 分,不及格!?
    • crossplane-system:每月开销 $5.70,效益 5 分,战五渣! ?
    • kube-system:每月开销 $2.71, 效益 17 分,不及格!?
    • loki-stack:每月开销 $0.66,满分!(Loki YYDS ?)?
  • 右下角:基础架构健康度,94 分(集群运行状况评级是对基础设施可靠性和性能风险的评估,分数范围从1-100),属于花钱保平安了这是。?

ℹ️ 提示

成本效益定义为 CPU 和 RAM 的(使用量 / request)。如果使用了资源,但没有 request 资源,那么效率被认为是无限的。

成本分摊

进入第二个菜单,成本分摊,效果如下:

细粒度到:CPU、GPU、RAM、PV、Network、LB、Shared。

另外,成本效益可以根据非常多的维度去进行分析,我想应该可以满足领导的需求:

资产

ℹ️ 提示

资产和公有云的信息对接后,可以获得更丰富的信息,如:云账号、供应商类型等。

目前版本可以对接:AWS 和 GCP,但是是付费功能。

下图为资产信息:

也可以从多个维度拆分:

悬停到信息按钮,会告诉你计费单位:(计费单价可调整的)。如下图:

  • 每小时 Node 开销为:$0.03733。

节流

如下图,可以评估每月大概能省多少钱,节省的比例。以及具体的节流措施:

  • 管理低利用率节点
  • 本地磁盘利用率低
  • Pod 配置的 Request 太多
  • 识别到潜在的不用的 wordload

健康状态

这个功能比较一般,就是类似 K9S 的 popeye。效果如下图:

  • 有 Pod pending
  • Worker node 没有分散在多个可用区(这个提示不错?️)
  • 集群没有 master 副本

点进去还会有详细的指南,如下图:

报告

报告就是基于 成本 和 资产两个维度,根据上面的仪表来定制定期的报告。

成本警报

成本警报就是告警,主要的区别是基于?的维度:

  • 反复出现类
  • 成本效益类
  • 预算类
  • 开销变化类(如上文产品功能中的告警就是开销突然上升了 50%)
  • 健康类
  • 诊断类

设置

定制化还挺全面的,说一些我认为实用的配置吧:

  1. 配置 Label,比如:租户对应的 Label 是 Tenant,部门对应的 Label 是 Apartment,产品对应的 Label 是 app…
  2. 价格类设置,可以设置:
    1. 折扣
    2. 共享开销比例、对应的 NS、Label 等
    3. 单价
    4. 货币

总结

完整看下来,如果让运营团队和 PM 团队领导看到,一定会爱不释手的。???

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

有关Kubecost - Kubernetes 开支监控和管理的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  3. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  4. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  5. ruby - (Ruby || Python) 窗口管理器 - 2

    我想用这两种语言中的任何一种(最好是ruby​​)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生

  6. ruby-on-rails - 事件管理员和自定义方法 - 2

    这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什

  7. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  8. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  9. ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录 - 2

    我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica

  10. ruby-on-rails - 具有管理 namespace 的 Rails 3 中的 I18n - 2

    我正在根据Rails指南的建议开发Rails应用程序,以创建包含翻译的文件夹树和文件。我的文件夹树与此类似:|-defaults|---es.rb|---en.rb|-models|---book|-----es.rb|-----en.rb|-views|---defaults|-----es.rb|-----en.rb|---books|-----es.rb|-----en.rb|---users|-----es.rb|-----en.rb|---navigation|-----es.rb|-----en.rbconfig/locales/views/books/en.yml中的内容

随机推荐