Kubernetes:简单监控每个命名空间的资源使用情况

问题描述

我创建了一个 SaaS 解决方案,该解决方案允许用户通过 Web 界面启动自己的具有某些功能的服务器。为此,每个用户都有自己的 kubernetes 命名空间。 我需要根据每个用户的资源使用情况(CPU、内存、存储和网络流量)单独计费。我不想创建任何复杂的计费系统,例如“即用即付”功能,但我需要能够判断用户是否接近或超过其当前限制。

事实证明这是一项非常困难的任务,许多不同的组件都是可能的解决方案:

指标服务器 - https://github.com/kubernetes-sigs/metrics-server

收集资源指标,但它们不准确,除了根据自己的文档自动缩放外不适合任何其他用途

普罗米修斯(操作员)- https://github.com/prometheus-operator/prometheus-operator

有自己的收集指标的实现,这些指标似乎更适合用作计费的基础。可以使用 AlarmManager 来获取有关限制或达到资源限制的通知。 它似乎需要相当多的依赖项才能获得我需要的资源指标,例如“Prometheus node-exporter”、“Prometheus Adapter for Kubernetes Metrics APIs”和/或 kube-state-metrics。

可以使用诸如“kube-prometheus”(https://github.com/prometheus-operator/kube-prometheus)或“tobs”(https://github.com/timescale/tobs)之类的“堆栈”来安装所有这些依赖项 根据您选择的堆栈,您可能还需要考虑使用“Thanos”(https://thanos.io/) 或“TimescaleDB”(https://www.timescale.com/) 之类的东西长期存储指标

荣誉提名:

Kubecost - https://www.kubecost.com/

不仅收集所有相关指标,还提供与大型云提供商的集成,以便为不同的工作负载提供最新且准确的成本。非常酷,但也比我目前需要的要多得多。

KubePlus - https://github.com/cloud-ark/kubeplus

可以收集相关指标,但似乎更倾向于支持 CRD 开发。

我是 kubernetes 的新手,不确定是否有做这种事情的事实上的标准?我发现的所有可能的解决方案似乎都有点复杂,并且提供的功能比我实际需要的要多得多。我的要求是:

  • 假设每个用户都有 1 个 vCPU、1gb 内存、1tb 存储空间和 1tb 网络流量。我需要能够计算出用户在过去 30 天内实际使用了多少,以便他们更好地准备升级资源的需求
  • 不错的选择:一个网络钩子或类似的东西,可以在用户达到上限时收到通知

关于我如何以一种不会在复杂性和依赖性方面爆炸的方式来解决这个问题,有人有任何提示或建议吗?我目前的计划是使用带有某种长期存储的 Prometheus 堆栈,我可以查询并向用户提供 UI

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)