将数据从一个窗格发送到另一个窗格,该窗格专门在同一台主机上运行(DaemonSet)

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

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

如何将数据从一个容器发送到与该容器相同的节点上运行的代理的实例? 如果我使用Kubernetes服务,发送度量标准的调用将在所有代理之间进行负载平衡,并且我将失去发布该度量标准的pod与其运行的主机之间的关联。

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

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

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

然后,您可以打开一个到${NODE_NAME}:8125连接${NODE_NAME}:8125以连接到数据代理程序。

一些初步的谷歌search通过https://github.com/kubernetes/kubernetes/issues/24657登陆https://github.com/kubernetes/kubernetes/pull/42717 。 看起来这个pull请求被合并在Kubernetes 1.7中。 这应该意味着你可以使用Downward API来将status.hostIP公开为一个环境variables( 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/ )。 然后,您的应用程序将需要读取环境variables或文件以获取实际主机IP地址的值。

如果您的代理程序是由您自己编写的,则可以打开并在Unix域套接字上侦听,并让其他Pod通过它发送数据。

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