apache-spark - Spark 与 Kubernetes 连接到 pod id,而不是地址
问题描述
我们有几个服务的 k8s 部署,包括 Apache Spark。所有服务似乎都可以运行。我们的应用程序连接到 Spark master 以使用 k8s DNS 服务为调用 master 的集群提交作业,spark-api
因此我们使用master=spark://spark-api:7077
和使用spark.submit.deployMode=cluster
. 我们通过 API 提交作业,而不是通过 spark-submit 脚本。
这将在集群上运行“驱动程序”和所有“执行程序”,这部分似乎可以工作,但是我们的应用程序中的启动代码会从某个 Spark 进程回调。出于某种原因,它试图连接到harness-64d97d6d6-4r4d8
pod ID,而不是 k8s 集群 IP 或 DNS。
这个pod ID是如何进入系统的?Spark 似乎以某种方式认为它是调用它的服务的地址。不用说任何与 k8s pod ID 的连接都会失败,工作也是如此。
知道 Spark 怎么会认为pod ID是 IP 地址或 DNS 名称吗?
顺便说一句,如果我们运行一个小样本作业,master=local
一切都很好,但是使用上述配置执行的相同作业会尝试连接到虚假的 pod ID。
BTW2:调用 pod 的 k8s DNS 是harness-api
解决方案
您可以考虑为 Pod 使用Headless服务,harness-64etcetc
以完成反向 DNS 发现。Actually, it will create particular endpoint for the relevant service by matching appropriate selector inside your application Pod and as result A record expects to be added into Kubernetes DNS configuration.
最终,我发现了相关的#266 Github issue,这可能会为进一步调查带来一些有用的信息。
推荐阅读
- typescript - 使用 TypeORM 和带有文件夹路径的 Typescript 时出错
- c++ - 如何从指针的指针向量中获取指针值?
- tensorflow - 如何为时间序列异常检测提供这个 LSTM-AE?
- javascript - PostMan 将 JSON post 请求中的空正文发送到 Express 服务器
- python - 如何保护我的 ren'py 项目不被复制?
- clickhouse - clickhouse 是否提供任何工具,例如 red gate sql toolbelt
- linux - 在 apache 配置中未显示预期输出
- node.js - 为什么我不能将 @bundled-es-modules/chai 别名为 chai?
- python - 在 Matplotlib 中同时使用 blitting 为一个子图设置动画,而在 Matplotlib 中通过重绘为另一个子图设置动画
- windows-10 - 在 Power Automate Desktop 中获取列表中的第一项