【发布时间】:2020-01-15 21:37:43
【问题描述】:
我们有三个环境(开发、测试和生产),我们的数据库配置如下
spring:
jpa:
hibernate:
ddl-auto: update
datasource:
url: ${URL}
username: ${USERNAME}
password: ${PASSWORD}
我正在尝试的是创建 jar,然后构建映像,当部署到 kubernetes 时,我将使用 dev、test 和 prod 各自的 deployment.yaml,我将在其中加载 url、用户名和 env 的密码,以便应用程序在 prod 启动期间读取它
因此,当我尝试构建 jar 应用程序时,尝试连接到数据库,但创建 jar 失败。
请让我知道我的理解是错误的还是正确的,如果错误,那么如何纠正它,只有一件事是我无法更改流程,即 jar+ image + kubernetes
【问题讨论】:
-
使用 configmaps 选择部署环境。将它们挂载为适当命名的环境变量以匹配您的
application.yaml。对数据库凭证执行相同的操作,但改用 K8s 机密。您最终应该会遇到使用 Spring Boots 出色的配置系统在部署时自动被环境变量覆盖的默认值(例如本地开发)。 kubernetes.io/docs/tasks/configure-pod-container/…kubernetes.io/docs/concepts/configuration/secret -
@BoristheSpider 所以你的意思是说默认情况下我应该有本地 /dev 的 url ,用户名,密码,以便在构建 jar 期间它不会抛出错误,但后来替换它在
deployment.yaml但问题是客户不希望默认网址、用户名、密码被提交。 -
不必是本地开发人员,甚至不必定义 - 只需是有效的 Yaml。那里有本地开发细节作为应该调用什么变量的文档。然后,您只需将您的凭据秘密挂载到适当的环境变量即可覆盖。
-
在构建过程中发生的错误中您没有分享的一件事。
-
正确,这就是我想要做的,但在创建 docker 图像之前,我需要创建 jar 以便我可以制作图像。但是当我试图让 jar 应用程序尝试将其连接到
${URL}并且 jar 的创建失败
标签: java spring-boot docker kubernetes