跳转至

configmap 读取文件

ConfigMap用于保存配置。既可以保存为键值对格式,也可是保存为配置文件。可以在Pod的环境变量配置直接引用config map的值。或者是在数据卷(volume)中引用config map,把config map中的内容以文件形式放在volume中。

上一篇中我们通过from-literal=key1=config1的方式创建configmap,并在容器中通过变量映射的方式使用。本篇讲下--from-file--from-env-file的用法,并通过volume的方式映射为容器内的configmap文件。

一、帮助信息

通过 kubectl create configmap -h 的帮助信息,我们可以获取到以下configmap的配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Examples:
  # Create a new configmap named my-config based on folder bar
  kubectl create configmap my-config --from-file=path/to/bar

  # Create a new configmap named my-config with specified keys instead of file basenames on disk
  kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt

  # Create a new configmap named my-config with key1=config1 and key2=config2
  kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

  # Create a new configmap named my-config from the key=value pairs in the file
  kubectl create configmap my-config --from-file=path/to/bar

  # Create a new configmap named my-config from an env file
  kubectl create configmap my-config --from-env-file=path/to/bar.env

从这里可以看到--from-file 可以指定一个有多个文件的目录,也可以是多个单文件,通过指定不同的key来映射对应的文件。除此之外,其还有--from-env-file一样的用法,对应的文件里使用k/v 健值对的方式存相关变量信息。

二、volume方式挂载单个配置文件

1. 创建配置文件

1
2
3
4
5
6
#创建一个配置文件 (假设是redis)
cat > redis.properties <<EOF
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
EOF

2. 创建confimap

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#获取yaml
[root@test-64626 ~]# kubectl create configmap redis-config --from-file=redis.properties -o yaml --dry-run=client > redis-config-configmap.yaml
[root@test-64626 ~]# more redis-config-configmap.yaml
apiVersion: v1
data:
  redis.properties: |
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: redis-config

3. 部署

1
kubectl create -f redis-config-configmap.yaml

4. 查看详细信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@test-64626 ~]# kubectl describe configmap redis-config
Name:         redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

Events:  <none>

5. 创建pod并添加挂载

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建pod,并打印volume挂载后的文件信息
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:              #指定为configmap文件
        name: redis-config      #刚才创建的redis-config的cm文件
  restartPolicy: Never

#部署
kubectl create -f cm.yaml

6. 查看容器信息

1
2
3
4
5
6
7
8
# Completed表示完成并退出,因为这里只执行了cat文件,所以完成就退出了
[root@test-64626 ~]# kubectl get pods
NAME                 READY   STATUS      RESTARTS   AGE
mypod                0/1     Completed   0          22s
[root@test-64626 ~]# kubectl logs mypod
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

同样的方法,还可以用于更新/etc/nginx/conf.d目录下的虚拟配置文件。

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))