目录
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