如何在Pod中使用ConfigMap
容器应用对ConfigMap的使用有以下两种方法:通过环境变量获取ConfigMap中的内容通过volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录通过环境变量的方式使用ConfigMap:k8s 1.6版本开始,引入了envFrom字段,实现了在Pod环境中将ConfigMap中所有定义的key=value自动生成为环境变量:cat cm-appva...
容器应用对ConfigMap的使用有以下两种方法:
通过环境变量获取ConfigMap中的内容
通过volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录
通过环境变量的方式使用ConfigMap:
k8s 1.6版本开始,引入了envFrom字段,实现了在Pod环境中将ConfigMap中所有定义的key=value自动生成为环境变量:
cat cm-appvars.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
apploglevel: info
appdatadir: /var/data
cat cm-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-test-pod
spec:
containers:
- name: cm-test
image: busybox
command: ["/bin/sh","-c","env|grep APP"]
envFrom:
- configMapRef:
name: cm-appvars
restartPolicy: Never
通过这个定义,在容器内部将会生成如下环境变量:
apploglevel=info
appdatadir=/var/data
注意:环境变量的名称受POSIX命令规范约束,不能以数字开头,如果包含非法字符,则系统将跳过该条环境变量的创建,并记录Event来提示环境变量无法生成,但并不阻止Pod的启动。
通过 volumeMount 使用ConfigMap
apiVersion: v1
kind: Pod
metadata:
name: cm-test-app
spec:
containers:
- name: cm-test-app
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
volumeMounts:
- name: serverxml #引用Volume的名称
mountPath: /configfiles #挂载到容器内的目录
volumes:
- name: serverxml #定义Volume的名称
configMap:
name: cm-appconfigfiles #使用ConfigMap“cm-appconfigfiles”
items:
- key: key-serverxml #key=key-serverxml
path: server.xml #value将server.xml文件名进行挂载
- key: key-loggingproperties #key=key-loggingproperties
path: logging.properties #value将logging.properties文件名进行挂载
创建容器后,登录容器,查看到在/configfiles 目录下存在server.xml和logging.properties文件,它们的内容就是ConfigMap“cm-appconfigfiles”中两个key定义的内容。
k exec -it cm-test-app /bin/bash
如果在引用ConfigMap时不指定items,则使用volumeMount方式在容器内的目录下为每个item都生成一个文件名以key开头的文件。
使用ConfigMap 的限制条件
configmap必须在Pod之前创建。
configmap受namespace限制,只有处于相同namespace中的pod才可以引用它。
configmap中的配额管理还未能实现。
kubelet只支持可以被API Server管理的Pod使用ConfigMap。kebelet在本地node上通过--manifest-url或--config自动创建的静态pod将无法引用configmap。
在pod对configmap进行挂载(volumeMount)操作时,在容器内部只能挂载为“目录”,无法挂载为“文件”。在挂载到容器内部后,在目录下将包含configmap定义的每个item,如果在该目录下原来还有其他文件,则容器内的目录将被挂载的configmap覆盖。如果应用程序需要保留原来的其他文件,则需要进行额外的处理。可以将configmap挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接到(cp 或 link 命令)应用所用的实际配置目录下。
更多推荐
所有评论(0)