ConfigMap
1. 创建
1.1. 通过kubectl命令行创建
1.1.1. --from-file参数从文件中进行创建
# kubectl create configmap NAME --from-file=[key=]source --from-file=[key=]source
kubectl create configmap application.yml --from-file=server.xml
其中key=是可选的,默认key就是文件名,通过key=可以指定key。
1.1.2. --from-file参数从目录中进行创建
目录下每个配置文件名都被设置为key,文件的内容设成为value,语法如下:
# kubectl create configmap NAME --from-file=config-files-dir
kubectl create configmap spring-config --from-file=/etc/config
1.1.3. --from-literal直接指定key=value
kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2
1.2. 通过yaml文件创建
指定key,value形式
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-appvars
data:
apploglevel: info
appdatadir: /var/data
指定配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-configfiles
data:
application.yml: |
server:
port: 8081
spring:
profiles:
active: prod
2. 使用
容器应用对configMap使用有以下两种方法
- 通过环境变量获取configMap中的内容
- 通过volume挂载的方式将configmap中的内容挂载为容器内部的文件或目录
2.1. 通过环境变量方式使用
创建configMap
kubectl create configmap active-profile --from-literal=active_profile=prod
定义Pod并引用configMap
apiVersion: v1
kind: Pod
metadata:
name: spring-k8s-test
spec:
containers:
- name: spring-test
image: kimb88/hello-world-spring-boot
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: active-profile
查看容器环境变量
root@spring-k8s-test:/usr/local/tomcat# echo $active_profile
prod
2.1.1. spring配置文件使用环境变量
在spring中可以通过${key:defaultValue}的方式直接引用系统的环境变量
server:
port: 8080
spring:
profiles:
active: ${active_profile}
2.2. 通过volumeMount方式使用
apiVersion: v1
kind: Pod
metadata:
name: spring-k8s-test
spec:
containers:
- name: spring-test
image: kimb88/hello-world-spring-boot
ports:
- containerPort: 8080
volumeMounts:
- name: application-prod # 引用volume名称
mountPath: /etc/config # 挂载到容器内目录
volumes:
- name: application-prod
configMap:
name: spring-configfiles
items:
- key: application.yml # 配置项key
path: application.yml # 配置项value的内容将生成到名称application.yml的文件中
如果不指定items,则使用volumeMount方式在容器内的目录为每个item都生成一个文件名为key的文件。
root@spring-k8s-test:/usr/local/tomcat# ls /etc/config
application.yml
root@spring-k8s-test:/usr/local/tomcat# cat /etc/config/application.yml
server:
port: 8081
spring:
profiles:
active: prod
2.3. 限制
- configMap必须在pod之前创建,Pod才能引用
- 如果Pod使用envFrom基与configMap定义的环境变量,则无效的环境变量名称将被忽略,并在事件中被记录为InvalidVariableNames
- configMap受命名空间限制,只有处于相同命名空间中的Pod才可以引用它
- configMap无法用于静态Pod