kubernetes中提供了一个叫configMap的概念,为的就是让镜像和配置文件之间解耦,不需要在镜像中打包配置文件,实现了镜像的灵活性,因为一个configMap就是一系列配置信息的集合,将来是可以直接注入到Pod中的容器供其使用。

你可以通过使用kubectl create configmap或者yaml方式来创建configMap。

命令格式:

  1. $ kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]

示例:

1.创建命令

  1. $ kubectl create configmap test-config --from-literal=Username=root --from-literal=Password=123456

2.结果如下data内容:

  1. [root@hdss7-21 ~]# kubectl get configmap test-config -o yaml
  2. apiVersion: v1
  3. data:
  4. Password: "123456"
  5. Username: root
  6. kind: ConfigMap
  7. metadata:
  8. creationTimestamp: "2020-03-27T12:25:59Z"
  9. name: test-config
  10. namespace: default
  11. resourceVersion: "98418"
  12. selfLink: /api/v1/namespaces/default/configmaps/test-config
  13. uid: 7ce2d3dd-6b0d-4fa2-bb09-0a353a3a137a

我们可以指定文件创建configmap,系统会自动将文件的内容写入到configmap的data字段里。

命令格式:

  1. $ kubectl create configmap NAME [--from-file=[key=]source]

示例:

1.db.properties文件内容

  1. db.user = root
  2. db.pwd = 123456
  3. db.host = 10.4.7.11
  4. db.port = 3306
  5. db.lib = devops

2.创建命令

  1. $ kubectl create configmap db-config --from-file=./db.properties

–from-file 可以有多个

3.结果如下data内容:

  1. [root@hdss7-21 ~]# kubectl get configmap db-config -o yaml
  2. apiVersion: v1
  3. data:
  4. db.properties: |
  5. db.user = root
  6. db.pwd = 123456
  7. db.host = 10.4.7.11
  8. db.port = 3306
  9. db.lib = devops
  10. kind: ConfigMap
  11. metadata:
  12. creationTimestamp: "2020-03-27T12:33:57Z"
  13. name: db-config
  14. namespace: default
  15. resourceVersion: "99103"
  16. selfLink: /api/v1/namespaces/default/configmaps/db-config
  17. uid: a3b76fd8-bf2d-483b-a455-eb4fb48450cb

注意:我们可以看到指定文件创建时ConfigMap会创建一个key/value键值对,key是文件名,value是文件内容。

如果我们不想configmap中的key为默认的文件名,还可以在创建时自己指定key名字:

  1. $ kubectl create configmap db-config --from-file=<key-name>=<path-to-file>

我们可以指定目录创建configmap,系统会自动将指定目录下的所有文件的内容写入到configmap的data字段里。

命令格式:

  1. $ kubectl create configmap NAME [--from-file=[key=]source]

示例:

1.查看文件内容

  1. [root@hdss7-21 ~]# echo "123" >config/a.ini
  2. [root@hdss7-21 ~]# echo "456" >config/b.ini

2.创建命令

  1. $ kubectl create configmap ab-config --from-file=./config

–from-file 可以有多个。

3.结果如下data内容:

  1. [root@hdss7-21 ~]# kubectl get configmap ab-config -o yaml
  2. apiVersion: v1
  3. data:
  4. a.ini: |
  5. 123
  6. b.ini: |
  7. 456
  8. kind: ConfigMap
  9. metadata:
  10. creationTimestamp: "2020-03-27T12:45:15Z"
  11. name: ab-config
  12. namespace: default
  13. resourceVersion: "100073"
  14. selfLink: /api/v1/namespaces/default/configmaps/ab-config
  15. uid: 0988dda0-c8b5-4944-ad16-cffba1d41bb3

注意:我们可以看到指定目录创建时ConfigMap内容中的各个文件会创建一个key/value键值对,key是文件名,value是文件内容。

指定目录时只会识别该目录下的文件,而忽略子目录。

1.创建cache-db-config.yaml文件

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: cache-db-config
  5. namespace: default
  6. data:
  7. redis.cnf: |
  8. redis.db = 3
  9. redis.host = 127.0.0.1
  10. redis.user = admin
  11. redis.pwd = admin123
  12. redis.port = 2379
  13. mysql.cnf: |
  14. mysql.db = devops
  15. mysql.host = 127.0.0.1
  16. mysql.user = root
  17. mysql.pwd = root123
  18. mysql.port = 3306

2.应用yaml

  1. $ kubectl apply -f cache-db-config.yaml

那么前面介绍如何创建ConfigMap,但是怎么使用尼?下面讲解

使用ConfigMap三种方式:

  • 第一种是通过环境变量的方式,直接传递给pod
    • 使用configmap中指定的key
    • 使用configmap中所有的key
  • 第二种是通过在pod的命令行下运行的方式(启动命令中)
  • 第三种是作为volume的方式挂载到pod内
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:1.11
  18. ports:
  19. - containerPort: 80
  20. env:
  21. - name: User # pod容器中的环境变量名字
  22. valueFrom:
  23. configMapKeyRef:
  24. name: test-config # configmap的名字
  25. key: Username # configmap中定义的key
  26. - name: Pwd
  27. valueFrom:
  28. configMapKeyRef:
  29. name: test-config
  30. key: Password

验证:

  1. [root@hdss7-21 ~]# kubectl exec nginx-7cd5cbd997-zv6f4 printenv | egrep "User|Pwd"
  2. User=root
  3. Pwd=123456
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:1.11
  18. ports:
  19. - containerPort: 80
  20. volumeMounts:
  21. - name: ab
  22. mountPath: /etc/nginx/conf.d/
  23. readOnly: true
  24. volumes:
  25. - name: ab
  26. configMap: # 存储卷类型
  27. name: ab-config

验证:

  1. [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/a.ini
  2. 123
  3. [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/b.ini
  4. 456

版权声明:本文为jasonminghao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jasonminghao/p/12584561.html