无法从自定义指标API获取指标:发生内部错误

33次阅读
没有评论

问题描述

在本地使用Minikube在Windows机器上运行一个Kubernetes集群,使用--driver=hyperv。他尝试基于Pod的自定义指标设置HPA(HorizontalPodAutoscaler)。使用Helm,他部署了kube-prometheus-stack来获取更高级的指标,并且一切正常工作。然后,他使用Helm部署了prometheus-adapter,并定义了规则,使适配器监视节点/容器资源和一组自定义指标。在部署适配器后,他可以使用kubectl top pod查询指标API,以及使用kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1查询自定义指标API。

然而,HPA和用户都无法从自定义指标API获取任何指标。kubectl describe hpa/my-hpa在事件部分显示以下警告:

FailedGetPodsMetric horizontal-pod-autoscaler  unable to get metric bytes_per_second: unable to fetch metrics from custom metrics API: Internal error occurred: unable to fetch metrics

适配器已正确连接到Prometheus,用户使用默认的K8S命名空间,并且为适配器定义的自定义规则如下:

rules:
  default: false
  custom:
  - seriesQuery: '{__name__=~"^container_network_receive_bytes_total$"}'
    resources:
      overrides:
        namespace:
          resource: "namespace"
        pod:
          resource: "pod"
    name:
      matches: ""
      as: "bytes_per_second"
    metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>})) by (<<.GroupBy>>)

用户想知道他漏掉了什么。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据用户的描述,可能有以下几个原因导致无法从自定义指标API获取指标:
1. 适配器配置错误。
2. 自定义指标规则定义错误。
3. 适配器与Prometheus之间的连接问题。

以下是解决这些问题的步骤:
1. 确保适配器的配置正确。检查适配器的配置文件,确保它正确连接到Prometheus,并且指定了正确的Kubernetes命名空间。
2. 检查自定义指标规则的定义。确保规则的语法正确,并且匹配了正确的指标名称和资源。
3. 检查适配器与Prometheus之间的连接。确保适配器能够正确访问Prometheus,并且Prometheus能够正确获取指标数据。

如果以上步骤都没有解决问题,可以尝试以下调试方法:
1. 尝试使用更简单的查询来调试。使用kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/<namespace>/pods/<pod>/metrics/<metric>查询单个指标,看是否能够获取到数据。
2. 查看完整的错误堆栈信息。使用kubectl describe hpa/my-hpa命令,查看完整的错误堆栈信息,可能会提供更多的调试线索。

希望以上解决方案能帮助你解决问题。如果问题仍然存在,请提供更多的详细信息,以便我们能够更好地帮助你。

正文完