在 Kubernetes 上将 statsd-exporter 设置为守护进程并从 pods 向其发送指标
Setup statsd-exporter as daemon on Kubernetes and send metrics to it from pods
我想在我的 Kubernetes 集群上将 statsd-exporter
设置为 DaemonSet。它公开了一个 UDP 端口 9125,应用程序可以在该端口上使用 statsD 客户端库发送指标。 Prometheus
抓取工具可以抓取此导出器以获取应用程序或系统指标。我想将指标发送到端口 9125 上导出器中的 UDP 服务器 运行ning。我有两个选择:
将服务公开为 DaemonSet ClusterIP
,然后配置 statsD 客户端使用该 IP 和端口发送指标
在 hostNetwork
上创建 statsd-exporter
运行,并以某种方式启用 pods 将指标发送到 exporter
运行在同一个节点上。
不知何故,选项 2 似乎更好,因为我的 pods 将向同一节点上的导出器 运行ning 发送指标,但我无法将指标发送到statsd-exporter
因为我没有 pod 正在 运行 上的节点的 IP。
能否请您比较两种方法的优缺点,并建议我如何知道 pod 所在节点的 IP 地址 运行ning 以及导出器。
编辑 1
我可以通过添加环境变量来获取节点IP。
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
我仍然需要弄清楚哪种设置方法更好。公开类型为 ClusterIP
的服务,然后在 pod 中使用来自环境变量的 HOST:PORT
或在 pod 规范中使用 hostNetwork: true
,然后使用 NODE_IP
环境变量访问它。 clusterIp 是否保证数据包将路由到与发送数据包的 pod 相同的节点?[=25=]
编辑 2
我探索了 headless service,我认为这最接近我想要的。但是我不确定DNS解析会return本地节点IP作为nslookup
中的第一个结果。
我会推荐以下两种方法之一,两者各有利弊。
- 快速,可能不完全安全。
使用 hostPort
设置的守护进程。它会很快,因为 pods 都在同一个节点上,但 statsd 端口会暴露。 (您需要通过其他方式保护 statsd)
- 不如
hostPort
快但安全
公开服务并使用服务 dns 进行连接 (servicename.namespace.svc.cluster.local
)。不如 hostPort
快,因为无法到达特定的 pod,但安全,因为集群外部的任何人都无法访问 statsd。
更多详情:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#communicating-with-daemon-pods
我想在我的 Kubernetes 集群上将 statsd-exporter
设置为 DaemonSet。它公开了一个 UDP 端口 9125,应用程序可以在该端口上使用 statsD 客户端库发送指标。 Prometheus
抓取工具可以抓取此导出器以获取应用程序或系统指标。我想将指标发送到端口 9125 上导出器中的 UDP 服务器 运行ning。我有两个选择:
将服务公开为 DaemonSet
ClusterIP
,然后配置 statsD 客户端使用该 IP 和端口发送指标在
hostNetwork
上创建statsd-exporter
运行,并以某种方式启用 pods 将指标发送到exporter
运行在同一个节点上。
不知何故,选项 2 似乎更好,因为我的 pods 将向同一节点上的导出器 运行ning 发送指标,但我无法将指标发送到statsd-exporter
因为我没有 pod 正在 运行 上的节点的 IP。
能否请您比较两种方法的优缺点,并建议我如何知道 pod 所在节点的 IP 地址 运行ning 以及导出器。
编辑 1
我可以通过添加环境变量来获取节点IP。
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
我仍然需要弄清楚哪种设置方法更好。公开类型为 ClusterIP
的服务,然后在 pod 中使用来自环境变量的 HOST:PORT
或在 pod 规范中使用 hostNetwork: true
,然后使用 NODE_IP
环境变量访问它。 clusterIp 是否保证数据包将路由到与发送数据包的 pod 相同的节点?[=25=]
编辑 2
我探索了 headless service,我认为这最接近我想要的。但是我不确定DNS解析会return本地节点IP作为nslookup
中的第一个结果。
我会推荐以下两种方法之一,两者各有利弊。
- 快速,可能不完全安全。
使用 hostPort
设置的守护进程。它会很快,因为 pods 都在同一个节点上,但 statsd 端口会暴露。 (您需要通过其他方式保护 statsd)
- 不如
hostPort
快但安全
公开服务并使用服务 dns 进行连接 (servicename.namespace.svc.cluster.local
)。不如 hostPort
快,因为无法到达特定的 pod,但安全,因为集群外部的任何人都无法访问 statsd。
更多详情:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#communicating-with-daemon-pods