ConfigMap


本页面介绍了 Kubernetes 的 ConfigMap 对象及其在 Google Kubernetes Engine (GKE) 中的用法。

概览

ConfigMap 在运行时将非敏感配置工件(例如配置文件、命令行参数和环境变量)绑定到 Pod 容器和系统组件。

ConfigMap 会将您的配置与 Pod 和组件分开,这有助于保持工作负载的可移植性,使其配置更易于更改和管理,并防止将配置数据硬编码到 Pod 规范。

创建 ConfigMap

您可以使用以下命令创建 ConfigMap:

kubectl create configmap NAME DATA

替换以下内容:

  • NAME:您的 ConfigMap 对象的名称。
  • DATA:ConfigMap 的配置数据,可以是以下项之一:

    • 包含一个或多个配置文件的目录的路径,使用 --from-file 标志指示。
    • 键值对,每个键值对都使用 --from-literal 标志指定。

如需详细了解 kubectl create,请参阅参考文档

您还可以通过在 YAML 清单文件中定义 ConfigMap 对象并使用 kubectl create -f FILE_NAME 部署对象来创建 ConfigMap。

基于文件创建 ConfigMap

要基于一个或多个文件创建 ConfigMap,请使用 --from-file。您可以指定任何明文格式(例如 .properties.txt.env)的文件,只要这些文件包含键值对即可。

最佳做法是将 ConfigMap 文件存储在 Git 中。这样,您就可以利用持续集成和交付 (CI/CD) 流水线

如需传入单个文件或多个文件,请运行以下命令:

kubectl create configmap NAME \
    --from-file FILE_PATH_1 \
    --from-file FILE_PATH_2

替换以下内容:

  • NAME:您的 ConfigMap 对象的名称。
  • FILE_PATH_1:文件的路径,例如 path/to/file.properties
  • FILE_PATH_2:第二个文件的路径,例如 path/to/file2.properties

如需传入包含多个文件的目录,请运行以下命令:

kubectl create configmap NAME \
    --from-file DIRECTORY

替换以下内容:

  • NAME:您的 ConfigMap 对象的名称。
  • DIRECTORY:目录路径,例如 path/to/directory

在基于文件创建 ConfigMap 时,键默认为文件路径的基名,值默认为文件的内容。您还可以指定备用键

在基于目录创建 ConfigMap 时,基名为目录中的有效键的每个文件都打包到 ConfigMap。kubectl 会忽略非常规文件,例如符号链接、设备和管道。kubectl 还会忽略子目录,因为 kubectl create configmap 不会递归到子目录中。

例如,以下命令从目录 game-configs(该目录中包含两个 properties 文件:game.propertiesui.properties)创建一个名为 game-data 的 ConfigMap:

kubectl create configmap game-data \
    --from-file game-configs/

运行 kubectl get configmap game-data -o yaml 会返回以下输出:

apiVersion: v1
data:
  game.properties: |
    enemies=aliens
    lives=3
    ...
  ui.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true
    ...
kind: ConfigMap
metadata:
  creationTimestamp: ...
  name: game-data
  namespace: default
  resourceVersion: ...
  selfLink: /api/v1/namespaces/default/configmaps/game-data
  uid: ...

基于字面量值创建 ConfigMap

要基于字面量值创建 ConfigMap,请使用 --from-literal

例如,以下命令用于创建一个名为 LITERAL_DATA 且具有两个键值对的 ConfigMap:

kubectl create configmap LITERAL_DATA \
    --from-literal key1=VALUE_1 \
    --from-literal key2=VALUE_2

为每个键值对指定 --from-literal

运行 kubectl get configmap literal-data -o yaml 会返回以下输出:

apiVersion: v1
data:
  key1: VALUE_1
  key2: VALUE_2
kind: ConfigMap
metadata:
  creationTimestamp: ...
  name: LITERAL_DATA
  namespace: default
  resourceVersion: ....
  selfLink: /api/v1/namespaces/default/configmaps/literal-data
  uid: ...

使用 ConfigMap

如需将 ConfigMap 用于您的工作负载,您可以指定引用 ConfigMap 值的环境变量,或者装载包含 ConfigMap 的卷。 如需了解详情,请参阅配置 Pod 以使用 ConfigMap

后续步骤