ConfigMap主要用于存储一些我们实际应用中的一些配置,将配置信息保存到etcd中,然后以变量或者volume挂载到容器中来使用这些配置信息。
- 以volume挂载形式应用配置信息(以redis的配置为例)
- 创建配置文件
[root@k8smaster ~]# cat redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
2.创建ConfigMap
[root@k8smaster ~]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
3.查看已创建好的configmap
[root@k8smaster ~]# kubectl get cm
NAME DATA AGE
redis-config 1 31s
4.查看cm的详细信息
[root@k8smaster ~]# kubectl describe cm redis-config
5.创建pod的yaml文件
[root@k8smaster ~]# cat cm.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: redis-config #前面创建的configmap名称
restartPolicy: Never
6.执行yaml创建pod
[root@k8smaster ~]# kubectl apply -f cm.yaml
pod/mypod created
7.查看pod
[root@k8smaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 0/1 Completed 0 1h
8.查看pod的log中打印的配置信息
[root@k8smaster ~]# kubectl logs mypod
- 以变量形式应用到pod中
1.创建包含配置信息(变量)的yaml文件
[root@k8smaster ~]# cat myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
2.基于yaml创建ConfigMap
[root@k8smaster ~]# kubectl apply -f myconfig.yaml
configmap/myconfig created
3.查看cm
[root@k8smaster ~]# kubectl get cm
NAME DATA AGE
myconfig 2 25s
redis-config 1 32m
4.查看cm详情
5.创建pod的yaml文件
[root@k8smaster ~]# cat config-var.yaml
apiVersion: v1
kind: Pod
metadata:
name: myconfigpod
spec:
containers:
- name: configbusybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
env:
- name: LEVEL
valueFrom:
configMapKeyRef:
name: myconfig #前面创建的configmap的名称
key: special.level #configmap中的配置文件里的变量key
- name: TYPE
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never
6.创建pod
[root@k8smaster ~]# kubectl apply -f config-var.yaml
pod/myconfigpod created
7.查看pod
[root@k8smaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myconfigpod 0/1 Completed 0 1h
mypod 0/1 Completed 0 1h
8.查看pod的log可以看到pod中要执行的任务打印出的引用配置信息
[root@k8smaster ~]# kubectl logs myconfigpod
从上面两种应用方式可以看出,我们创建的configmap方式是不同的,在pod中引用key的方式也不同。