metrics-server采集数据失败问题排查

按照文档 《Kubernetes heapster监控插件安装》 和 《Kubernetes Metrics Server安装》 完成Heapster和Metrics Server之后,想尝试通过kubectl top nodes查看安装效果,结果抛出下面的错误:

$ kubectl top nodes
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)

我用下面一张图简单描述了一下APIService、Service、Pod、kubelet四者的关系,APIService负责对外提供服务,Pod访问个节点的kubelet抓取节点上各种指标数据,然后提供给APIService。

APIService、Service、Pod、kubelet的关系

所以,我首先查看了一下APIService的状态,看APIService是否正常。通过下面的命令查看kube-system/metrics-server APIService 的状态,可以看到有下面的报错信息:

$ kubectl describe apiservice v1beta1.metrics.k8s.io
Status:
  Conditions:
    Last Transition Time:  2019-11-28T03:21:59Z
    Message:               no response from https://10.108.78.78:443: Get https://10.108.78.78:443: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    Reason:                FailedDiscoveryCheck
    Status:                False
    Type:                  Available
Events:                    

从上面信息可以看到,APIService访问后端服务无响应,所以我再去查看Pod的日志:

$ kubectl get pods -n kube-system | grep 'metrics'
metrics-server-799c767987-lxtfk                           1/1     Running            0          6h10m
$ kubectl logs metrics-server-799c767987-lxtfk -n kube-system
... unable to get a valid timestamp for metric point for container "filebeat" in pod xxx ...
..., discarding data: no non-zero timestamp on either CPU or memory]

从错误信息可以看到:metrics-server在调用各节点的kubelet获取对应节点上的指标信息时,指标数据没有有效的时间戳
根本原因是:某些pod或node没有正常运行,如下图所示。只要保证pod或node运行正常后,这些错误信息就会消失。

pod运行异常

然而,这个错误并不是根本原因,在纠结了两天之后,我突然想到,既然https请求无法访问,是不是和代理有关系。

我之前在/etc/kubernetes/manifests/kube-apiserver.yaml中加了一个https代理:

https代理

删掉这个代理问题就解决了,如果不能删除这个代理,也可以配置no_proxy环境变量,把10.108.78.78加上。

env:
   - name: no_proxy
      value: 10.108.78.78

你可能感兴趣的:(metrics-server采集数据失败问题排查)