【问题标题】:Unable to fully collect metrics, when installing metric-server安装 metric-server 时无法完全收集指标
【发布时间】:2018-11-20 20:39:56
【问题描述】:

我已经在 kubernetes 上安装了度量服务器,但是它不工作并记录了

unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:xxx: unable to fetch metrics from Kubelet ... (X.X): Get https:....: x509: cannot validate certificate for 1x.x.

x509: certificate signed by unknown authority

如果修改部署 yaml 并添加,我能够获取指标

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

这现在收集指标,kubectl 顶部节点返回结果...

但日志仍然显示

 E1120 11:58:45.624974       1 reststorage.go:144] unable to fetch pod metrics for pod dev/pod-6bffbb9769-6z6qz: no metrics known for pod
E1120 11:58:45.625289       1 reststorage.go:144] unable to fetch pod metrics for pod dev/pod-6bffbb9769-rzvfj: no metrics known for pod
E1120 12:00:06.462505       1 manager.go:102] unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:ip-1x.x.x.eu-west-1.compute.internal: unable to get CPU for container ...discarding data: missing cpu usage metric, unable to fully scrape metrics from source

问题

1) 所有这些都适用于 minikube,但不适用于我的开发集群,为什么会这样?

2) 在生产中我不想做不安全的 tls.. 所以有人可以解释为什么会出现这个问题...或指向一些资源。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    Kubeadm 在/var/lib/kubelet/pki 生成 kubelet 证书,这些证书 (kubelet.crt and kubelet.key) 由不同的 CA 签名,该 CA 用于在 /etc/kubelet/pki 生成所有其他证书。

    您需要重新生成由您的根 CA (/etc/kubernetes/pki/ca.crt) 签名的 kubelet 证书

    你可以使用openssl或者cfssl来生成新的证书(我用的是cfssl)

    $ mkdir certs; cd certs
    $ cp /etc/kubernetes/pki/ca.crt ca.pem
    $ cp /etc/kubernetes/pki/ca.key ca-key.pem
    

    创建文件kubelet-csr.json:

    {
      "CN": "kubernetes",
      "hosts": [
        "127.0.0.1",
        "<node_name>",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
      ],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [{
        "C": "US",
        "ST": "NY",
        "L": "City",
        "O": "Org",
        "OU": "Unit"
      }]
    }
    

    创建一个 ca-config.json 文件:

    {
      "signing": {
        "default": {
          "expiry": "8760h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
              "signing",
              "key encipherment",
              "server auth",
              "client auth"
            ],
            "expiry": "8760h"
          }
        }
      }
    }
    

    现在使用上述文件生成新证书:

    $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
    --config=ca-config.json -profile=kubernetes \
    kubelet-csr.json | cfssljson -bare kubelet
    

    用新生成的证书替换旧证书:

    $ scp kubelet.pem <nodeip>:/var/lib/kubelet/pki/kubelet.crt
    $ scp kubelet-key.pem <nodeip>:/var/lib/kubelet/pki/kubelet.key
    

    现在重新启动 kubelet,以便新证书在您的节点上生效。

    $ systemctl restart kubelet
    

    查看以下票证以了解问题的上下文:

    https://github.com/kubernetes-incubator/metrics-server/issues/146

    希望这会有所帮助。

    【讨论】:

    • 我需要 ssh 到我的集群吗?并执行这些命令……这些不是通过 kubectl 完成的吗?
    • 是的,您需要登录到您的主节点并按照以下步骤生成这些证书。不,不需要 kubectl 命令,因为我们只生成证书。
    • 谢谢...所以如果我有两个主人...我需要在两个上都这样做吗?
    • 是的,您需要替换所有节点上的 kubelet.crt 和 kubelet.key。请记住,您需要为每个证书生成新证书,更改 kubelet_csr.json 文件中的 node_name 并重复这些步骤。
    • 不客气 :) 围绕这个问题,kubernetes 存在一个未解决的缺陷。看看这里github.com/kubernetes/kubeadm/issues/1223
    猜你喜欢
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多