我有一个 3 主 kubernetes 集群,kubernetes 版本为 v1.25.0
NAME STATUS ROLES AGE VERSION
master21.server Ready control-plane 77d v1.25.0
master22.server Ready control-plane 22h v1.25.0
master23.server Ready control-plane 265d v1.25.0
worker31.server Ready worker 265d v1.25.0
worker32.server Ready worker 265d v1.25.0
我已经使用以下步骤安装了指标集群
从https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml下载了components.yaml
进行了以下更改
- --kubelet-insecure-tls=true
- --kubelet-preferred-address-types=InternalIP
然后应用 yaml 使用;
kubectl apply -f components.yaml
我可以看到 Pod 部署成功,没有任何重启或错误,但是当我执行kubectl 顶级节点时出现以下错误
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
尝试了谷歌中与此错误相关的大部分可用内容,没有任何帮助,有人可以阐明这一点吗?
更新
一段时间后,我检查了指标 Pod 日志,并可以从所有其他节点看到以下错误(192.168.1.22 是主服务器之一)
failed to verify certificate: x509: cannot validate certificate for 192.168.1.22 because it doesn't contain any IP SANs"
经过一番搜索后,我使用以下 和 修改了指标组件 yaml,再次部署
- --kubelet-preferred-address-types=Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP
现在我遇到了以下错误,对我来说,用于忽略 TLS 验证的 argumemt("- --kubelet-insecure-tls") 似乎无法正常工作("- --kubelet-insecure-tls=true" 或"- --kubelet-insecure-tls") ,如果有人遇到同样的问题并解决了,感谢您的意见。
0218 08:16:22.070470 1 scraper.go:147] "Failed to scrape node, timeout to access kubelet" err="Get \"https://master23.server:10250/metrics/resource\": context deadline exceeded" node="master23.server" timeout="10s"
我通过执行以下操作解决了这个问题;
下载了component.yaml
添加了“--kubelet-insecure-tls”,并在-args部分中修改了“---kubelet-preferred-address-types=”,如下所示,将指标分辨率更改为30s,
将 --secure-port,containerPort 更改为自定义端口 4443(从 10250 更改为 4433 ,因为 10250 已被 kubernetes api 使用),然后在所有工作节点和主节点的防火墙中允许使用 4443 端口
4)在相关位置添加了hostNetwork: true,如下所示。