11

我正在运行命令kubectl top nodes并收到错误:

node@kubemaster:~/Desktop/metric$ kubectl top nodes
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)

Metric Server pod 使用以下参数运行:

    command:
    - /metrics-server
    - --metric-resolution=30s
    - --requestheader-allowed-names=aggregator
    - --kubelet-insecure-tls
    - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

我得到的大部分答案是上述参数,仍然出现错误

E0601 18:33:22.012798       1 manager.go:111] unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:kubemaster: unable to fetch metrics from Kubelet kubemaster (192.168.56.30): Get https://192.168.56.30:10250/stats/summary?only_cpu_and_memory=true: context deadline exceeded, unable to fully scrape metrics from source kubelet_summary:kubenode1: unable to fetch metrics from Kubelet kubenode1 (192.168.56.31): Get https://192.168.56.31:10250/stats/summary?only_cpu_and_memory=true: dial tcp 192.168.56.31:10250: i/o timeout]

我已经使用以下方式部署了度量服务器:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

我错过了什么?使用 Calico 进行 Pod 网络

在 FAQ 下的 metric server 的 github 页面上:

[Calico] Check whether the value of CALICO_IPV4POOL_CIDR in the calico.yaml conflicts with the local physical network segment. The default: 192.168.0.0/16.

会不会是这个原因。有人可以向我解释一下吗。

我已经使用以下方法设置了 Calico:kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

我的节点 IP 是:192.168.56.30 / 192.168.56.31 / 192.168.56.32

我使用 --pod-network-cidr=20.96.0.0/12 启动了集群。所以我的 pod ip 是 20.96.205.192 等等。

也在 apiserver 日志中得到这个

E0601 19:29:59.362627       1 available_controller.go:420] v1beta1.metrics.k8s.io failed with: failing or missing response from https://10.100.152.145:443/apis/metrics.k8s.io/v1beta1: Get https://10.100.152.145:443/apis/metrics.k8s.io/v1beta1: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

其中 10.100.152.145 是服务/metrics-server(ClusterIP) 的 IP

令人惊讶的是,它可以在另一个节点 Ip 在 172.16.0.0 范围内的集群上运行。休息一切都一样。使用 kudeadm、Calico、相同的 pod cidr 进行设置

4

3 回答 3

10

在我编辑 metrics-server 部署 yaml 配置以包含 DNS 策略后,它开始工作。

主机网络:真

点击此处查看图片说明

参考以下链接: https ://www.linuxsysadmins.com/service-unavailable-kubernetes-metrics/

于 2021-02-28T17:30:09.090 回答
1

Calico net 的默认值为 192.168.0.0/16 yaml 文件中有注释:

如果不存在,则在启动时创建的默认 IPv4 池。Pod IP 将从该范围中选择。安装后更改此值将无效。这应该属于--cluster-cidr.

  • 名称:CALICO_IPV4POOL_CIDR 值:“192.168.0.0/16”

因此,如果您的家庭网络包含在 192.168.0.0/16 中,则最好使用不同的网络。

此外,如果您使用 kubeadm,您可以在 k8s 中检查您的 cidr:

kubeadm config view | grep Subnet

或者你可以使用 kubectl:

kubectl  --namespace kube-system get configmap kubeadm-config -o yaml

kubernetes“selfhosted”中的默认值是 10.96.0.0/12

于 2020-12-20T21:24:29.887 回答
0

我在尝试在 docker 桌面上运行指标时遇到了同样的问题,我遵循了@suren 的回答,它奏效了。默认配置是:

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

我改为:

- --kubelet-preferred-address-types=InternalIP
于 2021-11-21T14:21:09.603 回答