一、ConfigMap的基本概念
1、什么是configMap
ConfigMap资源主要为容器注入相关的程序配置信息,用来定制程序的运行方式,比如Redis监听端口、最大客户端连接数。
当定义好一个ConfiqMap资源后,如果Pod需要使用,可以通过通过环境变量、或存储卷的形式将其挂载并加载相关的配置,降低了配置与镜像文件的耦合关系。
2、为什么需要configMap
将应用配置信息与程序进行分离,这样可以使得应用程序被更好地复用通过不同的配置能实现更灵活的功能,例如:在测试环境中Nqinx提供test域名访问,且没配置压缩功能,而在生产环境中则需要提供www域名访问,且需要开启压缩功能,所以将应用容器与配置分离,根据不同的环境调用不同的ConfigMap配置,能有效的降低耦合度和复杂度。
二、使用命令创建configMap
1.使用 kubectl create configmap命令使用 --from-literal 选项给出键值对来创建 ConfigMap
[root@master configMap]# kubectl create configmap nginx-command-cm --from-literal=nginx.host='0.0.0.0' --from-literal=nginx.port='8899'
configmap/nginx-command-cm created
[root@master configMap]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 108d
nginx-command-cm 2 8s
2.通过 kubectl get configmap 查看 nginx-comand-cm对象YAML格式可以看出,ConfigMap资源没有 sepc和status,而是直接使用data字段嵌套键值数据。
- 从上配置得知,若要基于配置清单创建ConfigMap资源时,仅需要指定apiVersion、kind、metadata、data这四个字段;
三、基于文件创建configMap
ConfigMap资源也可以为应用程序提供大段配置,这些大段配置通常保存在一个或多个文件中,可以使用 kubectl create configmap 命令,通过 --from-file 选项一次加载一个配置文件的内容为指定键的值。默认文件名为key,文件内容为values
1、准备两个Nginx的配置文件
## Nginx的主配置文件
vim myserver.conf
server {
listen 8080;
server name my.oldxu.net;
Location / {
root / usr/share/nginx/html;
index index.html;
}
include /etc/nginx/conf.d/*.cfg;
}
## Nginx的分配置文件,Nginx模块状态配置
vim myserver-status.cfg
Location /ngx_status {
stub status;
access_log off;
}
2、基于文件进行创建configMap
## 准备两个配置文件
[root@master configMap]# vim myserver.conf
[root@master configMap]# vim myserver-status.cfg
## 基于配置文件进行创建configmap
[root@master configMap]# kubectl create configmap nginx-confs --from-file=./myserver.conf --from-file=status.cfg=./myserver-status.cfg
configmap/nginx-confs created
## 查看configMap
[root@master configMap]# kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 108d
nginx-command-cm 2 13m
nginx-confs 2 7s
[root@master configMap]# kubectl describe configmaps nginx-confs
Name: nginx-confs
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
myserver.conf:
----
server {
listen 8080;
server name my.oldxu.net;
Location / {
root / usr/share/nginx/html;
index index.html;
}
include /etc/nginx/conf.d/*.cfg;
}
status.cfg:
----
Location /ngx_status {
stub status;
access_log off;
}
BinaryData
====
Events: <none>
## 导出configMap的yaml文件
[root@master configMap]# kubectl get configmaps nginx-confs -o yaml
apiVersion: v1
data:
myserver.conf: server {
\n listen 8080;\n server name my.oldxu.net;\n Location
/ {
\n root / usr/share/nginx/html;\n\tindex index.html;\n }\n include /etc/nginx/conf.d/*.cfg;\n<