Как проверить данные внешних метрик в Kubernetes?

Я использую DirectXMan12/k8s-prometheus-adapte для переноса внешней метрики из Prometheus в Kubernetes.

После нажатия внешней метрики, как я могу проверить, что данные - k8s?

Когда я нажимаю kubectl, получаю --raw /apis/external.metrics.k8s.io/v1beta1 | jq Я получил следующий результат, но после этого я не знаю, как получить фактическое значение метрики

{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "external.metrics.k8s.io/v1beta1",
  "resources": [
   {
     "name": "subscription_back_log",
     "singularName": "",
     "namespaced": true,
     "kind": "ExternalMetricValueList",
     "verbs": [
       "get"
     ]
  }]
}

2 ответа

Фактическое значение метрики выбирается для каждого экземпляра, например, метрика, которую вы прикрепили, namespaced: true, предполагая, что метрика предназначена для модулей, вы можете получить доступ к фактическим данным на

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/wanted_namepsace/pods/*/subscription_back_log" | jq '.'

(или укажите имя модуля вместо *)

Если вы хотите, чтобы HPA считывал ваши метрики, конфигурации (например)

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: your-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: your-pod
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - pods:
      metricName: subscription_back_log
      targetAverageValue: 10000
    type: Pods

Метрика имеет пространство имен, поэтому вам нужно будет добавить пространство имен в URL-адрес. Вопреки тому, что предлагает другой ответ, я считаю, что вам не нужно включать модули в URL-адрес. Это внешняя метрика. Внешние метрики не связаны ни с одним объектом kubernetes, поэтому достаточно только пространства имен:

  • /apis/external.metrics.k8s.io/v1beta1/namespaces/<namespace>/<metric_name>

Вот пример, который работает для меня с использованием внешней метрики в моей настройке:

      $ kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | jq                                               
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "external.metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "redis_key_size",
      "singularName": "",
      "namespaced": true,
      "kind": "ExternalMetricValueList",
      "verbs": [
        "get"
      ]
    }
  ]
}
      $ kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_key_size

{
  "kind": "ExternalMetricValueList",
  "apiVersion": "external.metrics.k8s.io/v1beta1",
  "metadata": {},
  "items": [
    {
      "metricName": "redis_key_size",
      "metricLabels": {
        "key": "..."
      },
      "timestamp": "2021-10-07T09:00:01Z",
      "value": "0"
    },
    ...
  ]
}
Другие вопросы по тегам