我正在尝试在spark
上使用Kubernetes
。想法是使用spark-submit
到运行k8s
的{{1}}集群。现在我知道prometheus operator
可以响应prometheus operator
yaml,但是我很困惑如何使用ServiceMonitor
YAML
中所需的某些内容
这里是spark-submit
:
YAML
答案 0 :(得分:2)
您尚不能向SparkSubmit
创建的服务提供其他端口及其名称(Spark v2.4.4)。在更高版本中,情况可能会发生变化。
您可以做的是在使用Service
提交作业后,例如运行SparkSubmit
,为每个Spark作业创建附加的Kubernetes spark-submit ... && kubectl apply ...
(Spark监视服务,例如,群集IP类型)。 。或使用您选择的语言使用任何可用的Kubernetes客户端。
请注意,您可以使用Kubernetes OwnerReference来配置自动Service
删除/在Spark Driver Pod
删除时进行GC。
然后,您可以通过Prometheus Operator Helm值提供ServiceMonitor
:
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
的方法,因此应公开指标的Pod端口未在Pod级别公开,并且无法通过{{ 1}}。为了解决这个问题,您可以在Service
中添加其他EXPOSE ... 8088
语句并重建Spark映像。
本指南应帮助您使用例如Jmx Exporter的PULL策略设置Spark监视。
还有另一种选择(尽管仅建议将其用于短期运行的Spark作业,但是如果您不运行大量工作负载,则可以在您的环境中尝试使用它)
这样做,您的Spark Pod会将指标推向网关,而Prometheus将按顺序从网关中拉出它们。
您可以结合Prometheus运算符和Prometheus Pushgateway来参考Spark Monitoring Helm chart示例。
希望有帮助。