11

当我这样做kubectl top pods/nodes时,我收到以下错误:

指标尚不可用

当我检查我得到的日志时

$ kubectl logs metrics-server-7df4c4484d-h75wr -n kube-system -c metrics-server

I1008 12:02:55.159069       1 serving.go:273] Generated self-signed cert(apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key)
[restful] 2018/10/08 12:02:56 log.go:33: [restful/swagger] listing is available at https://:443/swaggerapi
[restful] 2018/10/08 12:02:56 log.go:33: [restful/swagger] https://:443/swaggerui/ is mapped to folder /swagger-ui/
I1008 12:02:56.358063       1 serve.go:96] Serving securely on [::]:443
E1008 12:03:04.225519       1 reststorage.go:101] unable to fetch node metrics for node "hpa-test": no metrics known for node "hpa-test"
E1008 12:03:07.619489       1 reststorage.go:101] unable to fetch node metrics for node "hpa-test": no metrics known for node "hpa-test"

此外,我可以从以下位置 ping 到 hpa-test 节点:

$ kubectl exec -it  metrics-server-7df4c4484d-h75wr -n kube-system sh

另外,我尝试到处寻找解决方案,但没有解决问题

4

4 回答 4

14

有两种方法可以解决此问题:

1) 使用heapster:安装 heapster 将允许'kubectl top nodes'开箱即用。但是 heapster 已被弃用,因此您可能应该切换到 metrics-server。

2)使用metrics-server:不幸的是,安装metrics-server时它可能无法开箱即用......如果没有,您需要更新metrics-server-deployment.yaml(1.8+)的末尾用于安装的文件并添加具有正确参数的命令部分,如下所示:

containers:
- name: metrics-server
  image: k8s.gcr.io/metrics-server-amd64:v0.3.1
  imagePullPolicy: Always
  volumeMounts:
  - name: tmp-dir
    mountPath: /tmp

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

然后只需应用更改:

kubectl apply -f metrics-server-deployment.yaml

然后你应该能够得到结果

kubectl 顶级节点

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes"

于 2018-12-13T10:50:23.553 回答
4

需要为 metrics-sever 添加标志:

--kubelet-insecure-tls=true
--kubelet-port={YOU_KUBELET_PORT}
--kubelet-preferred-address-types=InternalIP
--v=5
--logtostderr
于 2018-10-08T12:47:54.067 回答
0

出现这些问题是因为您没有在集群中启用指标服务器

只有在集群上安装了度量服务器时,top 命令才会运行

从 git 下载 Kubernetes API 中的度量服务器

步骤1 git clone https://github.com/kubernetes-incubator/metrics-server.git

第2步 cd metrics-server/

步骤:3部署

Kubernetes 1.7 kubectl create -f deploy/1.7/

Kubernetes 1.8

kubectl create -f deploy/1.8+/

Setp :4 检查指标服务器 pod 的状态

 kubectl get po -n kube-system |grep metrics

第5 步: 现在您的顶级命令将运行

kubectl top pod --all-namespaces
于 2019-10-21T11:07:20.703 回答
0

编辑 metrics-server 的部署并将以下内容添加到其容器的参数中。

--kubelet-insecure-tls
--kubelet-preferred-address-types=InternalIP

例如,

kind: Deployment
metadata:
  name: metrics-server
  ...
spec:
  template:
    spec:
      ...
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
        args:
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalIP
于 2019-10-23T06:15:16.980 回答