0

我创建了一个 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 天内实际使用了多少,以便他们更好地为升级资源的需要做好准备
  • NICE-TO-HAVE:一个 webhook 或类似的当用户达到他们的限制时接收通知

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

4

0 回答 0