【问题标题】:How to troubleshoot metrics-server on kubeadm?如何对 kubeadm 上的 metrics-server 进行故障排除?
【发布时间】:2019-11-29 22:29:51
【问题描述】:

我有一个在裸机上使用 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 默认/pod-deployment-57b99df6b4-khh84,年龄:27h31m59.78660593s 错误:指标不适用于 pod 默认/pod-deployment-57b99df6b4-khh84,年龄:27h31m59.78660593s

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

【问题讨论】:

  • 可以添加metric server的日志来提问吗?

标签: kubernetes monitoring kubeadm


【解决方案1】:

像 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

然后在 spec.template.spec 下与containers 同级也不得不添加

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
[...]

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

【讨论】:

  • 我也在使用 calico 和 hostNetwork.. 如果你添加 hostnetwork,你会看到哪里的区别?
  • 当一个pod配置了hostNetwork: true时,运行在该处的应用程序可以直接看到启动该pod的宿主机的网络接口。对我来说,修复了它,因为据我所知,即使在添加 args 之后,也有一个问题到达我的指标服务器。运行 kubectl get apiservice v1beta1.metrics.k8s.io -o yaml(未启用 hostNetwork)时,到达服务时出错。没有它,就没有。
【解决方案2】:

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

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

更新文件后,您必须重新部署 pod。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多