我有一个在裸机上使用 kubeadm 的 1.15.1 kubenetes 集群,并且刚刚部署了 metrics-server,如文档中所示:
git clone https://github.com/kubernetes-incubator/metrics-server.git
kubectl create -f metrics-server/deploy/1.8+/
一段时间后我尝试
kubectl top node
我得到的回应是:error: metrics not available yet
当我尝试
kubectl top pods
时也是如此我得到:W0721 20:01:31.786615 21232 top_pod.go:266] Metrics not available for pod default/pod-deployment-57b99df6b4-khh84, age: 27h31m59.78660593s error: Metrics not available for pod default/pod-deployment-57b99df6b4-khh84, age: 27h31m59.78660593s
我检查了度量服务器的 pod 和服务,它们都运行良好。我应该在哪里尝试查看问题?
最佳答案
像 Subramanian Manickam 的回答一样编辑 metric-server 部署,您也可以使用
$ kubectl edit deploy -n kube-system metrics-server
这将打开一个带有部署 yaml 文件的文本编辑器,您可以在其中进行以下更改:
下 spec.template.spec.containers ,与
name: metrics-server
处于同一级别添加args:
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --metric-resolution=30s
然后在 下规范模板.规范与
containers
处于同一级别我还得加 :hostNetwork: true
修复与 CNI 一起工作的度量服务器(在我的情况下为 calico)。
之后,您的部署 yaml 应如下所示:
[...]
spec:
[...]
template:
metadata:
creationTimestamp: null
labels:
k8s-app: metrics-server
name: metrics-server
spec:
containers:
- args:
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-insecure-tls
- --metric-resolution=30s
image: k8s.gcr.io/metrics-server-amd64:v0.3.3
imagePullPolicy: Always
name: metrics-server
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /tmp
name: tmp-dir
dnsPolicy: ClusterFirst
hostNetwork: true
[...]
之后,
kubectl top pods
花了大约 10-15 秒返回一些数据。
关于kubernetes - 如何对 kubeadm 上的 metrics-server 进行故障排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57137683/