📅  最后修改于: 2023-12-03 15:17:10.823000             🧑  作者: Mango
最近使用 kubectl top
命令时发现无法获取 metrics api,显示如下错误信息:
Error from server (NotFound): the server could not find the requested resource (get services.metrics.k8s.io)
这是由于 k8s 版本更新后,metrics api 的访问方式有所改变。
如果使用的是较老版本的 kubectl,可以尝试升级到最新版本,以获取解决该问题的更新。可以通过以下命令检查 kubectl 版本:
kubectl version
如果尚未安装 metrics server,需要安装并启动该组件,以获取 metrics api 的数据。可以使用以下命令安装 metrics server 组件:
# 下载 metrics server 镜像
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 修改镜像来源,将 gcr.io 替换为 registry.aliyuncs.com/google-containers
sed -i -e 's|k8s.gcr.io|registry.aliyuncs.com/google-containers|g' components.yaml
sed -i -e 's|gcr.io|registry.aliyuncs.com/google-containers|g' components.yaml
# 安装组件
kubectl apply -f components.yaml
如果已经安装了 metrics server,但仍然收到以上错误,需要检查 kubectl 是否使用了最新的 api 访问方式。可以通过以下命令检查 kubectl 是否使用了正确的 api 访问方式:
kubectl api-versions | grep metrics
如果找不到 metrics.k8s.io/v1beta1
等与 metrics 相关的 api 版本,可能需要更新 kubectl 或者开启相应的 api 访问方式。
在 kubernetes 1.13 之前,默认没有启用 metrics api,请在 kubeadm 初始化时开启:
# kubeadm init 时添加 --feature-gates=MetricsServer=true 参数
kubeadm init --feature-gates=MetricsServer=true
在 kubernetes 1.13 及之后的版本中,已经默认启用了 metrics api。
完成上述步骤后,可以再次使用 kubectl top
命令验证是否已经可以获取 metrics 数据:
kubectl top pods
以上就是解决 kubectl top metrics api 不可用的几种方案,总结起来,可能出现以上错误的原因有: