更新时间:2024-01-04 GMT+08:00

使用配置项

本节以下面这个ConfigMap为例,具体介绍ConfigMap的用法。

apiVersion: v1
kind: ConfigMap
metadata:
  name: cce-configmap
data:
  SPECIAL_LEVEL: Hello
  SPECIAL_TYPE: CCE
  • 在工作负载里使用ConfigMap时,需要工作负载和ConfigMap处于同一集群和命名空间中。
  • 以数据卷挂载使用ConfigMap时,当ConfigMap被更新,Kubernetes会同时更新数据卷中的数据。

    对于以subPath形式挂载的ConfigMap数据卷,当ConfigMap被更新时,Kubernetes无法自动更新数据卷中的数据。

  • 以环境变量方式使用ConfigMap时,当ConfigMap被更新,数据不会被自动更新。 更新这些数据需要重新启动Pod。

通过配置项设置工作负载环境变量

使用控制台方式

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏选择“工作负载”,单击右上角“创建负载”

    在创建工作负载时,在“容器配置”中找到“环境变量”,单击“新增变量”。

    • 配置项导入:选择一个配置项,将配置项中所有键值都导入为环境变量。
    • 配置项键值导入:将配置项中某个键的值导入作为某个环境变量的值。
      • 变量名称:工作负载中的环境变量名称,可自定义,默认为配置项中选择的键名。
      • 变量/变量引用:选择一个配置项及需要导入的键名,将其对应的值导入为工作负载环境变量。

      例如将cce-configmap这个配置项中“SPECIAL_LEVEL”的值“Hello”导入,作为工作负载环境变量“SPECIAL_LEVEL”的值,导入后容器中有一个名为“SPECIAL_LEVEL”的环境变量,其值为“Hello”

  3. 配置其他工作负载参数后,单击“创建工作负载”。

    等待工作负载正常运行后,您可登录容器执行以下语句,查看该配置项是否已被设置为工作负载的环境变量。

    printenv SPECIAL_LEVEL

    示例输出如下:

    Hello

使用kubectl方式

  1. 请参见通过kubectl连接集群配置kubectl命令。
  2. 创建并编辑nginx-configmap.yaml文件。

    vi nginx-configmap.yaml

    YAML文件内容如下:

    • 配置项导入:如果要将一个配置项中所有数据都添加到环境变量中,可以使用envFrom参数,配置项中的Key会成为工作负载中的环境变量名称。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-configmap
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx-configmap
        template:
          metadata:
            labels:
              app: nginx-configmap
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              envFrom:                      # 使用envFrom来指定环境变量引用的配置项
              - configMapRef:
                  name: cce-configmap       # 引用的配置项名称
            imagePullSecrets:
            - name: default-secret
    • 配置项键值导入:您可以在创建工作负载时将配置项设置为环境变量,使用valueFrom参数单独引用ConfigMap中的Key/Value。
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-configmap
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx-configmap
        template:
          metadata:
            labels:
              app: nginx-configmap
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              env:                             # 设置工作负载中的环境变量
              - name: SPECIAL_LEVEL           # 工作负载中的环境变量名称
                valueFrom:                    # 使用valueFrom来指定环境变量引用配置项
                  configMapKeyRef:
                    name: cce-configmap       # 引用的配置项名称
                    key: SPECIAL_LEVEL        # 引用的配置项中的key
              - name: SPECIAL_TYPE            # 添加多个环境变量参数,可同时导入多个环境变量
                valueFrom:
                  configMapKeyRef:
                    name: cce-configmap
                    key: SPECIAL_TYPE
            imagePullSecrets:
            - name: default-secret

  3. 创建工作负载。

    kubectl apply -f nginx-configmap.yaml

  4. 创建完成后,查看Pod中的环境变量。

    1. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep nginx-configmap
      预期输出如下:
      nginx-configmap-***   1/1     Running   0              2m18s
    2. 执行以下命令,查看该Pod中的环境变量。
      kubectl exec nginx-configmap-*** -- printenv SPECIAL_LEVEL SPECIAL_TYPE

      预期输出如下:

      Hello
      CCE

      说明该配置项已被设置为工作负载的环境变量。

通过配置项设置命令行参数

您可以使用配置项作为环境变量来设置容器中的命令或者参数值,使用环境变量替换语法$VAR_NAME来进行。

使用控制台方式

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏选择“工作负载”,单击右上角“创建负载”

    在创建工作负载时,在“容器配置”中找到“环境变量”单击“新增变量”。本例中以“配置项导入”为例。

    • 配置项导入:选择一个配置项,将配置项中所有键值都导入为环境变量。

  3. “容器配置”中找到“生命周期”在右侧选择“启动后处理”页签,并填写以下参数。

    • 处理方式:命令行脚本。
    • 执行命令:以下命令需分三行填写,其中SPECIAL_LEVELSPECIAL_TYPE为工作负载中的环境变量名,即cce-configmap配置项中的键名。
      /bin/bash
      -c
      echo $SPECIAL_LEVEL $SPECIAL_TYPE > /usr/share/nginx/html/index.html

  4. 配置其他工作负载参数后,单击“创建工作负载”。

    等待工作负载正常运行后,您可登录容器执行以下语句,查看该配置项是否已被设置为工作负载的环境变量。

    cat /usr/share/nginx/html/index.html

    示例输出如下:

    Hello CCE

