做淘客网站企业备案,做软件好还是做网站好,行业解决方案,室内设计网站参考Configmap概述 Configmap概述Configmap能解决哪些问题#xff1f;Configmap应用场景局限性 Configmap创建方法命令行直接创建通过文件创建指定目录创建configmap 编写configmap资源清单YAML文件使用Configmap通过环境变量引入#xff1a;使用configMapKeyRef通过环境变量引入… Configmap概述 Configmap概述Configmap能解决哪些问题Configmap应用场景局限性 Configmap创建方法命令行直接创建通过文件创建指定目录创建configmap 编写configmap资源清单YAML文件使用Configmap通过环境变量引入使用configMapKeyRef通过环境变量引入使用envfrom把configmap做成volume挂载到pod Configmap热更新 Configmap概述 Configmap是k8s中的资源对象用于保存非机密性的配置的数据可以用key/value键值对的形式保存也可通过文件的形式保存。 Configmap能解决哪些问题 我们在部署服务的时候每个服务都有自己的配置文件如果一台服务器上部署多个服务nginx、tomcat、apache等那么这些配置都存在这个节点上假如一台服务器不能满足线上高并发的要求需要对服务器扩容扩容之后的服务器还是需要部署多个服务nginx、tomcat、apache新增加的服务器上还是要管理这些服务的配置如果有一个服务出现问题需要修改配置文件每台物理节点上的配置都需要修改这种方式肯定满足不了线上大批量的配置变更要求。 所以k8s中引入了Configmap资源对象可以当成volume挂载到pod中实现统一的配置管理。 Configmap是k8s中的资源 相当于配置文件可以有一个或者多个ConfigmapConfigmap可以做成Volumek8s pod启动之后通过 volume 形式映射到容器内部指定目录上容器中应用程序按照原有方式读取容器特定目录上的配置文件。在容器看来配置文件就像是打包在容器内部特定目录整个过程对应用没有任何侵入。
Configmap应用场景
使用k8s部署应用当你将应用配置写进代码中更新配置时也需要打包镜像configmap可以将配置信息和docker镜像解耦以便实现镜像的可移植性和可复用性因为一个configMap其实就是一系列配置信息的集合可直接注入到Pod中给容器使用。configmap注入方式有两种一种将configMap做为存储卷一种是将configMap通过env中configMapKeyRef注入到容器中。使用微服务架构的话存在多个服务共用配置的情况如果每个服务中单独一份配置的话那么更新配置就很麻烦使用configmap可以友好的进行配置共享。
局限性
ConfigMap在设计上不是用来保存大量数据的。在ConfigMap中保存的数据不可超过1 MiB。如果你需要保存超出此尺寸限制的数据可以考虑挂载存储卷或者使用独立的数据库或者文件服务。
Configmap创建方法
命令行直接创建 直接在命令行中指定configmap参数创建通过–from-literal指定参数 kubectl create configmap tomcat-config --from-literaltomcat_port8080 --from-literalserver_namemyapp.tomcat.comkubectl describe configmap tomcat-config
Name: tomcat-config
Namespace: default
Labels: none
Annotations: none
Dataserver_name:
----
myapp.tomcat.com
tomcat_port:
----
8080
Events: none通过文件创建 通过指定文件创建一个configmap–from-file文件 vim nginx.confserver {server_name www.nginx.com;listen 80;root /home/nginx/www/
}
#定义一个key是www值是nginx.conf中的内容kubectl create configmap www-nginx --from-filewww./nginx.confkubectl describe configmap www-nginx
Name: www-nginx
Namespace: default
Labels: none
Annotations: noneDatawww:
----
server {server_name www.nginx.com;listen 80;root /home/nginx/www/
}指定目录创建configmap
mkdir test-a
cd test-a/cat my-server.cnf
server-id1cat my-slave.cnf
server-id2指定目录创建configmap kubectl create configmap mysql-config --from-file/root/test-a/查看configmap详细信息 kubectl describe configmap mysql-config
Name: mysql-config
Namespace: default
Labels: none
Annotations: none
Datamy-server.cnf:
----
server-id1
my-slave.cnf:
----
server-id2
Events: none编写configmap资源清单YAML文件
cat mysql-configmap.yaml apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:master.cnf: |[mysqld]log-binlog_bin_trust_function_creators1lower_case_table_names1slave.cnf: |[mysqld]super-read-onlylog_bin_trust_function_creators1使用Configmap
通过环境变量引入使用configMapKeyRef 创建一个存储mysql配置的configmap cat mysql-configmap.yaml apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: 1lower: 1kubectl apply -f mysql-configmap.yaml创建pod引用Configmap中的内容 cat mysql-pod.yamlapiVersion: v1
kind: Pod
metadata:name: mysql-pod
spec:containers:- name: mysqlimage: busyboxcommand: [ /bin/sh, -c, sleep 3600 ]env:- name: log_bin #定义环境变量log_binvalueFrom: configMapKeyRef:name: mysql #指定configmap的名字key: log #指定configmap中的key- name: lower #定义环境变量lowervalueFrom:configMapKeyRef:name: mysqlkey: lowerrestartPolicy: Neverkubectl apply -f mysql-pod.yamlkubectl exec -it mysql-pod -- /bin/sh
/ # printenv
log_bin1
lower1通过环境变量引入使用envfrom
cat mysql-pod-envfrom.yaml apiVersion: v1
kind: Pod
metadata:name: mysql-pod-envfrom
spec:containers:- name: mysqlimage: busyboximagePullPolicy: IfNotPresentcommand: [ /bin/sh, -c, sleep 3600 ]envFrom: - configMapRef:name: mysql #指定configmap的名字restartPolicy: Neverkubectl apply -f mysql-pod-envfrom.yamlkubectl exec -it mysql-pod-envfrom -- /bin/sh
/ # printenv
lower1
log1把configmap做成volume挂载到pod
cat mysql-configmap.yaml apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: 1lower: 1my.cnf: |[mysqld]Welcomehahakubectl apply -f mysql-configmap.yamlcat mysql-pod-volume.yaml apiVersion: v1
kind: Pod
metadata:name: mysql-pod-volume
spec:containers:- name: mysqlimage: busyboxcommand: [ /bin/sh,-c,sleep 3600 ]volumeMounts:- name: mysql-configmountPath: /tmp/configvolumes:- name: mysql-configconfigMap:name: mysqlrestartPolicy: Neverkubectl apply -f mysql-pod-volume.yamlkubectl exec -it mysql-pod-volume -- /bin/sh
/ # cd /tmp/config/
/tmp/config # ls
log lower my.cnfConfigmap热更新
kubectl edit configmap mysql
# 把logs: “1”变成log: “2”kubectl exec -it mysql-pod-volume -- /bin/sh
/ # cat /tmp/config/log
2发现log值变成了2更新生效了 更新 ConfigMap 后使用该 ConfigMap 挂载的 Env 不会同步更新 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间实测大概10秒才能同步更新