k8s 新手。
我在配置映射中有多个配置文件,并希望我的应用程序根据 spring.profiles.active 获取属性。
情况1:-
我的 ConfigMap 看起来像,
kind: ConfigMap
apiVersion: v1
metadata:
name: example-configmap-overriding-new-02
data:
application.properties: |-
globalkey = global key value
TeamName = Team Name value
Purpose = Purpose value
RootFile = Root file value
Company = company value
Place = Place value
Country = Country value
---
spring.profiles = qa
globalkey = global key qa value
TeamName = Team Name qa value
Purpose = Purpose qa value
RootFile = Root file qa value
---
spring.profiles = prod
globalkey = global key prod value
Company = company prod value
Place = Place prod value
Country = Country prod value
我的部署文件看起来像,
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-configmapsingleprofile
spec:
selector:
matchLabels:
app: demo-configmapsingleprofile
replicas: 1
template:
metadata:
labels:
app: demo-configmapsingleprofile
spec:
serviceAccountName: config-reader
containers:
- name: demo-configmapsingleprofile
image: image name
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: example-configmap-overriding-new-02
securityContext:
privileged: false
我在 Spring Boot 中的配置文件看起来像,
@Configuration
public class ConfigConsumerConfig {
@Value(value = "${globalkey}")
private String globalkey;
@Value(value = "${TeamName}")
private String teamName;
@Value(value = "${Purpose}")
private String purpose;
@Value("${RootFile}")
private String rootFile;
@Value("${Company}")
private String company;
@Value("${Place}")
private String place;
@Value("${Country}")
private String country;
//With getters and setters
}
我的 application.properties 看起来像,
spring.profiles.active=prod
spring.application.name=example-configmap-overriding-new-02
spring.cloud.kubernetes.config.name=example-configmap-overriding-new-02
spring.cloud.kubernetes.config.namespace=default
spring.cloud.kubernetes.config.sources[0].name=example-configmap-overriding-new-02
spring.cloud.kubernetes.config.enabled=true
应用程序启动良好,它从配置映射中获取了值。但它是从错误的配置文件中挑选出来的。一些值是从 qa 配置文件中获取的。
我得到的最终结果是:-
{"globalkey":"global key prod value","teamName":"Team Name qa value","purpose":"Purpose qa value","rootFile":"Root file qa value","company":"company prod value","place":"Place prod value","country":"Country prod value"}
案例2:-
但是,当我将配置映射与 yaml 一起使用时,如下所示,
kind: ConfigMap
apiVersion: v1
metadata:
name: example-configmap-overriding-new-02
data:
application.yml: |-
globalkey : global key value
TeamName : Team Name value
Purpose : Purpose value
RootFile : Root file value
Company : company value
Place : Place value
Country : Country value
---
spring:
profiles: qa
globalkey : global key qa value
TeamName : Team Name qa value
Purpose : Purpose qa value
RootFile : Root file qa value
---
spring:
profiles: prod
globalkey : global key prod value
Company : company prod value
Place : Place prod value
Country : Country prod value
我得到了预期的结果。它按预期从产品配置文件中挑选。
{"globalkey":"global key prod value","teamName":"Team Name value","purpose":"Purpose value","rootFile":"Root file value","company":"company prod value","place":"Place prod value","country":"Country prod value"}
案例 2 按预期工作,但案例 1 没有。
我对配置图有任何错误/误解吗?有人可以在这里提出建议吗?
谢谢。