【问题标题】:Kubernetes: kubectl top nodes/pods not workingKubernetes:kubectl 顶级节点/pod 不工作
【发布时间】:2019-03-13 03:12:09
【问题描述】:

当我执行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

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

【问题讨论】:

标签: docker kubernetes kubelet kubernetes-metrics


【解决方案1】:

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

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"

【讨论】:

    【解决方案2】:

    需要为 metrics-sever 添加标志:

    --kubelet-insecure-tls=true
    --kubelet-port={YOU_KUBELET_PORT}
    --kubelet-preferred-address-types=InternalIP
    --v=5
    --logtostderr
    

    【讨论】:

    • 我是 k8s 新手,请问我应该在我的 yaml 中添加这些标志的位置吗
    • @Mallikarjun Br 这就是 Kubelet 的标志,你可以在这里找到它 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 并添加变量
    • 添加kubelet后如何重启kubelet会自动重启吗?
    • 这不是 kubelet 的标志。指标服务器的此标志
    • @DenisA。我应该在哪里添加它们在 metrics-server-deployment.yaml 你能帮我吗
    【解决方案3】:

    编辑 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
    

    【讨论】:

      【解决方案4】:

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

      只有在集群上安装了度量服务器时才会运行 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
      

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

      kubectl top pod --all-namespaces
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        • 2020-04-02
        • 2021-03-09
        • 1970-01-01
        相关资源
        最近更新 更多