k8s-configmap
一.目的
把应用的代码和配置分开,通过配置configmap管理pod,一种统一的集群配置管理方案。
ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernetes的。ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制等对象。
二.基本原理
ConfigMap是存储通用的配置变量的。ConfigMap有点儿像一个统一的配置文件,使用户可以将分布式系统中用于不同模块的环境变量统一到一个对象中管理;而它与配置文件的区别在于它是存在集群的“环境”中的,并且支持K8s集群中所有通用的操作调用方式。
而资源的使用者可以通过ConfigMap来存储这个资源的配置,这样需要访问这个资源的应用就可以同通过ConfigMap来引用这个资源。相当通过创建Configmap封装资源配置。
configmap以一个或者多个key:value的形式保存在k8s系统中供应用使用,既可以用于表示一个变量的值(eg.apploglevel:info),也可以用于表示一个完整配置文件的内容(eg: server.xml=<?xml...>...)
可以通过yaml配置文件或者直接用kubectl create configmap 命令行的方式来创建 ConfigMap。
三.ConfigMap 配置
可以通过建立ConfigMap来支持应用从环境变量和包含配置数据的文件读取信息,如下面例子了展示了configMap如何获得这两种配置的。
图片.png
data 一栏包括了配置数据。就如同你们看到的那样,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。
1.kubectl 命令行方式创建
(1) 从目录中创建
该目录中已经存在一些配置文件,而且目录中所有的文件都将作为configMap中的数据,一个文件为一个data。
key的名字为文件的名字,value为文件的内容。kubectl create configmap game-config --from-file=/opt/configmap/file/
[root@master file]# ls
game.properties ui.properties
[root@master file]# kubectl create configmap game-config --from-file=/opt/configmap/file/
[root@master file]# kubectl describe configmap game-config
Name: game-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties: 158 bytes
ui.properties: 83 bytes
通过kubectl get configmap game-config -o yaml
可以看到value的值。
(2) 从文件中创建
[root@master file]# kubectl create configmap game-config2 --from-file=/opt/configmap/file/game.properties --from-file=/opt/configmap/file/ui.properties
[root@master file]# kubectl describe configmap game-config2
Name: game-config2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties: 158 bytes
ui.properties: 83 bytes
(3) 从文本中创建,直接指定key的名字
[root@master file]# kubectl create configmap game-config-3 --from-file=game-special-key=/opt/configmap/file/game.properties
[root@master file]# kubectl describe configmap game-config-3
Name: game-config-3
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game-special-key: 158 bytes
(4) 从文字值(literal values)中创建
[root@master yaml]# kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
[root@master yaml]# kubectl get configmaps special-c