3

在我的 docker 设置中,我维护targets.json的文件是动态更新的,其中包含要探测的目标。该文件开始为空,但在某些用例中附加了目标。

示例目标.json

[
  {
    "targets": [
      "x.x.x.x"
    ],
    "labels": {
      "app": "testApp1"
    }
  },
  {
    "targets": [
      "x.x.x.x"
    ],
    "labels": {
      "app": "testApp2"
    }
  }
]

然后将此文件提供给 prometheus 配置为file_sd_configs. 一切正常,由于应用程序中的某些事件,目标被添加到 targets.json 文件中,prometheus 开始监控以及黑盒以进行健康检查。

scrape_configs:
  - job_name: 'test-run'
    metrics_path: /probe
    params:
      module: [icmp]
    file_sd_configs:
      - files:
        - targets.json
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox:9115

在我的 node.js 应用程序中,我可以将数据附加到 targets.json 文件,现在我试图在 minikube 上的 Kubernetes 中复制它。我尝试按以下方式添加 ConfigMap 并且它可以工作,但我不想在配置中填充目标,而是维护一个 json 文件。

这可以使用持久卷来完成吗?运行 Prometheus 的 pod 将始终读取目标文件,而运行应用程序的 pod 将写入目标文件。

kind: ConfigMap
apiVersion: v1
metadata:
  name: prometheus-cm
data:
  targets.json: |-
    [
      {
        "targets": [
          "x.x.x.x"
        ],
        "labels": {
          "app": "testApp1"
        }
      }
    ]

简单来说,在 Kubernetes 中推荐使用什么策略,以便一个 pod 可以读取 json 文件,而另一个 pod 可以写入该文件。

4

1 回答 1

4

为了实现您的目标,您需要使用PVC

PersistentVolume (PV)是集群中由管理员配置的一块存储。它是集群中的资源,就像节点是集群资源一样。PV 是与 Volumes 类似的卷插件,但其生命周期独立于使用 PV 的任何单个 pod。此 API 对象捕获存储实现的详细信息,无论是 NFS、iSCSI 还是特定于云提供商的存储系统。

PersistentVolumeClaim (PVC)是用户的存储请求。它类似于 pod。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以安装一次读/写或多次只读)。

如果一个 pod 必须写入它而另一个 pod 必须读取它,则需要持久化 json 文件。有一个官方指南分步描述该概念:

  • 创建一个PersistentVolume

  • 创建一个PersistentVolumeClaim

  • 创建一个Pod将您PersistentVolumeClaim用作卷的

我还建议您阅读以下内容:在您的 Kubernetes 集群上创建 ReadWriteMany PersistentVolumeClaims作为补充。

于 2020-07-29T11:12:16.640 回答