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
Deployment即可正常!