第 15 章 创建和使用 ConfigMap
以下部分定义 ConfigMap 以及如何使用它们。
15.1. 了解 ConfigMap
许多应用程序需要使用配置文件、命令行参数和环境变量的某些组合来进行配置。在 OpenShift Container Platform 中,这些配置工件与镜像内容分离,以便使容器化应用程序可以移植。
ConfigMap 对象提供了向容器注入配置数据的机制,同时确保容器与 OpenShift Container Platform 无关。ConfigMap 可用于存储细粒度信息(如个别属性)或粗粒度信息(如完整配置文件或 JSON blob)。
ConfigMap API 对象包含配置数据的键值对,这些数据可在 Pod 中消耗或用于存储控制器等系统组件的配置数据。例如:
ConfigMap 对象定义
kind: ConfigMap apiVersion: v1 metadata: creationTimestamp: 2016-02-18T19:14:38Z name: example-config namespace: default data: 1 example.property.1: hello example.property.2: world example.property.file: |- property.1=value-1 property.2=value-2 property.3=value-3 binaryData: bar: L3Jvb3QvMTAw 2
从二进制文件(如镜像)创建 ConfigMap 时,您可以使用 binaryData
字段。
可以在 Pod 中以各种方式消耗配置数据。ConfigMap 可用于:
- 在容器中填充环境变量值
- 设置容器中的命令行参数
- 填充卷中的配置文件
用户和系统组件可以在 ConfigMap 中存储配置数据。
ConfigMap 与 secret 类似,但设计为能更加便捷地支持与不含敏感信息的字符串配合。
ConfigMap 限制
在 Pod 中可以消耗它的内容前,必须创建 ConfigMap。
可以编写控制器来容许缺少的配置数据。根据具体情况使用 ConfigMaps 配置各个组件。
ConfigMap 对象驻留在一个项目中。
它们只能被同一项目中的 Pod 引用。
Kubelet 只支持为从 API 服务器获取的 Pod 使用 ConfigMap。
这包括使用 CLI 创建或间接从复制控制器创建的所有 Pod。它不包括通过 OpenShift Container Platform 节点的 --manifest-url
标记、--config
标记,或通过 REST API 创建的 Pod,因为这些不是创建 Pod 的通用方法。