плохо знакомы с k8s.
Прошел через https://cloud.spring.io/spring-cloud-static/spring-cloud-kubernetes/2.1.0.RC1/multi/multi__kubernetes_propertysource_implementations.html
У меня несколько профилей на карте конфигурации, и я хочу, чтобы мое приложение получило свойства, основанные на 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
Мой файл конфигурации при загрузке весной выглядит так:
@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.
Я делаю какие-либо ошибки / недоразумения с картой конфигурации. Не могли бы вы дать один совет?
Thx.