ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。
ConfigMap中的数据是明文保存的
使用 ConfigMap 来将你的配置数据和应用程序代码分开。
可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:
这些不同的方法适用于不同的数据使用方式。 对前三个方法,kubelet 使用 ConfigMap 中的数据在 Pod 中启动容器。
第四种方法意味着必须编写代码才能读取 ConfigMap 和它的数据。然而, 由于你是直接使用 Kubernetes API,因此只要 ConfigMap 发生更改, 你的应用就能够通过订阅来获取更新(watch技术实现),并且在这样的情况发生的时候做出反应。 通过直接进入 Kubernetes API,这个技术也可以让你能够获取到不同的名字空间里的 ConfigMap。但是缺点也是同样明显,增加ApiServer和ETCD数据库的压力
apiVersion: v1
kind: ConfigMap
metadata:
name: erp-config
data:
# 属性键;每一个键都映射到一个简单的值
host_name: "erp_server"
apiVersion: v1
kind: Pod
metadata:
name: configmap-erp-pod
spec:
containers:
- name: erp-server
image: xxxxxx/erp-server:1.0.1.20210912
command: ["echo", "${host_name}"]
env:
# 定义环境变量
- name: ENV_PROPERTIES # 请注意这里和 ConfigMap 中的键名是不一样的
valueFrom:
configMapKeyRef:
name: erp-config # 这个值来自 ConfigMap
key: host_name # 需要取值的键
apiVersion: v1
kind: ConfigMap
metadata:
name: erp-config
data:
application_properties: "application.properties"
# 类文件键
application.properties: |
server.port=8081
server.context=/
apiVersion: v1
kind: Pod
metadata:
name: configmap-erp-pod
spec:
containers:
- name: erp-server
image: xxxxxx/erp-server:1.0.1.20210912
env:
# 定义环境变量
- name: APPLICATION_PROPERTIES
valueFrom:
configMapKeyRef:
name: erp-config
key: application_properties
volumeMounts:
- name: config
# 设置ConfigMap挂载到程序中的目录
mountPath: "/erp-server/config"
readOnly: true
volumes:
- name: config
configMap:
# 提供你想要挂载的 ConfigMap 的名字
name: erp-config
# 来自 ConfigMap 的一组键,将被创建为文件
items:
- key: "application.properties"
path: "application.properties"