书籍来源:cloudman《每天5分钟玩转Kubernetes》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客
Secret可以为Pod提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用ConfigMap。
ConfigMap的创建和使用方式与Secret非常类似,主要的不同是数据以明文的形式存放。
与Secret一样,ConfigMap也支持四种创建方式:
(1)通过--from-literal:
kubectl create configmap myconfigmap --from-literal=config1=xxx--from-literal=config2=yyy
每个--from-literal对应一个信息条目。
(2)通过--from-file:
echo -n xxx > ./config1
echo -n yyy > ./config2
kubectl create configmap myconfigmap --from-file=./config1 --from-file=./config2
每个文件内容对应一个信息条目。
(3)通过--from-env-file:
cat << EOF > env.txt
config1=xxx
config2=yyy
EOF
kubectl create configmap myconfigmap --from-env-file=env.txt
文件env.txt中每行Key=Value对应一个信息条目。
(4)通过YAML配置文件,如下所示。文件中的数据直接以明文输入。
[root@k8s-master ~]# cat configMap.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap
data:
config1: xxx
config2: yyy
[root@k8s-master ~]#
与Secret一样,Pod也可以通过Volume或者环境变量的方式使用Secret。
(1)Volume方式如图10-17所示。
[root@k8s-master ~]# cat myconfigmap.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
configMap:
name: myconfigmap
[root@k8s-master ~]#
(2)环境变量方式如图所示。
[root@k8s-master ~]# cat myconfigmap-2.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
env:
- name: CONFIG_1
valueFrom:
configMapKeyRef:
name: myconfigmap
key: config1
- name: CONFIG_2
valueFrom:
configMapKeyRef:
name: myconfigmap
key: config2
[root@k8s-master ~]#
大多数情况下,配置信息都以文件形式提供,所以在创建ConfigMap时通常采用--from-file或YAML方式,读取ConfigMap时通常采用Volume方式。比如给Pod传递如何记录日志的配置信息,如下所示。
class: logging.handlers.RotatingFileHandler
formatter: precise
level: INFO
filename: %hostname-%timestamp.log
可以采用--from-file形式,将其保存在文件logging.conf中,然后执行命令:
kubectl create configmap myconfigmap --from-file=./logging.conf
如果采用YAML配置文件,其内容则如下所示。
[root@k8s-master ~]# cat myconfigmap-3.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap
data:
logging.conf: |
class: logging.handlers.RotatingFileHandler
formatter: precise
level: INFO
filename: %hostname-%timestamp.log
[root@k8s-master ~]#
注意,别漏写了Key logging.conf后面的|符号。
创建并查看ConfigMap,如图所示。
在Pod中使用此ConfigMap,配置文件如下所示。
[root@k8s-master ~]# cat mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; mount -o remount -rw /; sleep 30000
volumeMounts:
- name: foo
mountPath: "/etc/myapp"
volumes:
- name: foo
configMap:
name: myconfigmap
items:
- key: logging.conf
path: myapp/logging.conf
[root@k8s-master ~]#
① 在volume中指定存放配置信息的文件相对路径为myapp/logging.conf。
② 将volume mount到容器的/etc目录。
创建Pod并读取配置信息,如图所示。
配置信息已经保存到
/etc/myapp/myapp/logging.conf文件中。与Secret一样,Volume形式的ConfigMap也支持动态更新,留给大家自己实践。