应用部署应该将应用的配置信息与程序分离,这样可以让应用程序被更好地复用。将应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在创建容器时进行配置注入。
之前接触的nacos充当注册中心,也可以存放配置文件。最近了解 configmap。
1.Configmap的用法包括:
①生成容器内的环境变量
②设置容器启动命令的启动参数
③以volume的形式挂载为容器内部的文件或目录
2.形式:Key: value
3.创建: yaml文件, kubectl create configmap
eg:kubectl create -f *.yaml
eg:
从文件中创建,可以指定key的名称
kubectl create configmap name —from-file=[key=]source
—from-file=[key=]source
在目录下创建,每个配置文件名为key,文件内容为value
kubectl create configmap name —from-file=config-files-die
从文本中创建,直接指定key和value的内容
kubectl create configmap name —from-literal=key1=value1 —from-literal=key2=value2
其他命令:
查看创建好的configmap:
kubectl get configmap
kubectl describe configmap *
kubectl get configmap * -o yaml
4.将两个配置文件定义为configmap:
data:
key-serverxml:***
key-loggingproperties
5. 在pod中使用configmap:
1⃣️通过环境变量方式
在pod的定义中,将configmap中的内容以环境变量方式设置为容器内部的环境变量,客器的启动命令将显示这两个环境变量的值。
Spec:
-name:环境变量的名称
valueFrom:
configMapKeyRef:
name:configmap名
key:
-name:
k8s1.6版本pod配置文件:
spec:
envFrom:
- configMapRef
name:
环境变量的名称受POSIX命名规范[a-zA-Z_][a-zA-Z0-9_]*约束,不能以数字开头。
注:如果包含非法字符,则系统将跳过该条环境变量的创建,并记录一个event来提示无法生成,但并不阻止pod的启动。
2⃣️通过volumeMount
将configmap中的内容以文件的形式挂载到容器内部的/configfiles目录下
Spec:
containers:
volumeMounts:
- name:serverxml #引用volume的名称
mountPath: /configfiles #挂载到容器内的目录
volumes:
- name: serverxml #定义volume的名称
configMap:
name:
items:
-key: #key=
path: server.xml #value将server.xml文件名进行挂载
-key:
path:logging.properties
不指定items,为每个item都生成一个文件名为key的文件,pod配置文件:
spec:
containers:
volumeMounts:
- name: #引用volume的名称
mountPath: /configfiles #挂载到容器内的目录
volumes:
- name: #引用volume的名称
configMap:
name:
6. 使用 configmap的限制条件:
Configmap必须在pod之前创建,pod才能引用;
如果pod使用 envFrom基于configmap定义环境变量,则无效的环境变量名称(如以数字开头)将被忽略,并在事件中被记录为InvalidVariableNames;
受命名空间限制;
无法用于静态pod