在kubernetes上将statsd-exporter设置为守护程序,并从pods向其发送指标

时间:2019-08-27 08:01:19

标签: kubernetes prometheus statsd

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

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

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

以某种方式,选项2似乎更好,因为我的pod会将指标发送给在同一节点上运行的导出器,但是由于我没有,我无法将指标发送到statsd-exporter的本地pod Pod在其上运行的节点的IP。

能否请您比较两种方法的优缺点,并建议我如何知道运行Pod的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中的第一个结果。

1 个答案:

答案 0 :(得分:2)

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

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

使用hostPort设置的守护进程。由于两个Pod都将位于同一节点上,所以速度会很快,但是statsd端口将会暴露。 (您需要通过其他方式保护statsd)

  • 不如hostPort快但安全

公开服务并使用服务dns连接(servicename.namespace.svc.cluster.local)。不能像hostPort那样快,因为它无法到达特定的容器,但是由于没有集群外的任何人都可以达到statsd,因此安全。

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