Настройка ванильного prometheus-metrics-adapter — достаточно трудоемкий процесс. Мы его несколько упростили, определив набор CustomResourceDefinition с разной областью видимости (scope).

С помощью cluster-wide-ресурса можно определить метрику глобально, а с помощью namespaced-ресурса ее можно локально переопределять. Формат всех custom resource’ов — одинаковый.

Namespaced custom resources

ServiceMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",service="myservice"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,service для группировки (max() by(...), sum() by (...) и пр.).

IngressMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

PodMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",pod="mypod-xxxxx"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,pod для группировки (max() by(...), sum() by (...) и пр.).

DeploymentMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",deployment="mydeployment"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,deployment для группировки (max() by(...), sum() by (...) и пр.).

StatefulSetMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",statefulset="mystatefulset"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,statefulset для группировки (max() by(...), sum() by (...) и пр.).

NamespaceMetric

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace для группировки (max() by(...), sum() by (...) и пр.).

DaemonSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",daemonset="mydaemonset"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,daemonset для группировки (max() by(...), sum() by (...) и пр.).

Cluster custom resources

ClusterServiceMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",service="myservice"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,service для группировки (max() by(...), sum() by (...) и пр.).

ClusterIngressMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",ingress="myingress"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,ingress для группировки (max() by(...), sum() by (...) и пр.).

ClusterPodMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",pod="mypod-xxxxx"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,pod для группировки (max() by(...), sum() by (...) и пр.).

ClusterDeploymentMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",deployment="mydeployment"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,deployment для группировки (max() by(...), sum() by (...) и пр.).

ClusterStatefulSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",statefulset="mystatefulset"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,statefulset для группировки (max() by(...), sum() by (...) и пр.).

ClusterDaemonSetMetric (недоступен пользователям)

  • .metadata.name — имя метрики, используется в HPA.
  • .spec.query — кастомный PromQL-запрос, который возвращает однозначное значение для вашего набора лейблов (используйте группировку операторами sum() by(), max() by() и пр.). В запросе необходимо обязательно использовать ключи:
    • <<.LabelMatchers>> — заменится на набор лейблов {namespace="mynamespace",daemonset="mydaemonset"}. Можно добавить свои лейблы через запятую (пример).
    • <<.GroupBy>> — заменится на перечисление лейблов namespace,daemonset для группировки (max() by(...), sum() by (...) и пр.).