繁体   English   中英

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

[英]Setup statsd-exporter as daemon on Kubernetes and send metrics to it from pods

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

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

  2. 使statsd-exporter在运行hostNetwork ,并以某种方式使舱体发送度量exporter在同一节点上运行。

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

您能否比较这两种方法的优缺点,并提出建议,我如何才能知道运行Pod的Node的IP地址以及导出程序。

编辑1

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

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

我仍然需要明确哪种设置方法会更好。 公开类型为ClusterIP的服务,然后使用Pod中环境变量中的HOST:PORT或使用Pod spec中的hostNetwork: true ,然后使用NODE_IP环境变量来访问它。 clusterIp是否保证将数据包路由到与发送数据包的Pod相同的节点?

编辑2

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

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

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

使用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

暂无
暂无

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

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