Kubernetes基于ConfigMap实现配置分离

这篇博客详细介绍了如何在Kubernetes(K8S)中使用ConfigMap进行配置分离,包括通过命令行和声明方式创建ConfigMap,以及通过环境变量和文件挂载方式使用ConfigMap。还提供了实战案例,演示了如何控制Spring Boot项目的配置文件,通过环境变量和文件挂载方式实现配置的动态调整。
摘要由CSDN通过智能技术生成

1 创建ConfigMap

1.1 使用命令的方式创建

1.1.1 通过文字值创建ConfigMap

  • 创建语法:使用命令参数 --from-literal=key=value 定义一个配置项,可以定义一个或多个配置项。配置项中的 key 会成为 ConfigMap 中的 key,配置项中的 value 会成为 ConfigMap 中的 value。

    kubectl create configmap configmap_name --from-literal=key1=value1 --from-literal=key2=value2
    
  • 创建示例:

    kubectl create configmap cm1 --from-literal=username=admin --from-literal=password=123456
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap cm1 -o yaml
    

    在这里插入图片描述

1.1.2 通过目录创建ConfigMap

  • 创建语法:使用命令参数 --from-file=dir 定义一个配置项,可以定义一个或多个配置项。dir 目录下的文件的名称会成为 ConfigMap 中的 key,dir 目录下的文件的内容会成为 ConfigMap 中的 value。

    kubectl create configmap configmap_name --from-file=dir1 --from-file=dir2
    
  • 创建示例:

    kubectl create configmap cm2 --from-file=config
    
    # config/application-dev.yml
    env: dev
    msg: dev profile
    
    # config/application-test.yml
    env: test
    msg: test profile
    
    # config/application-prod.yml
    env: prod
    msg prod profile
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap cm2 -o yaml
    

    在这里插入图片描述

1.1.3 通过文件创建ConfigMap

  • 创建语法:使用命令参数 --from-file=file 定义一个配置项,可以定义一个或多个配置项。file 文件的名称会成为 ConfigMap 中的 key,file 文件的内容会成为 ConfigMap 中的 value。

    kubectl create configmap configmap_name --from-file=file1 --from-file=file2
    
  • 创建示例:

    kubectl create configmap cm3 --from-file=application-dev.yml --from-file=application-test.yml
    
    # config/application-dev.yml
    env: dev
    msg: dev profile
    
    # config/application-test.yml
    env: test
    msg: test profile
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap cm3 -o yaml
    

    在这里插入图片描述

1.1.4 通过配置文件创建ConfigMap

  • 创建语法:使用命令参数 --from-env-file=file 定义配置项,如果定义了多个配置项,则只有最后一个配置项生效。file 文件的内容的每一行都必须是 key=value 的形式,file 文件中每行的 key 会成为 ConfigMap 中的 key,file 文件中每行的 value 会成为 ConfigMap 中的 value。

    kubectl create configmap configmap_name --from-env-file=file
    
  • 创建示例:

    kubectl create configmap cm4 --from-env-file=application.properties
    
    # application.properties
    username=admin
    password=123456
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap cm4 -o yaml
    

    在这里插入图片描述

1.2 使用声明的方式创建

1.2.1 创建简单的ConfigMap

  • 配置文件:创建一个名称为 simple-cm-demo.yaml 的配置文件,内容如下所示。使用该配置文件创建的 ConfigMap 与 1.1.1节或1.1.4节中的方式创建的 ConfigMap 的形式一致。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: simple-cm
    data:
      username: admin
      password: "123456"
    
  • 创建命令:

    kubectl apply -f simple-cm-demo.yaml
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap simple-cm -o yaml
    

    在这里插入图片描述

1.2.2 创建复杂的ConfigMap

  • 配置文件:创建一个名称为 complex-cm-demo.yaml 的配置文件,内容如下所示。使用该配置文件创建的 ConfigMap 与 1.1.2节或1.1.3节中的方式创建的 ConfigMap 的形式一致。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: complex-cm
    data:
      application-dev.yml: |
        env: dev
        msg: dev profile
      application-test.yml: |
        env: test
        msg: test profile
    
  • 创建命令:

    kubectl apply -f complex-cm-demo.yaml
    
  • 创建结果:执行以下命令,即可查看到创建结果如下图所示。

    kubectl get configmap complex-cm -o yaml
    

    在这里插入图片描述

2 使用ConfigMap

2.1 通过环境变量的方式使用ConfigMap

2.1.1 使用单个ConfigMap中的数据定义容器环境变量

  • 配置文件:创建一个名称为 single-cm-demo.yaml 的配置文件,内容如下所示。该配置文件中定义了一个名称为 env-cm 的ConfigMap,并把其中的 DEPLOYMENT_ENV:test 配置项以环境变量的形式传给名称为 single-cm-deployment 的 Deployment。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: env-cm
    data:
      DEPLOYMENT_ENV: test
      
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: single-cm-deployment
      labels:
        app: single-cm
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: single-cm
      template:
        metadata:
          labels:
            app: single-cm
        spec:
          containers:
            - name: test-container
              image: my-app:latest
              imagePullPolicy: IfNotPresent
              args: ["--spring.profiles.active=$(DEPLOYMENT_ENV_KEY)"]
              ports:
                - containerPort: 8080
              env:
                - name: DEPLOYMENT_ENV_KEY
                  valueFrom:
                    configMapKeyRef:
                      name: env-cm
                      key: DEPLOYMENT_ENV
    
  • 部署配置:执行以下命令即可使用该部署文件进行部署。

    kubectl apply -f single-cm-demo.yaml
    
  • 部署结果:该 Deployment 中接收一个名称为 spring.profiles.active 的命令行参数,而传给该命令行参数的值则为名称为 DEPLOYMENT_ENV_KEY 的环境变量的值,即实际传的值为 test,由于该配置文件中使用的镜像 my-app:latest 是一个Spring Boot 程序应用,所以通过这个环境变量即是指定使用 test 配置环境来启动该应用时。

2.1.2 使用多个ConfigMap中的数据定义容器环境变量

  • 部署文件:创建一个名称为 multi-cm-demo.yaml 的配置文件,内容如下所示。该配置文件中定义了两个名称分别为 app-cmlog-cm 的ConfigMap,并把其中的 APPLICATION_NAME: smart-classroom 配置项 和 LOG_LEVEL: INFO 配置项以环境变量的形式传给名称为 multi-cm-deployment 的 Deployment。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: app-cm
    data:
      APPLICATION_NAME: SMART-CLASSROOM
    
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: log-cm
    data:
      LOG_LEVEL: INFO
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: multi-cm-deployment
      labels:
        app: multi-cm
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: multi-cm
      template:
        metadata:
          labels:
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值