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

????Description:

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

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

下面详细介绍一下。

亮点:监控和降低云成本

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

Kubecost 概览页

产品功能

????️ 成本分摊

成本分配功能示意图

按 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 有以下几大菜单项,各个都是省钱能手。

Kubecost 菜单

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

总览

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

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

Kubecost 第一屏

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

Kubecost Overview - 1

  • 左上角:识别到 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 继续下拉,还是震惊:

Kubecost Overview - 2

  • 左上角:基于 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。效果如下图:

Cluster Health

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

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

多可用区指南

报告

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

Reports

成本警报

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

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

告警分类

设置

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

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

总结

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

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