0%

ConfigMap

ConfigMap 是用来以键值对(key-value)的方式存储非敏感信息。Pod可以通过环境变量、命令行参数或者卷挂载等方式使用ConfigMap.
ConfigMap 可以将环境配置与具体的应用程序进行解耦,这意味着可以提升应用的可移植性。
需要注意的是,ConfigMap没有加密功能。

如何写一个ConfigMap对象

下面是一个ConfigMap的对象示例:

1
2
3
4
5
6
7
8
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-demo
data:
debug: enable
index.html: |
hello, world

ConfigMap 处理每个API对象都有的apiVersionkindmetadata,但是没有spec字段。 ConfigMap提供了两个字段databinaryData来存储配置数据。
data: 存储配置数据。 Value中只能包含UTF-8数据,非UTF-8的数据必须使用binaryData
binaryData: 存储二进制数据。

除此之外,还有一个字段immutable用来指定存储在ConfigMap中的数据是否可以被修改。
需要注意的是,同一个ConfigMap中,key是唯一的。在data中已经使用的key,就不能被binaryData使用,同理,在binaryData已使用的key,也不能在data中使用。

如何使用ConfigMap

Pod中的容器有四种方式来使用ConfigMap:

  1. 作为容器的entrypoint的命令行参数
  2. 容器的环境变量
  3. 只读的存储卷
  4. 在应用程序中通过调用Kubernetes API读取ConfigMap

下面是一个简单的示例, 该示例已上传的Github:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: demo
image: nginx
env:
# environment for container
- name: DEBUG
valueFrom:
configMapKeyRef:
name: configmap-demo
key: debug
volumeMounts:
# read-only volume
- name: config
mountPath: "/usr/share/nginx/html"
readOnly: true
volumes:
- name: config
configMap:
name: configmap-demo

结果:

  1. 验证Env

env

  1. 验证只读文件

volume