20 使用官方的Kubernetes cluster state by HTTP模板对deployment进行监控无法获取数据

        参考官方的Kubernetes cluster state by HTTP下的【Kubernetes: Namespace [{#NAMESPACE}] Deployment [{#NAME}]: Replicas available】item创建了一个名为"deploys item"的监控项用于收集每个delpoyment的有效实例。创建好“deploys item"后,给每个deployment都定义了一个item并在master item处填写"deploys item"进行继承。并给每个deployment item添加了对应的trigger。随后把上述的所有item和trigger都放到了一个名为"k8s deploy template"的模板里,并在每个worker node里添加引用该模板。每个worker node的宏值都设置成一样。在测试过程中发现如下干问题:

        前置条件:uat环境和prd环境都各有3台master node和7台worker node,uat和prd的主机都设置了使用proxy(Monitored by proxy)。

        1 在uat环境测试,发现7台主机中,只有3台主机能正常采集到数据。剩余4台提示“Cannot get kube-state-metrics endpoints from Kubernetes API"。

        2 在prd环境测试,发现7台主机都无法采集到数据。信息提示Preprocessing failed for: {"error":"Error: cannot get URL: Timeout was reached."}。把worker node任意一台主机的Monitored by proxy设置为no之后,能顺利采集到数据。但是过一小段时间主机会自动恢复为使用代理并且信息又提示Preprocessing failed for: {"error":"Error: cannot get URL: Timeout was reached."},主机重新变为无法采集数据的状态。

        zabbix可参考资料甚少,相关解疑答惑的帖子更是少得可怜。已经被该问题卡住了1个多星期。哪位同仁能帮忙解答下,感激不尽。

请先 登录 后评论

1 个回答

我是一只小菜鸡 - 小菜鸡

(题主好,我之前基于kube-state-metrics做过K8S的监控,你这些问题我没碰到过,不过我也有点想法,说出来互相探讨探讨一下)

首先是你这个是基于官方的Kubernetes cluster state by HTTP制作的模板的话,那应该就使用一个模板进行监控就行了,毕竟这个是直接获取K8S的API接口进行监控的。我觉得不需要每个节点都引用这个模板?(可能我没太看明白你制作的这个模板)

然后第一个问题,kube-state-metrics这个采集器部署在K8S集群上面就能进行监控,而且一般都是单个pod。所以我觉得不需要全部节点都进行模板的引用,可能会导致K8S的api请求报错?

至于第二个问题,K8S使用proxy代理,是有多种代理的,怀疑是代理配置的问题,导致访问超时?可以从这个方向排查一下。


你的uat和prd环境的proxy配置是不是一样的呢?也可看看这个

请先 登录 后评论