我正在尝试将 Kubernetes 的部署 yaml 中声明的环境变量读取到 springboot application.yaml 中
以下是 deployment.yaml 中的示例
spec:
containers:
env:
- name: SECRET_IN
value: dev
以下是 application.yaml 中的示例
innovation:
in: ${SECRET_IN:demo}
但是在本地主机上,当我尝试打印innovation.in(正确创建@Configuration)时,我没有在输出中得到“dev”,它总是打印demo,它出现了部署之间的链接,应用程序 yaml 没有发生,有人可以帮忙吗。
答案 0 :(得分:1)
您可以将整个 application.YAML
配置文件存储到 config map
或 secret
中,并仅将其与部署一起注入
例如:
kind: ConfigMap
apiVersion: v1
metadata:
name: demo
data:
application.yaml: |-
pool:
size:
core: 1
max:16
如果您的 application.properties
类似于
示例:
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/dbname
spring.datasource.username=user
spring.datasource.password=password
您可以将其替换为
jdbc:mysql://${MYSQL_HOST:localhost}:3306/dbname
Deployment.yaml
将类似于
spec:
containers:
- name: demowebapp
image: registry.gitlab.com/unicorn/unicornapp:1.0
ports:
- containerPort: 8080
imagePullPolicy: Always
env:
- name: MYSQL_HOST
value: mysql-prod
您也可以根据需要将更多配置保存到配置映射和秘密中。
阅读更多信息:https://pushbuildtestdeploy.com/spring-boot-application.properties-in-kubernetes/
答案 1 :(得分:1)
我认为你做的一切都对,我有类似的工作设置,但没有默认的“演示”。
从 Spring Boot 的角度进行的一些说明可能会有所帮助。
application.yml
可以包含确实可以从环境变量解析的占位符。application.yml
未“更改”(重写,由 Maven 过滤)。Map<String, String> env = System.getenv();
env.entrySet().forEach(System.out::println);