4

我在集群的所有节点上运行了一个代理(datadog 代理,但可能是其他东西),通过 DaemonSet 部署。该代理正在收集有关主机的各种指标:cpu 和内存使用情况、IO、正在运行的容器。

它还可以通过侦听特定端口 1234 来收集自定义指标。

如何将数据从 pod 发送到在与 pod 相同的节点上运行的代理实例?如果我使用 Kubernetes 服务,发送指标的调用将在我的所有代理之间进行负载平衡,我将失去发出指标的 pod 与运行它的主机之间的相关性。

4

3 回答 3

6

我使用完全相同的设置,dd-agent在我的 kubernetes 集群中作为 DaemonSet 运行。使用您在此处评论的相同端口映射,您只需将指标发送到运行应用程序的节点的主机名。

您可以使用 pod 规范中的向下 api 将节点名称添加到 pod 环境:

env:
- name: NODE_NAME
  valueFrom:
    fieldRef:
      fieldPath: spec.nodeName 

然后,您只需打开一个 UDP 连接即可${NODE_NAME}:8125连接到 datadog 代理。

于 2017-07-05T13:14:08.580 回答
3

一些初步的 Google 搜索通过 https://github.com/kubernetes/kubernetes/issues/24657 将我带到https://github.com/kubernetes/kubernetes/pull/42717。看起来拉取请求已及时合并到 Kubernetes 1.7 中。这应该意味着您可以使用 Downward API 公开为环境变量(https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/)或文件一个卷(https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)。然后,您的应用程序将需要读取环境变量或文件以获取实际主机 IP 地址的值。status.hostIP

于 2017-07-01T03:28:14.473 回答
0

如果你的代理是你自己写的,你可以打开并监听一个 Unix 域套接字,让其他 pod 通过它发送数据。

如果没有,您可以编写一个小型数据代理,在 Unix 套接字上侦听数据。另一方面,通过与 daemon 共享一个 pod,您可以轻松地将数据发送到本地容器

于 2017-07-02T03:15:59.013 回答