kubesphere中Metrics Server故障排查

Metrics Server

kubernetes 集群资源监控之前可以通过 heapster 来获取数据,在 1.11 开始开始逐渐废弃 heapster 了,采用 metrics-server 来代替,metrics-server 是集群的核心监控数据的聚合器,它从 kubelet 公开的 Summary API 中采集指标信息,metrics-server 是扩展的 APIServer,依赖于kube-aggregator,因为我们需要在 APIServer 中开启相关参数。

环境信息

# kubectl version
Client Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.8-eks-7c9bda", GitCommit:"7c9bda52c425d0d56d7b93f1377a826b4132c05c", GitTreeState:"clean", BuildDate:"2020-08-28T23:07:29Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.9-eks-d1db3c", GitCommit:"d1db3c46e55f95d6a7d3e5578689371318f95ff9", GitTreeState:"clean", BuildDate:"2020-10-20T22:18:07Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
# kubespere 版本信息
v3.0.0
# docker --version
Docker version 19.03.13-ce, build 4484c46
# cat /etc/system-release
Amazon Linux release 2 (Karoo)

报错现象

当我使用kubectl get pod -n kube-system查看pod时,发现metrics-server-5b65cbf5bb-xnzvg这个pod一直在处于来回重启状态。

以下是排错过程:

# kubectl logs metrics-server-5b65cbf5bb-xnzvg -n kube-system

E0324 09:28:34.486005       1 manager.go:111] unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:ip-10-34-133-45.eu-west-1.compute.internal: unable to fetch metrics from Kubelet ip-10-34-133-45.eu-west-1.compute.internal (ip-10-34-133-45.eu-west-1.compute.internal): Get https://ip-10-34-133-45.eu-west-1.compute.internal:10250/stats/summary?only_cpu_and_memory=true: dial tcp: lookup ip-10-34-133-45.eu-west-1.compute.internal on 10.34.133.2:53: no such host]

我们可以发现 Pod 中出现了一些错误信息:xxx: no such host,我们看到这个错误信息一般就可以确定是 DNS 解析不了造成的,我们可以看到 metrics-server 会通过 kubelet 的 10250 端口获取信息,使用的是 hostname。

我们查看下metrics-server的deployment文件发现,Pod 内部是可以获取这个 hosts 信息,如下:

 command:
            - /metrics-server
            - '--cert-dir=/tmp'
            - '--logtostderr'
            - '--secure-port=8443'
            - '--cert-dir=/tmp'
            - '--logtostderr'
            - '--secure-port=8443'
            - '--kubelet-insecure-tls'
            - >-
              --kubelet-preferred-address-types=Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP

那么现在可以排除这个原因了,由于我们使用的是AWS公有云EKS部署的k8s和kubesphere,很有可能是VPC网络DNS主机名的问题。参考EFS挂载失败官网说明

kubesphere中Metrics Server故障排查

在kubesphere控制台重新部署metrics-server Deployment即可正常!

参考文档

上一篇:原型+原型链+闭包+立即执行函数+插件开发初识


下一篇:OpenStack新建云主机流