繁体   English   中英

Kube.netes 中 Prometheus 的动态目标?

[英]Dynamic targets for Prometheus in Kubernetes?

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

样本目标.json

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

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

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 应用程序中,我能够将 append 数据传输到 targets.json 文件,现在我试图在 minikube 上的 Kube.netes 中复制它。 我尝试如下添加 ConfigMap 并且它有效,但我不想在配置中填充目标,而是维护一个 json 文件。

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

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

简单来说,Kube.netes 中推荐的策略是一个 pod 可以读取 json 文件,另一个 pod 可以写入该文件。

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

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

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

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

  • 创建PersistentVolume

  • 创建PersistentVolumeClaim

  • 创建一个使用PersistentVolumeClaim作为卷的Pod

我还建议阅读此内容:作为补充,在您的 Kube.netes 集群上创建 ReadWriteMany PersistentVolumeClaims

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM