【发布时间】:2019-08-27 08:01:19
【问题描述】:
我想在我的 Kubernetes 集群上将 statsd-exporter 设置为 DaemonSet。它公开了一个 UDP 端口 9125,应用程序可以在该端口上使用 statsD 客户端库发送指标。 Prometheus 爬虫可以爬取这个导出器以获取应用程序或系统指标。我想将指标发送到在端口 9125 上运行在导出器中的 UDP 服务器。我有两个选择:
为 DaemonSet 公开服务为
ClusterIP,然后配置 statsD 客户端以使用该 IP 和端口发送指标使
statsd-exporter在hostNetwork上运行,并以某种方式使 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