许多应用程序需要使用配置文件、命令行参数和环境变量的某种组合进行配置。在 OpenShift Container Platform 中,这些配置工件与镜像内容分离,以保持容器化应用程序的可移植性。
ConfigMap
对象提供了一种机制,可以在容器中注入配置数据,同时保持容器与 OpenShift Container Platform 的无关性。ConfigMap 可用于存储细粒度信息(如单个属性)或粗粒度信息(如整个配置文件或 JSON 块)。
ConfigMap
对象保存配置数据的键值对,这些数据可以在 Pod 中使用,或用于存储系统组件(如控制器)的配置数据。例如:
ConfigMap
对象定义
kind: ConfigMap
apiVersion: v1
metadata:
creationTimestamp: 2016-02-18T19:14:38Z
name: example-config
namespace: my-namespace
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)
1 |
包含配置数据。 |
2 |
指向包含非 UTF-8 数据的文件,例如二进制 Java 密钥库文件。输入 Base 64 中的文件数据。 |
|
从二进制文件(例如图像)创建 ConfigMap 时,可以使用binaryData 字段。
|
配置数据可以通过多种方式在 Pod 中使用。ConfigMap 可用于:
-
填充容器中的环境变量值
-
设置容器中的命令行参数
-
填充卷中的配置文件
用户和系统组件可以在 ConfigMap 中存储配置数据。
ConfigMap 类似于 Secret,但设计得更方便地支持处理不包含敏感信息的字符串。
ConfigMap 限制
必须先创建 ConfigMap,然后才能在 Pod 中使用其内容。
控制器可以编写为容忍缺少配置数据。针对个案,咨询使用 ConfigMap 配置的各个组件。
Kubelet 只支持将 ConfigMap 用于从 API 服务器获取的 Pod。
这包括使用 CLI 创建的任何 Pod,或间接来自复制控制器的 Pod。它不包括使用 OpenShift Container Platform 节点的--manifest-url
标志、其--config
标志或其 REST API 创建的 Pod,因为这些不是创建 Pod 的常用方法。