📜  kubectl top metrics api 不可用 (1)

📅  最后修改于: 2023-12-03 15:17:10.823000             🧑  作者: Mango

kubectl top metrics api 不可用

问题描述

最近使用 kubectl top 命令时发现无法获取 metrics api,显示如下错误信息:

Error from server (NotFound): the server could not find the requested resource (get services.metrics.k8s.io)

这是由于 k8s 版本更新后,metrics api 的访问方式有所改变。

解决方案
1. 更新 kubectl 版本

如果使用的是较老版本的 kubectl,可以尝试升级到最新版本,以获取解决该问题的更新。可以通过以下命令检查 kubectl 版本:

kubectl version
2. 安装 metrics server

如果尚未安装 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
3. 配置使用新的 api 访问方式

如果已经安装了 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。

4. 验证访问

完成上述步骤后,可以再次使用 kubectl top 命令验证是否已经可以获取 metrics 数据:

kubectl top pods
总结

以上就是解决 kubectl top metrics api 不可用的几种方案,总结起来,可能出现以上错误的原因有:

  • kubectl 版本过老,缺少相关更新;
  • 没有安装 metrics server 组件;
  • kubectl 没有使用新的 api 访问方式。