K8S中ConfigMap的简单应用

159 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。​​​​​​​​​​​ ​

ConfigMap主要用于存储一些我们实际应用中的一些配置,将配置信息保存到etcd中,然后以变量或者volume挂载到容器中来使用这些配置信息。

  • 以volume挂载形式应用配置信息(以redis的配置为例)
  1. 创建配置文件
[root@k8smaster ~]# cat redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

2.创建ConfigMap

[root@k8smaster ~]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created

3.查看已创建好的configmap

[root@k8smaster ~]# kubectl get cm
NAME           DATA   AGE
redis-config   1      31s

 4.查看cm的详细信息

[root@k8smaster ~]# kubectl describe cm redis-config

 5.创建pod的yaml文件

[root@k8smaster ~]# cat cm.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: redis-config     #前面创建的configmap名称
  restartPolicy: Never

 6.执行yaml创建pod

[root@k8smaster ~]# kubectl apply -f cm.yaml
pod/mypod created

 7.查看pod

[root@k8smaster ~]# kubectl get pod
NAME                      READY   STATUS      RESTARTS   AGE
mypod                     0/1     Completed   0          1h

8.查看pod的log中打印的配置信息

[root@k8smaster ~]# kubectl logs mypod

  • 以变量形式应用到pod中

 1.创建包含配置信息(变量)的yaml文件

[root@k8smaster ~]# cat myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

2.基于yaml创建ConfigMap

[root@k8smaster ~]# kubectl apply -f myconfig.yaml
configmap/myconfig created

3.查看cm

[root@k8smaster ~]# kubectl get cm
NAME           DATA   AGE
myconfig       2      25s
redis-config   1      32m

4.查看cm详情

 5.创建pod的yaml文件

[root@k8smaster ~]# cat config-var.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myconfigpod
spec:
  containers:
    - name: configbusybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig              #前面创建的configmap的名称
              key: special.level          #configmap中的配置文件里的变量key
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never

6.创建pod

[root@k8smaster ~]# kubectl apply -f config-var.yaml
pod/myconfigpod created

7.查看pod

[root@k8smaster ~]# kubectl get pod
NAME                      READY   STATUS      RESTARTS   AGE
myconfigpod               0/1     Completed   0          1h
mypod                     0/1     Completed   0          1h

8.查看pod的log可以看到pod中要执行的任务打印出的引用配置信息

[root@k8smaster ~]# kubectl logs myconfigpod

从上面两种应用方式可以看出,我们创建的configmap方式是不同的,在pod中引用key的方式也不同。