ConfigMaps允许您将配置构件与映像内容解耦,以保持容器化应用程序的可移植性。
创建configmap
1.configmap的yaml文件 myconfigmap.yaml,该文件包含两个configmap,以第一个configmap为例说明。special-config是该configmap的名称,default是该configmap所属的域名。该configmap仅包含一个数据special.how,值是very.内容如下:
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very --- apiVersion: v1 kind: ConfigMap metadata: name: env-config namespace: default data: log_level: INFO
2.创建configmap,以下命令都可以
kubectl create -f myconfigmap.yaml kubectl create configmap gameconfig --from-file=myconfigmap.yaml -n test
第一行命令完全按照yaml文件中的设定来可以同时创建多个configmap;而第二条命令是gameconfig是新创建的configmap的名称,只能创建出一个configmap,其中包含多个数值,test是namespace. 正常会输出
configmap/gameconfig created
如果报错Error from server (NotFound): namespaces "test" not found则需要先创建该域名。
3.查看configmap,假设我们之前用kubectl create -f myconfigmap.yaml创建了configmap,那么查看结果如下
kubectl get configmap --all-namespaces kubectl describe configmap special-config
使用configmap中的数值来定义容器的环境变量
定义一个configmap数值,可以用如上的方法定义,也可以使用如下的命令:
kubectl create configmap special-config --from-literal=special.how=very
2.在Pod specification中,环境变量 SPECIAL_LEVEL_KEY 的值由configmap的special.how来定义,同样的也可以使用多个configmap中多个值来定义多个环境变量。pod yaml文件 configmap-pod.yaml 如下所示:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: LOG_LEVEL valueFrom: configMapKeyRef: name: env-config key: log_level restartPolicy: Never
然后创建Pod:
kubectl create -f configmap-pod.yaml
现在,Pod的启动输出了它所有的环境变量其中包括变量 SPECIAL_LEVEL_KEY=very 和 LOG_LEVEL=INFO