【问题标题】:Setup statsd-exporter as daemon on Kubernetes and send metrics to it from pods将 statsd-exporter 设置为 Kubernetes 上的守护进程,并从 pod 向其发送指标
【发布时间】:2019-08-27 08:01:19
【问题描述】:

我想在我的 Kubernetes 集群上将 statsd-exporter 设置为 DaemonSet。它公开了一个 UDP 端口 9125,应用程序可以在该端口上使用 statsD 客户端库发送指标。 Prometheus 爬虫可以爬取这个导出器以获取应用程序或系统指标。我想将指标发送到在端口 9125 上运行在导出器中的 UDP 服务器。我有两个选择:

  1. 为 DaemonSet 公开服务为 ClusterIP,然后配置 statsD 客户端以使用该 IP 和端口发送指标

  2. 使 statsd-exporterhostNetwork 上运行,并以某种方式使 pod 能够将指标发送到在同一节点上运行的 exporter

不知何故,选项 2 似乎更好,因为我的 pod 会将指标发送到在同一节点上运行的导出器,但我无法将指标发送到 statsd-exporter 的本地 pod,因为我没有 IP pod 运行所在的节点。

能否请您比较两种方法的优缺点,并建议我如何知道运行 pod 和 exporter 的 Node 的 IP 地址。

编辑 1

我可以通过添加环境变量来获取节点 IP。

- name: NODE_IP
  valueFrom:
    fieldRef:
      fieldPath: status.hostIP

我仍然需要明确哪种方法可以更好地进行设置。暴露类型为 ClusterIP 的服务,然后在 pod 中使用环境变量中的 HOST:PORT 或在 pod 规范中使用 hostNetwork: true,然后使用 NODE_IP 环境变量访问它。 clusterIp 是否保证数据包会被路由到与发送数据包的 pod 相同的节点?

编辑 2

我探索了headless service,我认为这最接近我想要的。但我不确定 DNS 解析是否会将本地节点 IP 作为nslookup 中的第一个结果返回。

【问题讨论】:

    标签: kubernetes prometheus statsd


    【解决方案1】:

    我会建议以下两种方法之一,它们各有利弊。

    • 速度快,可能并不完全安全。

    使用hostPort 设置的守护进程。这会很快,因为两个 pod 都在同一个节点上,但是 statsd 端口会被暴露。 (您需要通过其他方式保护 statsd)

    • 不如hostPort 快,但安全

    公开服务并使用服务 dns 进行连接 (servicename.namespace.svc.cluster.local)。没有hostPort 快,因为无法到达特定的 pod,但安全,因为集群外的任何人都无法访问 statsd。

    更多详情:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#communicating-with-daemon-pods

    【讨论】:

    • 是的,我也觉得那些是要走的路。我会等待一段时间其他意见进来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多