跳转至

配置项

配置项(ConfigMap)是 Kubernetes 的一种 API 对象,用来将非机密性的数据保存到键值对中,可以存储其他对象所需要使用的配置。 使用时, 容器可以将其用作环境变量、命令行参数或者存储卷中的配置文件。通过使用配置项,能够将配置数据和应用程序代码分开,为应用配置的修改提供更加灵活的途径。

Note

配置项并不提供保密或者加密功能。如果要存储的数据是机密的,请使用密钥,或者使用其他第三方工具来保证数据的私密性,而不是用配置项。 此外在容器里使用配置项时,容器和配置项必须处于同一集群的命名空间中。

使用场景

您可以在 Pod 中使用配置项,有多种使用场景,主要包括:

  • 使用配置项设置容器的环境变量

  • 使用配置项设置容器的命令行参数

  • 使用配置项作为容器的数据卷

使用配置项设置容器的环境变量

您可以通过图形化界面或者终端命令行来使用配置项作为容器的环境变量。

Note

配置项导入是将配置项作为环境变量的值;配置项键值导入是将配置项中某一参数作为环境变量的值。

图形化界面操作

通过镜像创建工作负载时,可以在环境变量界面通过选择配置项导入配置项键值导入为容器设置环境变量。

  1. 进入镜像创建工作负载页面中,在容器配置这一步中,选择环境变量配置,点击添加环境变量按钮。

    添加环境变量

  2. 在环境变量类型处选择配置项导入配置项键值导入

    • 当环境变量类型选择为配置项导入时,依次输入变量名前缀名称、配置项的名称。

    • 当环境变量类型选择为配置项键值导入时,依次输入变量名配置项名称、的名称。

命令行操作

您可以在创建工作负载时将配置项设置为环境变量,使用 valueFrom 参数引用 ConfigMap 中的 Key/Value。

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod-1
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:                  # (1)
            configMapKeyRef:
              name: kpanda-configmap  # (2)
              key: SPECIAL_LEVEL      # (3)
  restartPolicy: Never
  1. 使用 valueFrom 来指定 env 引用配置项的 value 值
  2. 引用的配置文件名称
  3. 引用的配置项 key

使用配置项设置容器的命令行参数

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

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod-3
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: kpanda-configmap
              key: SPECIAL_LEVEL
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: kpanda-configmap
              key: SPECIAL_TYPE
  restartPolicy: Never

这个 Pod 运行后,输出如下内容。

Hello Kpanda

使用配置项作为容器的数据卷

您可以通过图形化界面或者终端命令行来使用配置项作为容器的环境变量。

图形化操作

在通过镜像创建工作负载时,您可以通过在数据存储界面选择存储类型为配置项,将配置项作为容器的数据卷。

  1. 进入镜像创建工作负载页面中,在容器配置这一步中,选择数据存储配置,在节点路径映射列表点击添加按钮。

    添加环境变量

  2. 在存储类型处选择配置项,并依次输入容器路径子路径等信息。

命令行操作

要在一个 Pod 的存储卷中使用 ConfigMap。

下面是一个将 ConfigMap 以卷的形式进行挂载的 Pod 示例:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap

如果 Pod 中有多个容器,则每个容器都需要自己的 volumeMounts 块,但针对每个 ConfigMap,您只需要设置一个 spec.volumes 块。

Note

将配置项作为容器挂载的数据卷时,配置项只能作为只读文件进行读取。

评论