使用kubectl方式

  1. 请参见通过kubectl连接集群配置kubectl命令。
  2. 创建并编辑nginx-configmap.yaml文件。

    vi nginx-configmap.yaml

    如下面的示例所示,在工作负载中导入了cce-configmap配置项,其中SPECIAL_LEVELSPECIAL_TYPE为工作负载中的环境变量名,即cce-configmap配置项中的键名。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-configmap
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-configmap
      template:
        metadata:
          labels:
            app: nginx-configmap
        spec:
          containers:
          - name: container-1
            image: nginx:latest
            lifecycle:
              postStart:
                exec:
                  command: [ "/bin/sh", "-c", "echo $SPECIAL_LEVEL $SPECIAL_TYPE > /usr/share/nginx/html/index.html" ]
            envFrom:                      # 使用envFrom来指定环境变量引用的配置项
            - configMapRef:
                name: cce-configmap       # 引用的配置项名称
          imagePullSecrets:
            - name: default-secret

  3. 创建工作负载。

    kubectl apply -f nginx-configmap.yaml

  4. 等待工作负载正常运行后,容器中的/usr/share/nginx/html/index.html文件将被输入如下内容。

    1. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep nginx-configmap
      预期输出如下:
      nginx-configmap-***   1/1     Running   0              2m18s
    2. 执行以下命令,查看该Pod中的环境变量。
      kubectl exec nginx-configmap-*** -- cat /usr/share/nginx/html/index.html

      预期输出如下:

      Hello CCE

使用配置项挂载到工作负载数据卷

配置项(ConfigMap)挂载是将配置项中的数据挂载到指定的容器路径。平台提供工作负载代码和配置文件的分离,“配置项挂载”用于处理工作负载配置参数。用户需要提前创建工作负载配置,操作步骤请参见创建配置项

使用控制台方式

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏选择“工作负载”,单击右上角“创建负载”

    在创建工作负载时,在“容器配置”中找到“数据存储”,选择“添加存储卷 > 配置项(ConfigMap)”

  3. 选择配置项挂载参数,如表1

    表1 配置项挂载

    参数

    参数说明

    配置项

    选择对应的配置项名称。

    配置项需要提前创建,具体请参见创建配置项

    挂载路径

    请输入挂载路径。配置项挂载完成后,会在容器中的挂载路径下生成以配置项中的key为文件名, value为文件内容的配置文件。

    数据存储挂载到容器上的路径。请不要挂载在系统目录下,如“/”、“/var/run”等,会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。
    须知:

    挂载高危目录的情况下 ,建议使用低权限账号启动,否则可能会造成宿主机高危文件被破坏。

    子路径

    请输入挂载路径的子路径。
    • 使用子路径挂载本地磁盘,实现在单一Pod中重复使用同一个Volume,不填写时默认为根。
    • 子路径可以填写ConfigMap/Secret的键值,子路径若填写为不存在的键值则数据导入不会生效。
    • 通过子路径导入的数据不会随ConfigMap/Secret的更新而动态更新。

    权限

    只读。只能读容器路径中的数据卷。

  4. 其余信息都配置完成后,单击“创建工作负载”。

    等待工作负载正常运行后,本示例将在/etc/config目录下生成SPECIAL_LEVEL和SPECIAL_TYPE两个文件,且文件的内容分别为Hello和CCE。

    您可登录容器执行以下语句,查看容器中的SPECIAL_LEVEL或SPECIAL_TYPE文件。

    cat /etc/config/SPECIAL_LEVEL

    预期输出如下:

    Hello

使用kubectl方式

  1. 请参见通过kubectl连接集群配置kubectl命令。
  2. 创建并编辑nginx-configmap.yaml文件。

    vi nginx-configmap.yaml

    如下面的示例所示,配置项挂载完成后,最终会在容器中的/etc/config目录下生成以配置项中的key为文件名, value为文件内容的配置文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-configmap
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-configmap
      template:
        metadata:
          labels:
            app: nginx-configmap
        spec:
          containers:
          - name: container-1
            image: nginx:latest
            volumeMounts:
            - name: config-volume
              mountPath: /etc/config            # 挂载到/etc/config目录下
              readOnly: true
        volumes:
        - name: config-volume
          configMap:
            name: cce-configmap                 # 引用的配置项名称

  3. 创建工作负载。

    kubectl apply -f nginx-configmap.yaml

  4. 等待工作负载正常运行后,在/etc/config目录下会生成SPECIAL_LEVEL和SPECIAL_TYPE两个文件,且文件的内容分别为Hello和CCE。

    1. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep nginx-configmap
      预期输出如下:
      nginx-configmap-***   1/1     Running   0              2m18s
    2. 执行以下命令,查看该Pod中的SPECIAL_LEVEL或SPECIAL_TYPE文件。
      kubectl exec nginx-configmap-*** -- cat /etc/config/SPECIAL_LEVEL

      预期输出如下:

      Hello