21

我们正在尝试使用 Grafana 和 Prometheus Operator 监控 K8S。大多数指标都按预期工作,我能够看到具有正确值的仪表板,我们的系统包含 10 个节点,总共 500 个 pod。现在,当我重新启动 Prometheus 时,所有数据都被删除了。我希望它保存两周。

我的问题是,如何定义 Prometheus 卷以将数据保留两周或 100GB 数据库。

我发现了以下内容(我们使用Prometheus运算符):

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

这是 Prometheus Operator 的配置

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    k8s-app: prometheus-operator
  name: prometheus-operator
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: prometheus-operator
  template:
    metadata:
      labels:
        k8s-app: prometheus-operator
    spec:
      containers:
      - args:
        - --kubelet-service=kube-system/kubelet
        - --logtostderr=true
        - --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
        - --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.29.0
        image: quay.io/coreos/prometheus-operator:v0.29.0
        name: prometheus-operator
        ports:
        - containerPort: 8080
          name: http

这是普罗米修斯的配置

    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      name: prometheus
      namespace: monitoring
      labels: 
        prometheus: prometheus
    spec:
      replica: 2
      serviceAccountName: prometheus
      serviceMonitorNamespaceSelector: {}
      serviceMonitorSelector:
        matchLabels:
          role: observeable
      tolerations:
      - key: "WorkGroup"
        operator: "Equal"
        value: "operator"
        effect: "NoSchedule"
      - key: "WorkGroup"
        operator: "Equal"
        value: "operator"
        effect: "NoExecute"
      resources:
        limits:
          cpu: 8000m
          memory: 24000Mi
        requests:
          cpu: 6000m
          memory: 6000Mi
     storage:
       volumeClaimTemplate:
         spec:
        selector:
          matchLabels:
            app: prometheus
        resources:
          requests:
            storage: 100Gi

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

我们有文件系统(nfs),上面的存储配置不起作用,我的问题是:

  1. 我在这里想念的是如何在下面的部分中配置volume, server, ?我应该在哪里找到这个?我怎样才能参考它?我应该以某种方式创建它,还是只提供路径?pathnfs/path/to/prom/db

我们在系统中配置了 NFS。

  1. 如何将其与 Prometheus 结合?

pvc由于我对and没有深入的了解pv,因此我创建了以下内容(不确定这些值,我的服务器是什么以及我应该提供什么路径)...

server: myServer
path: "/path/to/prom/db"

我应该放什么以及如何让我的 Prometheus(即我在问题中提供的配置)使用它?

apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus
  namespace: monitoring
  labels:
    app: prometheus
    prometheus: prometheus
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce # required
  nfs:
    server: myServer
    path: "/path/to/prom/db"

nfs除了我可以用于我的用例之外,是否还有其他持久性卷?请指教如何。

4

5 回答 5

4

我最近开始使用操作员图表,

并设法在不定义 pv 和 pvc 的情况下添加持久性。

在新图表配置中添加持久性比您描述的要容易得多,只需编辑 prometheus.prometheusSpec 下的文件/helm/vector-chart/prometheus-operator-chart/values.yaml

storageSpec:
  volumeClaimTemplate:
    spec:
      storageClassName: prometheus
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
    selector: {}

并添加此 /helm/vector-chart/prometheus-operator-chart/templates/prometheus/ storageClass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: prometheus
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Retain
parameters:
  type: gp2
  zones: "ap-southeast-2a, ap-southeast-2b, ap-southeast-2c"
  encrypted: "true"

这将自动为您创建pvpvc,这将在 aws 中创建一个 ebs,它将存储您的所有数据。

于 2019-04-16T13:52:13.043 回答
1

参考下面的代码。在 configmap 中将 storage-retention 定义为 7d 或所需的保留天数,并将其作为 env 变量加载到容器中,如下所示

      containers:
      - name: prometheus
        image: image: prom/prometheus:latest
        args:
          - '--storage.tsdb.path=/prometheus'
          - '--storage.tsdb.retention=$(STORAGE_RETENTION)'
          - '--web.enable-lifecycle'
          - '--storage.tsdb.no-lockfile'
          - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
        - name: web
          containerPort: 9090
        env:
        - name: STORAGE_RETENTION
          valueFrom:
            configMapKeyRef:
              name: prometheus.cfg
              key: storage-retention

您可能需要在 prometheus 操作员文件中调整这些设置

于 2019-03-28T07:32:00.910 回答
1

要确定何时删除旧数据,请使用此开关--storage.tsdb.retention

例如--storage.tsdb.retention='7d'(默认情况下,Prometheus 将数据保存 15 天)。

要完全删除数据,请使用此 API 调用:

$ curl -X POST -g 'http://<your_host>:9090/api/v1/admin/tsdb/<your_index>'

编辑

Kubernetes 片段示例

...
 spec:
      containers:
      - name: prometheus
        image: docker.io/prom/prometheus:v2.0.0
        args:
          - '--config.file=/etc/prometheus/prometheus.yml'
          - '--storage.tsdb.retention=7d'
        ports:
        - name: web
containerPort: 9090
...
于 2019-03-26T10:19:58.833 回答
1

您必须使用持久卷和卷声明(PV 和 PVC)来持久化数据。您可以参考“ https://kubernetes.io/docs/concepts/storage/persistent-volumes/ ”必须仔细查看上述url中的配置、回收策略、访问模式、存储类型。

于 2019-03-23T03:51:47.057 回答
-1

提供有关我刚开始设置 kube-prometheus 操作员并遇到默认设置的存储问题以来收集的内容的见解。

使用 helm show values 命令创建一个自定义 values.yaml,如下所示,并使用默认值。

helm show values prometheus-com/kube-prometheus-stack -n monitoring > custom-values.yaml

然后开始更新 prometheus、alertmanager 和 grafana 部分以覆盖默认设置或添加自定义名称等...

谈到存储选项,我在文档中看到以下定义自定义存储类或 PV/PVC(如果没有默认 SC 或其他原因)。

这里也是对所有 3 个 pod 使用 storageclass 的一个很好的例子。

于 2020-11-03T14:32:24.863 回答