概念
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将环境配置信息和容器镜像解耦,便于应用配置的修改,官网建议保存的数据大小不超过1MiB,超过1Mib的数据建议使用存储卷存储。
使用
四种方式来使用 ConfigMap 配置 Pod 中的容器:
- 在容器命令和参数内
- 容器的环境变量
- 在只读卷里面添加一个文件,让应用来读取
- 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap
示例:
官网实例
创建ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:name: game-demonamespace: test
data:# 类属性键;每一个键都映射到一个简单的值player_initial_lives: "3"ui_properties_file_name: "user-interface.properties"# 类文件键game.properties: |enemy.types=aliens,monstersplayer.maximum-lives=5 user-interface.properties: |color.good=purplecolor.bad=yellowallow.textmode=true
也可以通过命令指定将某个文件内同容写入ConfigMap
#创建configMap帮助
kubectl create configmap --help#创建configMap
kubectl create configmap <name> -n test --from-file=<fileName>
使用configMap
apiVersion: v1
kind: Pod
metadata:name: configmap-demo-podnamespace: test
spec:containers:- name: demoimage: alpinecommand: ["sleep", "3600"]env:# 定义环境变量- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的valueFrom:configMapKeyRef:name: game-demo # 这个值来自 ConfigMapkey: player_initial_lives # 需要取值的键- name: UI_PROPERTIES_FILE_NAMEvalueFrom:configMapKeyRef:name: game-demokey: ui_properties_file_namevolumeMounts:- name: configmountPath: "/config"readOnly: truevolumes:# 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中- name: configconfigMap:# 提供你想要挂载的 ConfigMap 的名字name: game-demo# 来自 ConfigMap 的一组键,将被创建为文件items:- key: "game.properties"path: "game.properties"- key: "user-interface.properties"path: "user-interface.properties"