9.3. 使用 ConfigMap PropertySource
Kubernetes 具有将配置传递给应用程序的 ConfigMap 的概念。Spring cloud Kubernetes 插件提供与 ConfigMap
集成,使配置映射可以被 Spring Boot 访问。
启用后 ConfigMap
PropertySource
将查找 Kubernetes 查找应用程序命名的 ConfigMap
(请参阅 spring.application.name
)。如果找到了映射,它将读取其数据并执行以下操作:
9.3.1. 应用单个属性
假设我们有一个名为 demo
的 Spring Boot 应用程序,它使用属性来读取其线程池配置。
-
pool.size.core
-
pool.size.max
这可以以 YAML 格式外部化到配置映射:
kind: ConfigMap apiVersion: v1 metadata: name: demo data: pool.size.core: 1 pool.size.max: 16
9.3.2. 应用 Property Named application.yaml
对于大多数情况来说,单个属性可以正常工作,但有时我们找到 YAML 更为方便。在这种情况下,我们使用一个名为 application.yaml
的单个属性,并在其中嵌入 YAML:
kind: ConfigMap apiVersion: v1 metadata: name: demo data: application.yaml: |- pool: size: core: 1 max:16
9.3.3. 应用 Property Named application.properties
您还可以在 Spring Boot application.properties
文件的样式中定义 ConfigMap 属性。在这种情况下,我们使用名为 application.properties
的单个属性,并列出其中的属性设置:
kind: ConfigMap apiVersion: v1 metadata: name: demo data: application.properties: |- pool.size.core: 1 pool.size.max: 16
9.3.4. 部署 ConfigMap
要部署 ConfigMap 并使其可以被 Spring Boot 应用程序访问,请执行以下步骤。
流程
-
在 Spring Boot 应用程序中,使用 外部化配置机制 来访问 ConfigMap 属性源。例如,通过注解带有
@Configuration
注释的 Java Bean,bean 的属性值可以被 ConfigMap 注入。 -
在项目的
bootstrap.properties
文件中(或bootstrap.yaml
文件),将spring.application.name
属性设置为与 ConfigMap 的名称匹配。 对与应用程序关联的服务帐户启用
查看
权限(默认情况下,这是名为default
的服务帐户)。例如,要在default
服务帐户中添加view
权限:oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)