在春季使用k8s configmap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在春季使用k8s configmap相关的知识,希望对你有一定的参考价值。

我有一个spring引导服务,目前使用.properties文件使用spring @Value批注来使用变量。最近,我们已将Spring Boot服务迁移到K8集群。这意味着,我们需要创建一个configmap.yml文件,其中包含与.properties文件相同的所有属性。每当更改属性时,都必须在两个位置(用于本地开发人员的configmap和.properties文件)都进行更改。因此,我们必须为每个spring配置文件管理2个文件(configmap和.properties)。有一个更好的方法吗?我们使用gitlab ci / cd工具进行部署。

是否有一种方法可以使用configmap而不是属性来在我们的机器中进行本地开发,以便我们可以完全放弃.properties文件而仅维护configmap?

管理Spring Boot应用程序属性的理想方法是什么?

样本service-config-map.yaml

kind: ConfigMap 
apiVersion: v1 
metadata:
  name: myservice-config
data:
  server.port: "10300"
  spring.application.name: myserviceGateway
  myservice.application.name: helloworld
  myservice.server.apiContext: /api
  myservice.server.versionContext: /v
  myservice.current.version=2.0

属性文件application.properties

server.port=10300
spring.application.name=myserviceGateway
myservice.application.name=helloworld
myservice.server.apiContext=/api
myservice.server.versionContext=/v
myservice.current.version=2.0
答案

Spring Cloud Kubernetes project使Kubernetes ConfigMap在应用程序引导期间可用,并在观察到的ConfigMap上检测到更改时触发Bean或Spring上下文的热重装。

示例here

具有配置映射名称的bootstrap yaml看起来像

spring:
  application:
    name: reload-example
  cloud:
    kubernetes:
      reload:
        enabled: true
        mode: polling
        period: 5000
      config:
        sources:
          - name: other
          - name: $spring.application.name
另一答案

是的,这是可行的。

首先,您将需要一个bean来放置yaml,例如:

@Bean
public static PropertySourcesPlaceholderConfigurer properties() 
    PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    yaml.setResources(new ClassPathResource(CONF_FILE));
    propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
    return propertySourcesPlaceholderConfigurer;

然后您可以将任何标准服务注释为:

    @Service
@EnableConfigurationProperties
@ConfigurationProperties(prefix="service-config-map")
public class ConfigMapConfigService 
...
另一答案

取决于您对集群的访问类型,您可以使用K8s API通过HTTP检索资源。例如,您可以使用某种脚本从群集中提取配置映射,并将其解析为yaml(默认情况下为json,不确定是否支持yaml输出,但是尚未进行实际测试)。

在这里查看更多:https://docs.openshift.com/container-platform/3.7/rest_api/api/v1.ConfigMap.html#Get-api-v1-namespaces-namespace-configmaps-name

以上是关于在春季使用k8s configmap的主要内容,如果未能解决你的问题,请参考以下文章

春季启动批处理到具有多个作业的春季云任务

如何在春季批处理中使用sftp上传多个文件

在春季安全中注销特定会话ID

在春季使用多对一映射时获得无限的Json响应[重复]

春季现场注入的内部工作以及为啥不建议使用

如何在春季样本宠物诊所中使用 JPA?