我有一个 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
我已经使用以下步骤安装了指标集群
从以下位置下载 components.yamlhttps://github.com/kubernetes-sigs/metrics-server/releases/latest/download/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)
尝试了 Google 中与此错误相关的大多数方法,但都无济于事,有人可以解释一下吗?
更新
过了一段时间,我检查了指标 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 验证的参数(“- --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"
答案1
我通过执行以下操作解决了此问题;
- 使用以下方法删除了所有当前度量服务器组件
kubectl delete -f components.yaml
下载了 component.yaml
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
在 -args 部分添加了“- --kubelet-insecure-tls”,并修改了“- --kubelet-preferred-address-types=",如下所示,将 metric-resolution 更改为 30s,
将 --secure-port,containerPort 更改为自定义端口 4443(从 10250 更改为 4433,因为 10250 已被 kubernetes api 占用),然后在所有工作节点和主节点的防火墙中允许 4443 端口
- args:
- --kubelet-insecure-tls=true
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=30s
containerPort:4443
4)在相关位置添加hostNetwork: true,如下所示。
hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
- 应用 component.yaml
kubectl apply -f components.yaml
- 检查 apiservice 状态
kubectl get apiservice v1beta1.metrics.k8s.io