如何对 kubeadm 上的 metrics-server 进行故障排除?

How to troubleshoot metrics-server on kubeadm?

我有一个工作的 1.15.1 kubenetes 集群,在裸机上使用 kubeadm 并且刚刚部署了 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

我检查了 metrics-server 的 pod 和服务,它们都 运行 没问题。我应该在哪里尝试查看问题?

您必须在 metrics-server-deployment.yaml 文件的第 33 行之后添加此命令部分。

  command:
    - /metrics-server
    - --kubelet-preferred-address-types=InternalIP
    - --kubelet-insecure-tls

更新文件后,您必须 re-deploy 吊舱。

像 Subramanian Manickam 的回答一样编辑度量服务器部署,您也可以使用

$ 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

然后在 spec.template.spec 下,与 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 到 return 一些数据大约需要 10-15 秒。