kubernetes - 将 statsd-exporter 设置为 Kubernetes 上的守护进程,并从 pod 向其发送指标
问题描述
我想statsd-exporter
在我的 Kubernetes 集群上设置为 DaemonSet。它公开了一个 UDP 端口 9125,应用程序可以在该端口上使用 statsD 客户端库发送指标。Prometheus
爬虫可以爬取此导出器以获取应用程序或系统指标。我想将指标发送到在端口 9125 上运行在导出器中的 UDP 服务器。我有两个选择:
为 DaemonSet公开服务
ClusterIP
,然后配置 statsD 客户端以使用该 IP 和端口发送指标在 上
statsd-exporter
运行hostNetwork
,并以某种方式使 Pod 能够将指标发送到exporter
在同一节点上运行。
不知何故,选项 2 似乎更好,因为我的 pod 会将指标发送到在同一节点上运行的导出器,但我无法将指标发送到本地 pod,statsd-exporter
因为我没有 pod 所在节点的 IP继续运行。
您能否比较两种方法的优缺点,并建议我如何知道 Pod 与导出器一起运行的 Node 的 IP 地址。
编辑 1
我可以通过添加环境变量来获取节点 IP。
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
我仍然需要明确哪种方法可以更好地进行设置。使用类型公开服务,ClusterIP
然后在 pod 中使用HOST:PORT
from 环境变量或hostNetwork: true
在 pod 规范中使用,然后使用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
推荐阅读
- node.js - 从 s3 损坏的图像
- c# - 失焦时如何接收按键 C# Forms
- javascript - 将“保存图像”javascript 按钮添加到 php 脚本
- bash - 如何使用 bash 将脚本中的一个单词替换为另一个单词?
- python - 'list' 对象没有属性 'where' 试图合并两个数据集
- netsuite - NetSuite 从 RESTlet 授权用户名密码
- php - laravel 连接查询抛出未找到列错误
- java - 如何转换列表
列出 使用 Java 8 中的流? - javascript - 有效查找已知坐标之间是否形成三角形
- database - 为什么我的数据库在将数据添加到另一个数据库时会变空?