首页 > 解决方案 > 如何对 kubeadm 上的 metrics-server 进行故障排除?

问题描述

我有一个在裸机上使用 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并得到回应:

错误:指标尚不可用

另外,当我尝试时,kubectl top pods我得到:

W0721 20:01:31.786615 21232 top_pod.go:266] 指标不可用于 pod default/pod-deployment-57b99df6b4-khh84,年龄:27h31m59.78660593s 错误:指标不可用于 pod default/pod-deployment-57b99df6b4-khh84,年龄:27h31m59.78660593s

我检查了度量服务器的 pod 和服务,它们都运行良好。我应该在哪里尝试查看问题?

标签: kubernetesmonitoringkubeadm

解决方案


编辑度量服务器部署,如 Subramanian Manickam 的回答所说,您也可以使用

$ kubectl edit deploy -n kube-system metrics-server

这将打开一个带有部署 yaml 文件的文本编辑器,您可以在其中进行以下更改:

spec.template.spec.containersname: metrics-server下,与add处于同一级别

args:
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --metric-resolution=30s

然后在与我相同级别的spec.template.speccontainers下,我还必须添加

hostNetwork: true

修复与 CNI 一起工作的度量服务器(在我的例子中是印花布)。

之后您的部署 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
[...]

之后大约需要 10-15 秒kubectl top pods才能返回一些数据。


推荐阅读