使用配置项ConfigMap

企业应用部署涉及大量配置管理,硬编码配置导致环境耦合,需为每个环境单独构建镜像。ConfigMap通过配置与应用解耦,实现同一镜像适配多环境,专门存储非敏感配置数据;Secret则用于敏感数据并提供安全保护。

选型参考

  • 数据卷挂载(推荐):配置以文件形式提供,支持自动同步和热更新。适用于完整配置文件管理和需要动态更新的场景。

  • 环境变量注入:配置直接注入到容器环境中。适用于简单的运行参数、功能开关等场景。

创建配置项

演示如何创建配置项,以用于后续部署nginx示例。

控制台

  1. 登录容器服务管理控制台,选择集群列表单击目标集群名称,选择配置管理 > 配置项

  2. 创建示例配置项。选择命名空间default,单击创建

  3. 输入配置项名称,然后单击+添加,填写配置项名称,最后单击确定

    • 配置项名称:app-config

    • 添加配置项:填写配置项名称和配置项的值。也可单击从文件导入JSON文件创建配置项。

      nginx.conf

      server {
          listen 80;
          location / {
              root /usr/share/nginx/html;
              index index.html;
          }
          location /health {
              return 200 "healthy\n";
              add_header Content-Type text/plain;
          }
      }

kubectl

  1. 通过kubectl工具连接集群

  2. 创建ConfigMap。

    kubectl create configmap app-config \
      --namespace=default \
      --from-literal=nginx.conf="$(cat <<'EOF'
    server {
        listen 80;
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
        location /health {
            return 200 "healthy\n";
            add_header Content-Type text/plain;
        }
    }
    EOF
    )" 
  3. 查看Configmap,输出结果DATA:1,说明配置项创建成功。

    kubectl get configmap app-config

使用配置项

在工作负载中使用配置项时,工作负载与配置项需处于同一集群和命名空间中。

方式一:数据卷挂载

控制台配置

  1. 登录容器服务管理控制台,选择集群列表单击目标集群名称,选择工作负载 > 无状态

  2. 创建Deployment应用。

    1. 无状态页面,单击使用镜像创建

    2. 应用基本信息配置向导页面,配置应用的基本信息。

      • 应用名称nginx-volume-demo命令空间default

      • 副本数量2类型无状态(Deployment)

      然后单击下一步,进入容器配置向导页面。

    3. 配置镜像名称端口

      • 镜像名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

      • 容器端口:80,协议为TCP。

      重要

      拉取此镜像前,集群需具备公网访问能力。若在创建集群时已勾选为专有网络配置 SNAT(默认开启),则无需额外配置。否则,请参见为集群开启访问公网的能力进行设置。

    4. 数据卷区域,单击增加本地存储,新增挂载配置项。配置好相应信息后,单击下一步

      • 存储卷类型配置项名称nginx-config挂载源app-config容器路径/etc/nginx/conf.d

    5. 高级配置页面,按需设置访问、伸缩、调度和标签注解后,单击最下方的创建

    6. 创建完成页面,查看应用任务。

      创建应用任务已提交面板,单击查看应用详情查看容器应用状态是否为Running

  3. 验证Configmap文件是否挂载成功。

    选择需要登录的容器(例如nginx-volume-demo-7xxxxxx****),单击操作列的终端,选择nginx登录容器。

    1. 输出结果包含nginx.conf文件,说明配置项挂载成功。

      ls -la /etc/nginx/conf.d/
    2. 验证文件内容是否正确。

      cat /etc/nginx/conf.d/nginx.conf

      输出内容与配置项内容一致,表明数据卷挂载方式已成功使应用访问到配置项数据。

kubectl配置

  1. 创建nginx-volume-demo.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-volume-demo
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-volume
      template:
        metadata:
          labels:
            app: nginx-volume
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/conf.d
          volumes:
          - name: nginx-config
            configMap:
              name: app-config
              items:
              - key: nginx.conf
                path: nginx.conf
  2. 创建Deployment应用。

    kubectl apply -f  nginx-volume-demo.yaml
  3. 查看Deployment应用,PodRunning状态,说明应用创建成功。

    kubectl get pods -l app=nginx-volume -n default
  4. 输出结果包含nginx.conf文件,说明配置项挂载成功。

    kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/conf.d/
  5. 验证文件内容是否正确。

    kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/conf.d/nginx.conf

    输出内容与配置项内容一致,表明数据卷挂载方式已成功使应用访问到配置项数据。

方式二:环境变量注入

控制台配置

  1. 登录容器服务管理控制台,选择集群列表单击目标集群名称,选择工作负载 > 无状态

  2. 创建Deployment应用。

    1. 无状态页面,单击使用镜像创建

    2. 应用基本信息配置向导页面,配置应用的基本信息。

      • 应用名称nginx-env-demo命令空间default

      • 副本数量2类型无状态(Deployment)

      然后单击下一步,进入容器配置向导页面。

    3. 配置镜像名称端口

      • 镜像名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

      • 容器端口:80,协议为TCP。

      重要

      拉取此镜像前,集群需具备公网访问能力。若在创建集群时已勾选为专有网络配置 SNAT(默认开启),则无需额外配置。否则,请参见为集群开启访问公网的能力进行设置。

    4. 环境变量区域,单击新增配置好相应信息后,单击下一步

      • 类型为配置项;名称CONFIG_变量/变量引用app-config

    5. 高级配置页面,按需设置访问、伸缩、调度和标签注解后,单击最下方的创建

    6. 创建完成页面,查看应用任务。

      创建应用任务已提交面板,单击查看应用详情查看容器状态是否为Running

  3. 验证环境变量是否注入成功。

    选择需要登录的容器(例如nginx-env-demo-7xxxxxx****),单击操作列的终端,选择nginx登录容器。

    env | grep CONFIG_

    输出内容与配置项内容一致,表明环境变量注入方式已成功使应用访问到配置项数据。

kubectl配置

  1. 创建nginx-env-demo.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-env-demo
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-env
      template:
        metadata:
          labels:
            app: nginx-env
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            # 批量注入ConfigMap
            envFrom:
            - prefix: CONFIG_
              configMapRef:
                name: app-config
    
  2. 创建Deployment应用。

    kubectl apply -f nginx-env-demo.yaml
  3. 查看Deployment应用,输出PodRunning状态,说明应用创建成功。

    kubectl get pods -l app=nginx-env -n default
  4. 验证环境变量是否注入成功。

    kubectl exec deployment/nginx-env-demo -n default -- env | grep CONFIG_

    输出内容与配置项内容一致,表明环境变量注入方式已成功使应用访问到配置项数据。

管理配置项

配置项创建完成后,可以在配置项页面进行以下操作:

操作

说明

编辑配置项

单击目标配置项右侧操作列下的编辑,可修改配置项的名称

重要

修改正在使用的配置项将直接影响关联应用的运行状态,导致服务重启或功能异常。建议在变更前充分评估影响范围,并在业务低峰期执行操作。

删除配置项

单击目标配置项右侧操作列下的删除,删除不再使用的配置项。

重要

请勿删除集群自动生成的系统配置项,这些配置项位于 kube-system 和 kube-public 命名空间下(如 CoreDNS Configuration),删除后可能影响集群正常运行。

相关文档