本页面介绍了 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.properties
和 ui.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。