Вы не можете предоставить дополнительные порты и их имена для Сервиса, созданного SparkSubmit
(Spark v2.4.4). Ситуация может измениться в более поздних версиях.
Что вы можете сделать, это создать дополнительные Kubernetes Service
(Spark Monitoring Service, например, типа Cluster IP) для каждого задания Spark после отправки задания с помощью SparkSubmit
, для экземпляр работает spark-submit ... && kubectl apply ...
. Или используйте любой из доступных клиентов Kubernetes с выбранным языком.
Обратите внимание, что вы можете использовать Kubernetes OwnerReference для настройки автоматического c Service
удаления / G C в Spark Driver Pod
delete.
Затем вы можете указать значения ServiceMonitor
через Prometheus Operator Helm:
prometheus:
additionalServiceMonitors:
- name: spark-metrics # <- Spark Monitoring Service name
selector:
matchLabels:
k8s-app: spark-metrics # <- Spark Monitoring Service label
namespaceSelector:
any: true
endpoints:
- interval: 10s
port: metrics # <- Spark Monitoring Service port name
Помните о том, что Spark не предоставляет способ чтобы настроить Spark Pod
s, поэтому ваши порты Pod, которые должны отображать метрики, не отображаются на уровне Pod и не будут доступны через Service
. Чтобы преодолеть это, вы можете добавить дополнительный оператор EXPOSE ... 8088
в Dockerfile
и перестроить образ Spark.
Это руководство должно помочь вам настроить мониторинг Spark с помощью стратегии PULL, используя, например, Jmx Exporter .
Существует альтернатива (хотя она рекомендуется только для кратковременных заданий Spark, но вы можете попробовать ее в своей среде, если не выполняете огромных рабочих нагрузок):
Сделав так, что ваши Spark Pod будут PU * Метрики 1050 * к шлюзу и Prometheus будут вытягивать их из шлюза в следующем порядке.
Вы можете сослаться на таблицу Spark Monitoring Helm с объединением оператора Prometheus и Prometheus Pushgateway.
Надеюсь, это поможет.