1、ConfigMap介绍
ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制,
ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象 。
2、ConfigMap的创建
ConfigMap允许您将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性。使用 kubectl create configmap 或 ConfigMap 生成器来创建ConfigMap。
kubectl create configmap <map-name> <data-source>
其中,<map-name>是要分配给ConfigMap的名称,<data-source> 是要从中提取数据的目录,文件或者文字值。
数据源对应于 ConfigMap 中的 key-value (键值对)
key = 命令行上提供的文件名或者密钥
value = 命令行上提供的文件内容或者文字值
使用kubectl describe或者 kubectl get检索有关ConfigMap的信息。
1)根据目录创建ConfigMap
[root@k8smaster test]# pwd
/root/test
[root@k8smaster test]# ls -lrt
total 8
-rw-r--r-- 1 root root 12 Feb 18 17:36 zimu.properties
-rw-r--r-- 1 root root 38 Feb 18 17:37 kemu.properties
[root@k8smaster test]# more zimu.properties
A=1
B=2
C=3
[root@k8smaster test]# more kemu.properties
kemu1=shuxue
kemu2=yuwen
kemu3=yingyu
[root@k8smaster test]#
[root@k8smaster test]# kubectl create configmap mulu --from-file=/root/test #from-file指定在目录下的所有文件都会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容
configmap/mulu created
[root@k8smaster test]# kubectl get configmap
NAME DATA AGE
mulu 2 16s
[root@k8smaster test]# kubectl describe configmap mulu
Name: mulu
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
kemu.properties:
----
kemu1=shuxue
kemu2=yuwen
kemu3=yingyu
zimu.properties:
----
A=1
B=2
C=3
Events: <none>
[root@k8smaster test]#
2)根据文件创建ConfigMap
[root@k8smaster test]# kubectl create configmap wenjian --from-file=/root/test/zimu.properties #from-file参数可以使用多次,效果就跟指定整个目录是一样的
configmap/wenjian created
[root@k8smaster test]# kubectl get configmap
NAME DATA AGE
mulu 2 12m
wenjian 1 9s
[root@k8smaster test]# kubectl describe configmap wenjian
Name: wenjian
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
zimu.properties:
----
A=1
B=2
C=3
Events: <none>
[root@k8smaster test]#
3)根据文字值创建 ConfigMap
kubectl create configmap 与 --from-literal 参数一起使用,从命令行定义文字值
[root@k8smaster test]# kubectl create configmap canshu --from-literal=A=1 --from-literal=B=2 #from-literal参数传递配置信息,该参数可以使用多次
configmap/canshu created
[root@k8smaster test]# kubectl get configmap
NAME DATA AGE
canshu 2 9s
mulu 2 16m
wenjian 1 4m36s
[root@k8smaster test]# kubectl describe configmap canshu
Name: canshu
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
A:
----
1
B:
----
2
Events: <none>
[root@k8smaster test]#
3、Pod的创建
1)使用 ConfigMap 来替代环境变量
[root@k8smaster test]# more env.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: env-name
data:
env.name: javahome
env.type: java
[root@k8smaster test]# kubectl create -f env.yaml
configmap/env-name created
[root@k8smaster test]# kubectl get configmap -o yaml
apiVersion: v1
items:
- apiVersion: v1
data:
env.name: javahome
env.type: java
kind: ConfigMap
metadata:
creationTimestamp: "2020-02-18T14:20:59Z"
name: env-name
namespace: default
resourceVersion: "708005"
selfLink: /api/v1/namespaces/default/configmaps/env-name
uid: e7921366-ef80-4399-9758-349861e55118
kind: List
metadata:
resourceVersion: ""
selfLink: ""
[root@k8smaster test]#
[root@k8smaster test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
env-pod 0/1 Completed 0 80s
[root@k8smaster test]#
[root@k8smaster test]# more env-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: env-pod
spec:
containers:
- name: env-pod-ctn
image: 192.168.23.100:5000/tomcat:v2
command: ["/bin/bash","-c","env"]
env:
- name: JAVA_HOME
valueFrom:
configMapKeyRef:
name: env-name
key: env.name
- name: JAVA_TYPE
valueFrom:
configMapKeyRef:
name: env-name
key: env.type
restartPolicy: Never
[root@k8smaster test]# kubectl create -f env-pod.yaml
pod/env-pod created
[root@k8smaster test]# kubectl logs env-pod|grep java
JAVA_HOME=javahome
JAVA_TYPE=java
[root@k8smaster test]#
2)通过数据卷插件使用ConfigMap
[root@k8smaster test]# more env.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: env-name
data:
env.name: javahome
env.type: java
[root@k8smaster test]# more env-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: volume-pod-ctn
image: 192.168.23.100:5000/tomcat:v2
volumeMounts:
- name: config-volume
mountPath: /tmp/config
volumes:
- name: config-volume
configMap:
name: env-name
restartPolicy: Never
[root@k8smaster test]# kubectl create -f env-volume.yaml
pod/volume-pod created
[root@k8smaster test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
volume-pod 1/1 Running 0 8s
[root@k8smaster test]# kubectl exec -it volume-pod -- /bin/bash
root@volume-pod:/usr/local/tomcat# cd /tmp/config/
root@volume-pod:/tmp/config# ls -lrt
total 0
lrwxrwxrwx 1 root root 15 Feb 18 16:05 env.type -> ..data/env.type
lrwxrwxrwx 1 root root 15 Feb 18 16:05 env.name -> ..data/env.name
root@volume-pod:/tmp/config# more env.name
javahome
root@volume-pod:/tmp/config# more env.type
java
root@volume-pod:/tmp/config#
3)修改 ConfigMap
[root@k8smaster test]# kubectl edit configmap env-name
configmap/env-name edited
[root@k8smaster test]# kubectl exec -it volume-pod -- /bin/bash
root@volume-pod:/tmp/config# pwd
/tmp/config
root@volume-pod:/tmp/config# ls -lrt
total 0
lrwxrwxrwx 1 root root 15 Feb 18 16:05 env.type -> ..data/env.type
lrwxrwxrwx 1 root root 15 Feb 18 16:05 env.name -> ..data/env.name
root@volume-pod:/tmp/config# more env.type
java1
root@volume-pod:/tmp/config# more env.name
javahome1
root@volume-pod:/tmp/config#