在一个pod里面使用ConfigMap大致有三种方式:
1. 命令行参数
2. 环境变量
3. 数据卷文件
创建configmap有两种方式
1. yaml文件创建
2. 通过kubectl命令行创建
最佳实践是通过yaml文件创建,这样能够达到svc、rc、configmap创建的统一,如果是文件,我们可以先通过命令行创建configmap,然后通过kubectl get configmap nginx-conf -o yaml
导出yaml文件。
创建configmap
很多应用程序的配置需要通过配置文件,命令行参数和环境变量的组合配置来完成。这些配置应该从image内容中解耦,以此来保持容器化应用程序的便携性。
ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernetes的。
ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
目录创建configmap
目录结果
[root@controller01 deployment]# ls confmap/ test1 test2 [root@controller01 deployment]# cat confmap/test2 key=456 [root@controller01 deployment]# cat confmap/test1 key=123
从目录创建
[root@controller01 deployment]# kubectl create configmap test-conf001 --from-file=confmap configmap "test-conf001" created
当
--from-file
指向目录的时候,每个在目录底下的所有文件会被用在ConfigMap里面创建一个键值对, 键的名字就是文件名,值就是文件的内容 。查看创建的configmap
[root@controller01 deployment]# kubectl describe configmap test-conf001 Name: test-conf001 Namespace: default Labels: <none> Annotations: <none> Data `====` test1: 8 bytes test2: 8 bytes
生成yaml文件
[root@controller01 deployment]# kubectl get configmap test-conf001 -o yaml apiVersion: v1 data: test1: | key=123 test2: | key=456 kind: ConfigMap metadata: creationTimestamp: 2017-06-21T08:52:02Z name: test-conf001 namespace: default resourceVersion: "2460831" selfLink: /api/v1/namespaces/default/configmaps/test-conf001 uid: e4ddf77f-565e-11e7-901f-6c92bf2e6e88
我们可以看到文件名对应的是一个key,value是文件内容
通过文件创建
- 创建
[root@controller01 deployment]# kubectl create configmap test-conf002 --from-file=keyone=confmap/test1 --from-file=keytwo=confmap/test2
configmap "test-conf002" created
- 查看
[root@controller01 deployment]# kubectl get configmap test-conf002 -o yaml
apiVersion: v1
data:
keyone: |
key=123
keytwo: |
key=456
kind: ConfigMap
metadata:
creationTimestamp: 2017-06-21T09:23:53Z
name: test-conf002
namespace: default
resourceVersion: "2464278"
selfLink: /api/v1/namespaces/default/configmaps/test-conf002
uid: 57c5470e-5663-11e7-901f-6c92bf2e6e88
通过命令行创建
--from-literal
选项采用了子面值 语法,这个语法允许字面值被直接运用到命令行。
1. 创建
[root@controller01 deployment]# kubectl create configmap test-conf003 --from-literal=aa=1 --from-literal=bb=2
configmap "test-conf003" created
You have new mail in /var/spool/mail/root
2. 查看
[root@controller01 deployment]# kubectl get configmap test-conf003 -o yaml
apiVersion: v1
data:
aa: "1"
bb: "2"
kind: ConfigMap
metadata:
creationTimestamp: 2017-06-21T09:36:26Z
name: test-conf003
namespace: default
resourceVersion: "2465633"
selfLink: /api/v1/namespaces/default/configmaps/test-conf003
uid: 1900baf0-5665-11e7-901f-6c92bf2e6e88