外部化从 SCDF 启动的任务或作业的 application.properties

Posted

技术标签:

【中文标题】外部化从 SCDF 启动的任务或作业的 application.properties【英文标题】:Externalize application.properties of tasks or Jobs launched from SCDF 【发布时间】:2020-11-16 16:36:24 【问题描述】:

我在 openshift 环境中运行 SCDF。我使用 SCDF 在同一环境中启动批处理作业(spring.application.name=EmployeeBatchJob)。现在我需要将 EmployeeBatchJob 的 application.properties 外部化,尤其是数据源密码,所以我不会在我的 git repo 中的任何地方维护密码。

我使用 ConfigMap 为 SCDF 指定数据源。批处理应用程序需要两个数据源。因此,如果我想将批处理应用程序的 application.properties 外部化,是否应该仅为批处理应用程序创建单独的 configMap ?如果是这样,如何在 SCDF 启动的 POD 中引用/访问该配置映射。 (这里我已经外部化了两个数据源)。引用该 configmap 所需的所有属性是什么?

EmployeeBatchJob application.properties

spring.datasource.source1.password = abcd
spring.datasource.source2.password = efgh

These two properties of application should be moved to configmap and read by the POD when deployed from SCDF as Job

我尝试了 Cloud-config-map。但我仍然会将密码存储在 git repo 中。所以我正在寻找将它存储在 openshift 环境中并访问它的方法。

对于普通的 Spring Boot 应用程序,我们可以使用 ConfigMap 并将其作为卷挂载在 SpringBoot 应用程序的部署配置中。但我正在使用 SCDF 来启动我的批处理应用程序(EmployeeBatchJob)。

任何帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

为了保存密码等敏感信息,我实际上会创建一个比配置映射更好的 Openshift secret,然后只需在需要从 yaml 中获取其值的任何地方引用它。

基于Spring SCDF docs,“第三部分.入门”部分,您可以修改src/etc/kubernetes/scdf-secrets.yml中的Secrets,记住使用base64作为密码。

【讨论】:

如果我使用秘密,我怎么能在 SCDF POD 配置中引用它。由于 SCDF 推出的 POD 没有单独的 deployment.yaml 有什么消息吗?有帮助吗? 嗨哈维尔,不,这些文档是针对 SCDF POD 的,我已经为其设置了机密和配置映射。但我说的是从那里启动的任务应用程序。那些任务/作业 pod 无法访问 SCDF pod 可以访问的 configmap 信息。因为我将配置映射安装为 scdf 的卷。但从 SCDF 启动的任务/作业是不可能的。

以上是关于外部化从 SCDF 启动的任务或作业的 application.properties的主要内容,如果未能解决你的问题,请参考以下文章

获取无法序列化SCDF中任务的访问异常

为从 SCDF 启动的批处理作业创建的 PODS 的 ConfigMap

backoffLimit/maxCrashLoopBackOffRestarts 的使用

保持 SCDF 中的计划作业执行,直到上一个作业执行完成

从 Kubernetes 部署中公开 SCDF 服务

Spring Cloud DataFlow 组合任务未启动