【问题标题】:Spring Cloud kubernetes not loading config mapSpring Cloud kubernetes 未加载配置映射
【发布时间】:2020-03-02 02:11:50
【问题描述】:

我已经创建了名为 personservice 和 personservice-dev 的 2 个配置映射。

我正在使用配置文件 dev 运行 spring boot 应用程序,但它没有加载正确的配置映射。这是我在崩溃的 pod 的日志中看到的。

 2019-11-05 16:29:37.336  INFO [personservice,,,] 7 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='composite-configmap', propertySources=[ConfigMapPropertySource {name='configmap.personservice.default'}]}
2019-11-05 16:29:37.341  INFO [personservice,,,] 7 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: SecretsPropertySource {name='secrets.personservice.default'}
2019-11-05 16:29:37.445  INFO [personservice,,,] 7 --- [           main] c.person.PersonMicroServiceApplication   : The following profiles are active: kubernetes,dev

Kubectl 获取配置图

部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: personservice
  labels:
    app: personservice
spec:
  replicas: 1
  selector:
    matchLabels:
      app: personservice
  template:
    metadata:
      labels:
        app: personservice
    spec:
      containers:
      - name: personservice
        image: microservice-k8s/personmicroservice-k8s:1.0
        ports:
        - containerPort: 8080
        env:
        - name: PROFILE
          value: "dev" 
        - name: SERVER_PORT
          value: "8080"
        - name: ZIPKIN_URI
          value: "http://172.19.27.145:9411"

引导程序:

spring:
  application:
    name: personservice

【问题讨论】:

  • 您的部署配置未指定加载任何配置映射。 pod 规范应将 configmap 包含为卷或定义为变量
  • 如何定义 configmap 的数据部分?
  • 我以为那会是自动的cloud.spring.io/spring-cloud-static/spring-cloud-kubernetes/… 是不是不正确?我的意思是我已经定义了配置文件,并且 configmap 与应用程序具有相同的名称

标签: spring spring-boot kubernetes spring-cloud spring-cloud-kubernetes


【解决方案1】:

你把事情弄糊涂了。你的 configmap 被命名为 personservice-dev 并且你的应用程序的名字是 personservice 而不是 personservice-dev,默认情况下 Spring Cloud K8S 会寻找名称等于 spring.application.name 而不是 spring.application.name-{profile} 的 configmap。

您有两种方法可以解决您的问题:

1-删除 personservice-dev 并在您的 personservice 配置映射中:

kind: ConfigMap
apiVersion: v1
metadata:
  name: personservice
data:
  application.yml: |-
    p1:
      pa: blabla
    ---
    spring:
      profiles: dev
    p1:
      pa: blibli
    ---
    spring:
      profiles: prod
    p1:
      pa: blublu

2-保留personservice-dev 和personservice 并在bootstrap.yml 中定义:

spring:
  cloud:
    kubernetes:
      config:
        name: ${spring.application.name} #This is optional
        sources:
          - name: ${spring.application.name}-${PROFILE} # Here you get your `personservice-dev` configmap

【讨论】:

  • 是的,现在我看到它加载了正确的文件,但不确定什么是默认值?propertySources=[ConfigMapPropertySource {name='configmap.personservice-dev.default'}]} 仍然有问题吗?跨度>
  • “不确定什么是默认值”是什么意思?
  • 我的意思是“configmap.personservice-dev.default”中的默认值。是命名空间吗?
  • 是的。如果需要,您还可以指定其他命名空间
  • 谢谢伙计。你的生活更安全。在哪里可以找到更详细的 Spring Cloud kubernates 文档?
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 2021-06-16
  • 2021-07-25
  • 2019-05-29
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多