Я пытаюсь автоматически масштабировать развертывание Kubernetes с HPA, используя пользовательские метрики Prometheus с адаптером Prometheus . Эти пользовательские метрики публикуются в Prometheus через другое развертывание в другом пространстве имен, которое каждую минуту запрашивает REST API для определенной метрики, а затем публикует значение этой метрики в Prometheus. Оттуда адаптер должен иметь возможность запрашивать у Prometheus указанную метрику с некоторыми дополнительными метками в качестве критериев запроса и публиковать эту метрику с новым именем. Оттуда HPA должен быть в состоянии подобрать этот показатель и масштабировать в зависимости от его значения.
Вот метки для моего развертывания, на которых адаптер предположительно основывает свое соответствие:
Labels: app.kubernetes.io/instance=event-subscription-dev-dev
app.kubernetes.io/managed-by=Tiller-dev
app.kubernetes.io/name=event-subscription-dev
deployment-name=event-subscription-webhook-worker-dev
helm.sh/chart=event-subscription-0.1.0-dev
Вот значения диаграммы / правила адаптера Prometheus Helm:
logLevel: 1
metricsRelistInterval: 5s
prometheus:
url: 'http://<prometheus-url>'
rules:
custom:
- seriesQuery: '{__name__="event_subscription_current_message_lag"}'
name:
matches: "(.*)"
as: '${1}_webhooks'
resources:
overrides:
namespace: {resource: "namespace"}
pod: {resource: "pod"}
metricsQuery: 'sum(event_subscription_current_message_lag{queue="webhooks", container_name!="POD"})'
- seriesQuery: '{__name__="event_subscription_current_message_lag"}'
name:
matches: "(.*)"
as: '${1}_webhook_retries'
resources:
overrides:
namespace: {resource: "namespace"}
pod: {resource: "pod"}
metricsQuery: 'sum(event_subscription_current_message_lag{queue="webhook_retries", container_name!="POD"})'
И вот часть metrics
моей спецификации HPA:
metrics:
- type: Pods
pods:
metric:
name: event_subscription_current_message_lag_webhooks
target:
type: AverageValue
averageValue: 10
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 85
Проблема, с которой я здесь сталкиваюсь, не в том, что адаптер запрашивает метрику, а затем публикует новую метрику, а скорее в том, чтоновая метрика не имеет значения, связанного с ней, как исходная метрика.
Например, если я запускаю kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1
I , делаю , вижу мои event_subscription_current_message_lag_webhooks
и event_subscription_current_message_lag_webhook_retries
метрики, но они не имеют никакого значения, как исходная метрика event_subscription_current_message_lag
.
Вот вывод от kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/event-subscription/pods/*/event_subscription_current_message_lag"
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/event-subscription/pods/%2A/event_subscription_current_message_lag"
},
"items": [
{
"describedObject": {
"kind": "Pod",
"namespace": "event-subscription",
"name": "activemq-message-lag-retrieval-7bfc46b948-jr8kp",
"apiVersion": "/v1"
},
"metricName": "event_subscription_current_message_lag",
"timestamp": "2019-11-08T22:09:53Z",
"value": "1"
}
]
}
А вот вывод для event_subscription_current_message_lag_webhooks
и event_subscription_current_message_lag_webhook_retries
:
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/event-subscription/pods/%2A/event_subscription_current_message_lag_webhooks"
},
"items": []
}
...
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/event-subscription/pods/%2A/event_subscription_current_message_lag_webhook_retries"
},
"items": []
}
Я не совсем понимаю, какПохоже, что адаптер может найти мою исходную метрику, запросить ее, опубликовать новую метрику, но без значения я бы ожидал, что в данном случае это 1
.