ConfigMap详解与案例
1、ConfigMap使用场景
- 这里使用一张来源与网络的图来说明ConfigMap常见的使用场景之一:
2、ConfigMap的概述
- ConfigMap供容器使用的典型用法如下。
- 生成为容器内的环境变量。
- 设置容器启动命令的启动参数(需设置为环境变量)。
- 以Volume的形式挂载为容器内部的文件或目录。
ConfigMap以一个或多个key:value的形式保存在Kubernetes系统中供应用使用,既可以用于表示一个变量的值(例如apploglevel=info),也可以用于表示一个完整配置文件的内容(例如server.xml=<?xml…>…)可以通过YAML配置文件或者直接使用kubectlcreateconfigmap命令行的方式来创建ConfigMap
3、创建ConfigMap
- 创建ConfigMap的方式有4种:
- 通过直接在命令行中指定configmap参数创建,即–from-literal
- 通过指定文件创建,即将一个配置文件创建为一个ConfigMap–from-file=<文件>
- 通过指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,–from-file=<目录>
- 事先写好标准的configmap的yaml文件,然后kubectl create -f 创建
4、ConfigMap的增删改查指令
4.1、查询
1 | #查询所有命令空间的ConfigMap信息 |
4.2、修改
1 | kubectl edit configmap [configmap名称] |
4.3、删除
1 | kubectl delete configmap [configmap名称] |
4.3、增加
1 | kubectl create configmap [configmap名称] --from-file=[目录] |
5、为nginx-deployment创建configmap
5.1、编写yml文件创建configmap
1 | #创建nginx主配置文件的configmap |
1 | #创建虚拟主机configmap |
5.2、通过kubectl生成configmap
1 | kubectl apply -f www-config.yml |
5.3、创建nginx-deployment,挂载configmap
1 | apiVersion: apps/v1 |
5.4、访问测试
6、注意事项
Kubelet的同步时间间隔
设定参数:sync-frequency
缺省设定值:在1.17中缺省设定为1m0s,所以最大同步间隔为1分钟,之所以说最大,因为更新的时间点距其即将开始的同步的时间可能不同。包含subPath的configmap的pod无法实现热更新,可以通过
kubectl rollout restart deployment/nginx-deployment
重启deployment实现更新,更新前将修改的数据通过命令kubectl apply -f nginx-config.yml
更新到etcd即可。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[root@k8s-master ~]# kubectl exec -it pod/nginx-deployment-5c8f6b5d97-6cvmq -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/lisiraccess.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}