kubectl top node报错

 k8s版本(使用二进制安装):v1.15.7

[root@k8s-master1 metrics-server]# kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.7", GitCommit:"6c143d35bb11d74970e7bc0b6c45b6bfdffc0bd4", GitTreeState:"clean", BuildDate:"2019-12-11T12:42:56Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.7", GitCommit:"6c143d35bb11d74970e7bc0b6c45b6bfdffc0bd4", GitTreeState:"clean", BuildDate:"2019-12-11T12:34:17Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

 

使用命令kubectl top node报错:

[root@k8s-master1 metrics-server]# kubectl top node
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)

 

查看 Kubernetes 集群中 v1beta1.metrics.k8s.io 这个 APIService 的详细信息,可以看到Message中访问metrics-server的service网络不通,原因是因为metrics-server的service的type为ClusterIP,该版本k8s使用二进制安装,master节点并未安装kubelet和kube-proxy导致

[root@k8s-master1 metrics-server]# kubectl describe apiservice v1beta1.metrics.k8s.io
Name:         v1beta1.metrics.k8s.io
Namespace:    
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"apiregistration.k8s.io/v1beta1","kind":"APIService","metadata":{"annotations":{},"name":"v1beta1.metrics.k8s.io"},"spec":{"...
API Version:  apiregistration.k8s.io/v1
Kind:         APIService
Metadata:
  Creation Timestamp:  2025-01-15T06:03:52Z
  Resource Version:    495300447
  Self Link:           /apis/apiregistration.k8s.io/v1/apiservices/v1beta1.metrics.k8s.io
  UID:                 70ed9328-3ae9-4907-a476-4197d079294a
Spec:
  Group:                     metrics.k8s.io
  Group Priority Minimum:    100
  Insecure Skip TLS Verify:  true
  Service:
    Name:            metrics-server
    Namespace:       kube-system
    Port:            443
  Version:           v1beta1
  Version Priority:  100
Status:
  Conditions:
    Last Transition Time:  2025-01-15T06:03:52Z
    Message:               failing or missing response from https://172.30.86.4:443/apis/metrics.k8s.io/v1beta1: Get https://172.30.86.4:443/apis/metrics.k8s.io/v1beta1: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)  ##该行报错访问service不通
    Reason:                FailedDiscoveryCheck
    Status:                False
    Type:                  Available
Events:                    <none>

 

解决方法:metrics-server配置文件中使用本机网络(deployment.spec.template.spec.hostNetwork: true),配置如下:

[root@k8s-master1 metrics-server]# cat metrics-server-deployment.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      hostNetwork: true   ##添加此行,使用本机网络
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: registry:5000/metrics-server-amd64:v0.3.6
        imagePullPolicy: Always
        args:
        #- --cert-dir=/tmp
        #- --secure-port=4443
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --v=6
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp

 

posted @ 2025-01-15 17:14  joker灬上上谦1  阅读(67)  评论(0)    收藏  举报