Мне необходимо предоставить метрики для всего приложения для коллекции Prometheus из приложения Kubernetes, которое развернуто с несколькими экземплярами, например, масштабировано с помощью горизонтального стручка Autoscaler. Точка очистки предоставляется каждым экземпляром модуля в целях аварийного переключения, однако я не хочу, чтобы Прометей фактически вызывал конечную точку очистки в каждом экземпляре модуля, только по одному экземпляру за раз, и переход на другой экземпляр только при необходимости.
Статистика относится ко всем приложениям, а не к экземплярам для каждого модуля, все конечные точки экземпляров сообщают одни и те же данные, и их параллельный вызов не принесет никакой полезной цели и только увеличит рабочую нагрузку на серверную систему, которая должна быть запрашивается для статистики. Я не хочу, чтобы 30 обращений к бэкэнду (при условии, что приложение масштабируется до 30 модулей), где будет достаточно одного вызова.
Я надеялся, что предоставление конечной точки очистки как службы k8s (и аннотирование службы для соскоб) должен сделать свое дело. Однако вместо того, чтобы пройти через прокси-сервер службы и позволить ему направить запрос к одному из модулей, Прометей, похоже, обращается непосредственно к экземплярам службы и ко всем, а не только к одному за раз.
Есть ли способ, чтобы Прометей не вызывал все экземпляры, и чтобы он вызывал только один?
Служба определяется как:
apiVersion: v1
kind: Service
metadata:
name: k8worker-msvc
labels:
app: k8worker-msvc
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/metrics'
prometheus.io/port: '3110'
spec:
selector:
app: k8worker
type: LoadBalancer
ports:
- protocol: TCP
port: 3110
targetPort: 3110
В случае, если это невозможно, какие у меня есть варианты, кроме проведения выборов лидеров внутри приложения и представления пустых данных метрик из экземпляров, не являющихся лидерами?
Спасибо за совет.