如何计算K8S集群中Prometheus服务器Pod所需的持久卷大小?

时间:2019-10-11 06:45:09

标签: kubernetes prometheus persistent-storage

我将Prometheus掌舵图安装到kubernetes集群以进行监视。 默认情况下,

  • Prometheus服务器的永久卷大小定义为8Gi。
  • Prometheus服务器将在该卷中存储指标15天(保留期)

在部署图表几天后,prometheus服务器容器被设置为crashloopbackoff状态。 从Pod日志中找到的原因是:

level=error ts=2019-10-09T11:03:10.802847347Z caller=main.go:625 err="opening storage failed: zero-pad torn page: write /data/wal/00000429: no space left on device"

这意味着磁盘(持久卷)中没有可用空间来保存数据。 因此,我清除了该卷的现有数据并临时解决了该问题。

对此合适的解决方案是什么?

Prometheus documentation说:

要计划Prometheus服务器的容量,可以使用粗略公式:

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

有人可以解释一下如何使用此公式吗?

为什么保留15天的8Gi容量还不够?

编辑:

6天后默认使用8Gi空间为100%。

2 个答案:

答案 0 :(得分:1)

15天约为130万秒。让我们高估每个样本8个字节。因此,每个指标大约需要10mb。因此8GB可让您存储800个指标。您可能不止这些。将您要存储的系列数乘以10,即需要的兆字节数。大致来说,这至少会使您获得正确的数量级。

答案 1 :(得分:1)

从Prometheus 2.7开始,您引入了一个新标记来管理保留。来自文档:

  

--storage.tsdb.retention.size:[EXPERIMENTAL]这确定存储块可以使用的最大字节数(请注意,这不包括WAL大小,这可能是很大的)。最旧的数据将首先被删除。默认为0或禁用。该标志是实验性的,可以在将来的版本中进行更改。支持的单位:KB,MB,GB,PB。例如:“ 512MB”

您可以在“部署”配置中设置此参数选项,以根据大小而不是时间限制保留时间。

根据this的消息,由于尚处于试验阶段,因此可以为WAL和一个最大大小的块留出空间(保留时间和一个月的10%中的较小者)是安全的。