如何在Prometheus中获取Pod的实际主机名、节点名及IP?
获取Pod实际主机名、节点名及IP的正确方法
你遇到的问题本质是对kube_pod_labels指标的误解——它的pod_label_node_name和pod_label_host_ip是读取Pod自身携带的标签,如果Pod没手动添加这些标签,kube-state-metrics可能会错误带上自身部署节点的信息,导致所有Pod的这两个标签值完全一致。
以下是三种可靠的获取方式:
1. 用kube-state-metrics原生指标关联节点信息
kube-state-metrics提供的kube_pod_info指标自带node标签,直接对应Pod所在的节点名,无需额外处理:
kube_pod_info{namespace="your-target-namespace"}
如果需要节点的IP,可结合kube_node_addresses指标,通过node标签做关联查询:
kube_pod_info{namespace="your-target-namespace"} * on(node) group_left(address) kube_node_addresses{address_type="InternalIP"}
查询结果会自动为每个Pod添加上对应节点的内部IP。
2. 关联node-exporter获取节点主机名
如果需要节点的主机名(即节点自身的hostname),可以用node-exporter暴露的node_uname_info指标,同样通过node标签和Pod指标关联:
kube_pod_info{namespace="your-target-namespace"} * on(node) group_left(nodename) node_uname_info
结果中的nodename字段就是Pod所在节点的主机名。
3. 直接从kubelet获取Pod的主机IP
kubelet暴露的kubelet_pod_container_info指标自带host_ip标签,这个值就是Pod实际所在节点的IP,不存在混淆问题:
kubelet_pod_container_info{namespace="your-target-namespace"}
内容的提问来源于stack exchange,提问作者Haris Farooqui
相关产品推荐
相关产品推荐

