likes
comments
collection
share

Spring Cloud Kubernetes - ConfigMap使用

作者站长头像
站长
· 阅读数 29

一、ConfigMap

加载思路:

创建configmap,挂载配置文件为application.yml,最好指定profile

加载bootstrap配置 -> 指定profile -> 寻找对应profile挂载的文件 -> pooling or event

Spring Cloud Kubernetes - ConfigMap使用

Service改造

1、引入依赖

## 接入 kubernetes configmap
implementation ('org.springframework.cloud:spring-cloud-starter-kubernetes-client-config:2.1.4')

## 热更新
implementation("org.springframework.boot:spring-boot-actuator")
implementation("org.springframework.boot:spring-boot-actuator-autoconfigure")

2、新增bootstrap.yml文件

根目录下新增bootstrap.yml文件

server:
  port: 8080
spring:
  application:
    name: server
  cloud:
    kubernetes:
      enabled: false

本地开发时,指定spring.cloud.kubernetes.enabled=false,关闭kubernetes配置

3、修改各环境配置文件

修改dist目录下的各个配置文件为bootstrap.yml,同时修改配置,以test环境为例

server:
  port: 8080

management:
  endpoint:
    restart:
      enabled: true
    health:
      enabled: true
    info:
      enabled: true

spring:
  application:
    name: server
  cloud:
    kubernetes:
      reload:
 enabled: true
 mode: event
      config:
        sources:
          - name: demo-configmap
            namespace: test
  profiles:
    active: k8s-test

K8S部署

1、创建ConfigMap

kubectl create configmap demo-configmap --from-file=application.yml -n test

server:
  port: 8080
#  servlet.context-path: /${spring.application.name}
spring:
  profiles: k8s-test
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  application:
    name: server
  cloud:
    kubernetes:
      config:
        sources:
          - name: demo-comfigmap
            namespace: test
      reload:
        enabled: true
        mode: event
logging:
  config: classpath:logback.xml
  endpoint:
    restart:
      enabled: true
    health:
      enabled: true
    info:
      enabled: true

2、创建ServiceAccount

创建Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: test
  name: config-reader
rules:
  - apiGroups: [""]
    resources: ["pods","configmaps","services","endpoints"]
    verbs: ["get", "watch", "list"]

创建ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: config-reader
  namespace: test

绑定Role和ServiceAccount

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: config-reader
  namespace: test
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: config-reader
subjects:
  - kind: ServiceAccount
    name: config-reader
    namespace: test

3、创建Deployment,指定ConfigMap、ServiceAccount

 serviceAccountName: config-reader
 serviceAccount: config-reader

Spring Cloud Kubernetes - ConfigMap使用

为什么使用bootstrap.yml,参考:www.jianshu.com/p/c955c44ae…

即系统级别的配置信息放在bootstrap.yml中,自定义的配置信息放在application.yml中。

建议

系统级别以及不可变的配置放在项目代码中,不做更改

可变的、自定义的配置放在configmap中做热更新

参考文档

1、spring.io/projects/sp…

2、spring.io/projects/sp…

3、www.enmalvi.com/2022/05/27/…

4、xinchen.blog.csdn.net/article/det…