我们在Kubernetes的云下运行Prometheus,并且能够获取节点的内存,CPU使用率等统计信息。现在我们希望能够从云上运行的pod中抓取我们自己的自定义时间序列。据我了解,这需要一个角色为“pod”的kubernetes_sd_config的作业(以及一个只选择具有给定名称的pod的重新标记)。到现在为止还挺好。但是,从我读到的文档中可以看出:
pod角色发现所有pod并将其容器暴露为 目标。对于容器的每个声明的端口,单个目标是 产生。如果容器没有指定端口,则为无端口目标 创建每个容器以通过重新标记手动添加端口。
所以每个pod都必须声明一个端口(大概是k8s yaml,大概是?)否则就会出现端口无效。在哪种情况下,我如何确保每个pod具有唯一的端口号? (如果我没有,如果在同一节点上启动了两个pod,则可能会失败)
答案 0 :(得分:2)
以及仅选择具有给定名称
的广告连播的重新标记
我认为这是可能的,但在我们的配置中,我们只是省略了scrape注释(下面讨论过),而且Prom没有联系那些Pod;我们几个月没有触及Prom配置本身,但更频繁地更改Pod注释。
因此每个pod必须声明一个端口
在their example config中,可以看到Pod中的注释被提取并用于指向该特定Pod的端口和路径上的Prom刮刀(当然,包括是否要刮掉它)。
metadata:
annotation:
prometheus.io/scrape: true
prometheus.io/path: /custom-prom-metrics
prometheus.io/port: 9145
该代码段可以进入您的ReplicationController,部署,ReplicaSet,Pod(如果您部署"裸" Pod),或使用Kubernetes API连接到Pod事后。据我所知,可以随意申请和删除这些注释,而Prom将会在下一次搜索中将其删除。
我如何确保每个pod都有唯一的端口号? (如果我没有,如果在同一节点上启动了两个pod,则可能会失败)
假设您使用软件定义的网络安装了合理的Kubernetes,那么每个Pod都有自己的IP地址,因此也有自己的端口命名空间。如果你想使用9145标准化每个 Pod,那就完全没问题了。