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