k8s的存储(ConfigMap使用)

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# 


 

发布了60 篇原创文章 · 获赞 20 · 访问量 4607

猜你喜欢

转载自blog.csdn.net/zhaikaiyun/article/details/104475145