configMap 使用方法
什么是configMap
configmap 是将配置和应用程序分离的最佳实践, 这样可以使应用程序更好的被复用,通过不同的配置实现更加灵活的功能, 可以通过环境变量方式和volume挂载方式使用.
使用configMap
通过yaml文件创建 , 示例 : cm-appvars.yaml
1 |
|
创建configMap
1 |
|
通过命令行创建
不使用yaml文件, 直接通过 kubectl create configmap
创建 可以使用参数 --from-file
--from-literal
指定内容, 并且可以在一行命令中指定多个参数
1 |
|
1 |
|
获取configMap内容
获取方式有两种
- 通过环境变量获取内容
- 通过vloume挂载的方式将configmap挂载到容器指定的内部文件或目录进行读取
通过环境变量获取
指定字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20apiVersion: v1
kind: pod
metadata:
name: test-pod
spec:
containers:
- name: test
image: busybox
command: [ "/bin/bash","-C","env|grep app" ]
env:
- name: appv1 #定义环境变量的名字
valueForm:
configMapKeyRef:
name: cm-appvars #环境变量取指来自 cm-appvars
key: appv1 # cm-appvars的key
- name: appv2 #定义环境变量名字
valueFrom:
configMapKeyRef:
name: cm-appvars #环境变量取指来自 cm-appvars
key: appv2 # cm-appvars的keyenvFrom 将configmap中的所有key-value 自动生成环境变量
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
38apiVersion: v1
kind: pod
metadata:
name: test-pod
spec:
containers:
- name: test
image: busybox
command: [ "/bin/bash","-C","env|grep app" ]
envFrom:
- configMapRef:
name: cm-appvars #根据cm-appvars中的所有key-value 生成变量
```
通过vloume挂载方式获取
* items参数
```bash
xxxxxxx
spec:
containres:
- name: test
image: busybox
command: [ "/bin/bash","-C","env|grep app" ]
volumeMount:
- name: serverconfig #引用vloume的名称
mountPath: /config #挂载到容器config下面
volumes:
- name: serverconfig #定义vloume的名称
configMap:
name: cm-appvars #引用那个map
items:
- key: appv1
path: alias-appv1 #将appv1 挂载为alias-appv1
- key: appv2
path: alias-appv2 #将appv2 挂载为alias-appv2
## 会生成 alias-appv2 alias-appv2 等文件不指定items, 则为每一个itesm生成一个文件名为key的文件
1
2
3
4
5
6
7
8
9volumeMount:
- name: serverconfig #引用vloume的名称
mountPath: /config #挂载到容器config下面
volumes:
- name: serverconfig #定义vloume的名称
configMap:
name: cm-appvars #引用那个map
## 会生成 appv1 appv2 等文件
使用configMap的限制条件
- configMap必须在pod之前创建, pod才能引用它
- 如果pod使用envForm 来引用变量, 则无效的环境变量(比如数字开头)将会被忽略, 并在事件中被记录为 InvalidVariableNames.
- configMap受命名中间影响,只有处于相同namespace下才能被引用
- configMap 无法用于静态pod
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!