Kubernetes 通过普罗米修斯从多个库伯内特斯吊舱中获取自定义数据

Kubernetes 通过普罗米修斯从多个库伯内特斯吊舱中获取自定义数据,kubernetes,prometheus,Kubernetes,Prometheus,我们在Kubernetes的领导下在云上运行Prometheus,并且能够获取节点的内存、CPU使用等统计数据。现在,我们希望能够从云上运行的pod中获取我们自己的自定义时间序列。据我所知,这需要一个具有角色“pod”的kubernetes_sd_配置的作业(以及一个只选择具有给定名称的pod的relabel)。到现在为止,一直都还不错。然而,从我读到的文档中: pod角色发现所有pod并将其容器公开为 目标。对于容器的每个已声明的端口,都有一个单独的目标 生成。如果容器没有指定的端口,则为无端

我们在Kubernetes的领导下在云上运行Prometheus,并且能够获取节点的内存、CPU使用等统计数据。现在,我们希望能够从云上运行的pod中获取我们自己的自定义时间序列。据我所知,这需要一个具有角色“pod”的kubernetes_sd_配置的作业(以及一个只选择具有给定名称的pod的relabel)。到现在为止,一直都还不错。然而,从我读到的文档中:

pod角色发现所有pod并将其容器公开为 目标。对于容器的每个已声明的端口,都有一个单独的目标 生成。如果容器没有指定的端口,则为无端口目标 创建每个容器以通过重新标记手动添加端口

因此,每个pod必须声明一个端口(大概是在其k8s yaml中),否则它将出现端口空闲。在这种情况下,我如何确保每个pod都有唯一的端口号?(如果我没有这样做,那么如果在同一个节点上启动两个吊舱,它可能会失败)

以及一个仅选择具有给定名称的吊舱的重新标签

我想这是可能的,但在我们的配置中,我们只是省略了scrape注释(下面讨论),Prom不会联系这些pod;我们已经几个月没有接触Prom配置本身了,但是更频繁地更改Pod注释

所以每个pod必须声明一个端口

在这里,您可以看到从Pod中提取注释的位置,并将其用于将Prom刮板指向特定Pod的端口和路径(当然包括是否完全刮板)

该片段可以进入您的ReplicationController、部署、ReplicatSet、Pod(如果您部署“裸”Pod),或者使用Kubernetes API事后附加到Pod。据我所知,人们可以随意应用和删除这些注释,Prom将在下一次刮取中进行处理

如何确保每个pod都有唯一的端口号?(如果我没有这样做,那么如果在同一个节点上启动两个吊舱,它可能会失败)

假设您有一个合理的Kubernetes安装,使用软件定义的网络,那么每个Pod都有自己的IP地址,从而有自己的端口名称空间。如果你想用9145标准化每个吊舱,那就太好了

metadata:
    annotation:
        prometheus.io/scrape: true
        prometheus.io/path: /custom-prom-metrics
        prometheus.io/port: 9145