许多应用程序需要使用配置文件、命令行参数和环境变量的组合进行配置。在 OpenShift Dedicated 中,这些配置工件与镜像内容解耦,以保持容器化应用程序的可移植性。
ConfigMap
对象提供机制,可以在容器中注入配置数据,同时保持容器与 OpenShift Dedicated 的无关性。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 仅支持使用来自 API 服务器的 Pod 的 ConfigMap。
这包括使用 CLI 创建的任何 Pod,或间接从副本控制器创建的 Pod。它不包括使用 OpenShift Dedicated 节点的 `--manifest-url` 标志、`--config` 标志或其 REST API 创建的 Pod,因为这些不是创建 Pod 的常用方法。