ConfigMap
PPG007 ... 2022-4-11 About 2 min
# ConfigMap
ConfigMap 允许将配置文件与镜像文件分离。
# 使用 kubectl 创建 ConfigMap
执行下面的命令可以在指定名称空间创建一个 ConfigMap:
kubectl create configmap application-config --from-file=application.toml -n example
1
其中 application-config 是这个 ConfigMap 的名字,from-file 可以是单个文件也可以是目录,--from-env-file
参数可以从环境文件创建 ConfigMap,环境文件每一行必须是 k=v 的格式,如果使用了多个 --from-env-file
参数,只有最后一个环境文件会生效。
使用 --from-file
参数时,可以使用下面这种形式自定义键名取代默认使用文件名的行为:
kubectl create configmap application-config --from-file=key=application.toml -n example
1
--from-literal
参数可以通过直接在命令中指定字面量来创建 ConfigMap。
# 配置文件创建
使用下面的配置文件可以创建一个 ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: application-config
namespace: example
data:
application.toml: |
[mysql]
url = "mysql://localhost:3306"
username = "root"
password = "123456"
[mongodb]
url = "mongo://localhost:27017"
username = "mongo"
password = "654321"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 使用 ConfigMap 定义 Pod 环境变量
# 使用单一 ConfigMap
创建下面的这个 Deployment 并将一个 ConfigMap 挂载进去:
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-demo
namespace: example
spec:
selector:
matchLabels:
app: volume-demo
replicas: 2
template:
metadata:
labels:
app: volume-demo
spec:
imagePullSecrets:
- name: myali-docker
containers:
- name: volume-demo
image: registry.cn-qingdao.aliyuncs.com/ppg007/volume-demo:2.0
imagePullPolicy: Always
env:
- name: DEMO_ENV
valueFrom:
configMapKeyRef:
name: application-config
key: application.toml
ports:
- containerPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 使用多个 ConfigMap
下面的 Deployment 使用了两个 ConfigMap:
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-demo
namespace: example
spec:
selector:
matchLabels:
app: volume-demo
replicas: 2
template:
metadata:
labels:
app: volume-demo
spec:
imagePullSecrets:
- name: myali-docker
containers:
- name: volume-demo
image: registry.cn-qingdao.aliyuncs.com/ppg007/volume-demo:2.0
imagePullPolicy: Always
env:
- name: DEMO_ENV
valueFrom:
configMapKeyRef:
name: application-config
key: application.toml
- name: USERNAME
valueFrom:
configMapKeyRef:
name: cm2
key: username
- name: PASSWORD
valueFrom:
configMapKeyRef:
name: cm2
key: password
volumeMounts:
- name: application
mountPath: /root/configuration
ports:
- containerPort: 8080
volumes:
- name: application
nfs:
server: master
path: /nfs/data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 将 ConfigMap 中的所有键值对配置为容器环境变量
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-demo
namespace: example
spec:
selector:
matchLabels:
app: volume-demo
replicas: 2
template:
metadata:
labels:
app: volume-demo
spec:
imagePullSecrets:
- name: myali-docker
containers:
- name: volume-demo
image: registry.cn-qingdao.aliyuncs.com/ppg007/volume-demo:2.0
imagePullPolicy: Always
envFrom:
- configMapRef:
name: cm2
ports:
- containerPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 将 ConfigMap 中的数据添加到卷
apiVersion: apps/v1
kind: Deployment
metadata:
name: volume-demo
namespace: example
spec:
selector:
matchLabels:
app: volume-demo
replicas: 2
template:
metadata:
labels:
app: volume-demo
spec:
imagePullSecrets:
- name: myali-docker
containers:
- name: volume-demo
image: registry.cn-qingdao.aliyuncs.com/ppg007/volume-demo:2.0
imagePullPolicy: Always
envFrom:
- configMapRef:
name: cm2
volumeMounts:
- name: application
mountPath: /root/configuration
- name: config-volume
mountPath: /etc/config
ports:
- containerPort: 8080
volumes:
- name: application
nfs:
server: master
path: /nfs/data
- name: config-volume
configMap:
name: cm2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
上面的配置文件会在 /etc/config 目录中创建 cm2 ConfigMap 中的每个键值对,键为文件名,文件内容为值。这种方式中,/etc/config 目录中原有内容会被清除。