Kubernetes之ConfigMap
- 2020 年 3 月 27 日
- 筆記
1、何为configMap
kubernetes中提供了一个叫configMap
的概念,为的就是让镜像和配置文件之间解耦,不需要在镜像中打包配置文件,实现了镜像的灵活性,因为一个configMap
就是一系列配置信息的集合,将来是可以直接注入到Pod中的容器供其使用。
2、创建configMap
你可以通过使用kubectl create configmap
或者yaml
方式来创建configMap。
2.1、通过–from-literal创建
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]
示例:
1.创建命令
$ kubectl create configmap test-config --from-literal=Username=root --from-literal=Password=123456
2.结果如下data内容:
[root@hdss7-21 ~]# kubectl get configmap test-config -o yaml apiVersion: v1 data: Password: "123456" Username: root kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:25:59Z" name: test-config namespace: default resourceVersion: "98418" selfLink: /api/v1/namespaces/default/configmaps/test-config uid: 7ce2d3dd-6b0d-4fa2-bb09-0a353a3a137a
2.2、通过文件创建
我们可以指定文件创建configmap,系统会自动将文件的内容写入到configmap的data字段里。
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source]
示例:
1.db.properties
文件内容
db.user = root db.pwd = 123456 db.host = 10.4.7.11 db.port = 3306 db.lib = devops
2.创建命令
$ kubectl create configmap db-config --from-file=./db.properties
–from-file 可以有多个
3.结果如下data内容:
[root@hdss7-21 ~]# kubectl get configmap db-config -o yaml apiVersion: v1 data: db.properties: | db.user = root db.pwd = 123456 db.host = 10.4.7.11 db.port = 3306 db.lib = devops kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:33:57Z" name: db-config namespace: default resourceVersion: "99103" selfLink: /api/v1/namespaces/default/configmaps/db-config uid: a3b76fd8-bf2d-483b-a455-eb4fb48450cb
注意:我们可以看到指定文件创建时ConfigMap会创建一个key/value键值对,key是文件名,value是文件内容。
如果我们不想configmap中的key为默认的文件名,还可以在创建时自己指定key名字:
$ kubectl create configmap db-config --from-file=<key-name>=<path-to-file>
2.3、通过目录创建
我们可以指定目录创建configmap,系统会自动将指定目录下的所有文件的内容写入到configmap的data字段里。
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source]
示例:
1.查看文件内容
[root@hdss7-21 ~]# echo "123" >config/a.ini [root@hdss7-21 ~]# echo "456" >config/b.ini
2.创建命令
$ kubectl create configmap ab-config --from-file=./config
–from-file 可以有多个。
3.结果如下data内容:
[root@hdss7-21 ~]# kubectl get configmap ab-config -o yaml apiVersion: v1 data: a.ini: | 123 b.ini: | 456 kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:45:15Z" name: ab-config namespace: default resourceVersion: "100073" selfLink: /api/v1/namespaces/default/configmaps/ab-config uid: 0988dda0-c8b5-4944-ad16-cffba1d41bb3
注意:我们可以看到指定目录创建时ConfigMap内容中的各个文件会创建一个key/value键值对,key是文件名,value是文件内容。
指定目录时只会识别该目录下的文件,而忽略子目录。
2.4、yaml文件创建
1.创建cache-db-config.yaml
文件
apiVersion: v1 kind: ConfigMap metadata: name: cache-db-config namespace: default data: redis.cnf: | redis.db = 3 redis.host = 127.0.0.1 redis.user = admin redis.pwd = admin123 redis.port = 2379 mysql.cnf: | mysql.db = devops mysql.host = 127.0.0.1 mysql.user = root mysql.pwd = root123 mysql.port = 3306
2.应用yaml
$ kubectl apply -f cache-db-config.yaml
3、使用ConfigMap
那么前面介绍如何创建ConfigMap,但是怎么使用尼?下面讲解
使用ConfigMap三种方式:
- 第一种是通过环境变量的方式,直接传递给pod
- 使用configmap中指定的key
- 使用configmap中所有的key
- 第二种是通过在pod的命令行下运行的方式(启动命令中)
- 第三种是作为volume的方式挂载到pod内
3.1、valueFrom方式
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.11 ports: - containerPort: 80 env: - name: User # pod容器中的环境变量名字 valueFrom: configMapKeyRef: name: test-config # configmap的名字 key: Username # configmap中定义的key - name: Pwd valueFrom: configMapKeyRef: name: test-config key: Password
验证:
[root@hdss7-21 ~]# kubectl exec nginx-7cd5cbd997-zv6f4 printenv | egrep "User|Pwd" User=root Pwd=123456
3.2、挂载方式
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.11 ports: - containerPort: 80 volumeMounts: - name: ab mountPath: /etc/nginx/conf.d/ readOnly: true volumes: - name: ab configMap: # 存储卷类型 name: ab-config
验证:
[root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/a.ini 123 [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/b.ini 456