Kubernetes度量服务器无法收集度量值

Kubernetes度量服务器无法收集度量值,kubernetes,Kubernetes,我有一个测试环境集群,有一个主节点和两个工作节点,所有的基本pod都已启动并运行 root@master:~/pre-release# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-74ff55c5b-jn4pl 1/1 Running 0 23h coredns-74ff55c5

我有一个测试环境集群,有一个主节点和两个工作节点,所有的基本pod都已启动并运行

root@master:~/pre-release# kubectl get pods -n kube-system
NAME                              READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-jn4pl           1/1     Running   0          23h
coredns-74ff55c5b-lz5pq           1/1     Running   0          23h
etcd-master                       1/1     Running   0          23h
kube-apiserver-master             1/1     Running   0          23h
kube-controller-manager-master    1/1     Running   0          23h
kube-flannel-ds-c7czv             1/1     Running   0          150m
kube-flannel-ds-kz74g             1/1     Running   0          150m
kube-flannel-ds-pb4f2             1/1     Running   0          150m
kube-proxy-dbmjn                  1/1     Running   0          23h
kube-proxy-kfrdd                  1/1     Running   0          23h
kube-proxy-wj4rk                  1/1     Running   0          23h
kube-scheduler-master             1/1     Running   0          23h
metrics-server-67fb68f54c-4hnt7   1/1     Running   0          9m

接下来,当我检查metric server的pod日志时,我也没有看到任何错误消息

root@master:~/pre-release# kubectl -n kube-system logs -f metrics-server-67fb68f54c-4hnt7
I0330 09:53:15.286101       1 serving.go:325] Generated self-signed cert (/tmp/apiserver.crt, /tmp/apiserver.key)
I0330 09:53:15.767767       1 requestheader_controller.go:169] Starting RequestHeaderAuthRequestController
I0330 09:53:15.767790       1 shared_informer.go:240] Waiting for caches to sync for RequestHeaderAuthRequestController
I0330 09:53:15.767815       1 secure_serving.go:197] Serving securely on [::]:4443
I0330 09:53:15.767823       1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I0330 09:53:15.767835       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I0330 09:53:15.767857       1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I0330 09:53:15.767865       1 shared_informer.go:240] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
I0330 09:53:15.767878       1 dynamic_serving_content.go:130] Starting serving-cert::/tmp/apiserver.crt::/tmp/apiserver.key
I0330 09:53:15.767897       1 tlsconfig.go:240] Starting DynamicServingCertificateController
I0330 09:53:15.867954       1 shared_informer.go:247] Caches are synced for RequestHeaderAuthRequestController
I0330 09:53:15.868014       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file
I0330 09:53:15.868088       1 shared_informer.go:247] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file
然后我验证了度量服务

root@master:~/pre-release# kubectl describe apiservice v1beta1.metrics.k8s.io
Name:         v1beta1.metrics.k8s.io
Namespace:
Labels:       k8s-app=metrics-server
Annotations:  <none>
API Version:  apiregistration.k8s.io/v1
Kind:         APIService
Metadata:
  Creation Timestamp:  2021-03-30T09:53:13Z
  Resource Version:    126838
  UID:                 6da11b3f-87d5-4de4-92a0-463219b23301
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:  2021-03-30T09:53:13Z
    Message:               failing or missing response from https://10.108.112.196:443/apis/metrics.k8s.io/v1beta1: Get "https://10.108.112.196:443/apis/metrics.k8s.io/v1beta1": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    Reason:                FailedDiscoveryCheck
    Status:                False
    Type:                  Available
Events:                    <none>

kubectl顶部节点

root@master:~# kubectl top nodes
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)

现在仍然可以找到昨天的解决方案,您能否在此方面帮助我?在这种情况下,将
spec.template.spec
下的
hostNetwork:true
添加到
metrics服务器
部署可能会有所帮助

...
 spec:
      hostNetwork: true
      containers:
      - args:
        - /metrics-server
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP
        - --kubelet-use-node-status-port
        - --kubelet-insecure-tls
...
正如我们可以在以下文件中找到的:

HostNetwork—控制pod是否可以使用节点网络命名空间。这样做可以让pod访问环回设备、监听本地主机的服务,并可以用来窥探同一节点上其他pod的网络活动


你有什么版本的Kubernetes?您是否有裸机上的Kubernetes或托管Kubernetes服务?您是如何安装metrics服务器的?您是否能够运行
kubectl top nodes
命令?服务器版本v1.20.5和客户端版本也会为您的响应询问。您是如何安装
度量服务器的
?我曾试图重现您的问题,但似乎对我来说效果不错。您是否可以将
spec.template.spec
下的
hostNetwork:true
添加到您的
metrics服务器
部署中?很好,先生,现在可以工作了非常感谢您的支持今天解决了一周的问题
...
 spec:
      hostNetwork: true
      containers:
      - args:
        - /metrics-server
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP
        - --kubelet-use-node-status-port
        - --kubelet-insecure-tls
...