应用程序配置文件存储:ConfigMap

创建Confirmap后,数据是存储在K8s中etcd,然后通过创建Pod时引用该数据;

ConfigMap演示:

创建ConfigMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@pool1 k8s_yaml]# vi configmap-config.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
name: game-demo
data:
abc: "1" # 定义变量,用于Pod读取

game.properties: | # 挂载到Pod中得文件名
# 文件内容如下
enemy.types=aliens,monsters
player.maximum-lives=5
[root@pool1 k8s_yaml]# kubectl apply -f configmap-config.yaml
[root@pool1 k8s_yaml]# kubectl get cm
NAME DATA AGE
game-demo 2 23m
# DATA=2:表示文件中有两个数据,一个变量,一个文件

创建Pod

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
[root@pool1 k8s_yaml]# vi configmap-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- image: nginx
name: web
env: # 向Pod中定义变量
- name: Name
value: "ZuSir"
- name: ABC # Pod容器中得变量名
valueFrom:
configMapKeyRef:
name: game-demo
key: abc # configmap中得key名称
volumeMounts:
- mountPath: /configmp # 挂载到容器中得目录
name: test-volume
readOnly: true # 只读权限
volumes:
- name: test-volume
configMap:
name: game-demo # configmap名称
items:# 如果ConfigMap中有多个数据,就需要定义挂载那个数据到容器目录下,否则默认将所有数据都挂载目录下
- key: "game.properties" # configMap.data下得key名
path: "game.properties" # 挂载到容器得文件名

[root@pool1 k8s_yaml]# kubectl apply -f configmap-pod.yaml
[root@pool1 k8s_yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
configmap-pod 1/1 Running 0 10s

验证

1
2
3
4
5
6
7
8
9
[root@pool1 k8s_yaml]# kubectl exec -it configmap-pod -- bash
root@configmap-pod:/# echo $Name
ZuSir
root@configmap-pod:/# echo $ABC
1
root@cm-pod:/# cd configmp/
root@cm-pod:/configmp# ls
game.properties
# 成功读取变量以及文件挂载