java 单机接口限流处理方案
251
2022-11-02
Kubernetes ConfigMap对应用程序配置
管理应用程序配置(configmap)
创建ConfigMap后, 数据实际会存储在K8s中Etcd,然后通过创建Pod时引用该数据 。
应用场景:应用程序配置
Pod使用configmap数据有两种方式:
• 变量注入
• 数据卷挂载
[root@k8s-master ~]# cat configmap.yml apiVersion: v1kind: ConfigMapmetadata: name: app-configdata: abc: "123" cde: "456" redis.properties: | port: 6379 host: localhost[root@k8s-master ~]# kubectl apply -f configmap.yml configmap/app-config created
[root@k8s-master ~]# kubectl get cmNAME DATA AGEapp-config 3 46s[root@k8s-master ~]# kubectl describe cm app-configName: app-configNamespace: defaultLabels:
这里就将环境变量和配置文件都保存在k8s当中了。现在就是部署应用可以读取这个配置
[root@k8s-master ~]# cat configmap-pod.yml apiVersion: v1kind: Podmetadata: name: app-config-demo spec: containers: - name: demo image: nginx env: - name: XYZ value: "666" - name: ABCD valueFrom: configMapKeyRef: name: app-config key: abc - name: CDEF valueFrom: configMapKeyRef: name: app-config key: cde volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: - name: config configMap: name: app-config items: - key: "redis.properties" path: "redis.config"[root@k8s-master ~]# kubectl apply -f configmap-pod.yml pod/app-config-demo created
- key: "redis.properties" 这是是configmap里面的key
path: "redis.config" 挂载配置文件的文件名,也就是使用容器卷挂载在某个目录下,这个文件名就是path对应的值
[root@k8s-master ~]# kubectl exec -it app-config-demo -- bashroot@app-config-demo:/# ls /config/redis.configroot@app-config-demo:/# cat /config/redis.config port: 6379host: localhostroot@app-config-demo:/# echo $XYZ666root@app-config-demo:/# echo $ABCD123root@app-config-demo:/# echo $CDEF456
应用程序如何动态更新配置
应用程序动态更新配置方案:没有完善的自动化机制
Configmap帮你存储了配置文件,也挂载在对应的目录下面,但是confimap不能帮你实现热加载
当ConfigMap发生变更时,应用程序自动感知动态加载(需要程序自身支持)(在pod当中专门一个容器监听配置文件有没有更改,也就是通过数据卷挂载在自己的目录下去探测有没有更改,如果有变化就通知程序进行加载)触发滚动更新,即重启服务 当pod重建的时候就会去挂载configmap,也就是使用新的配置文件了,比如你明天升级,就可以将文件更新一下了,等明天更新就可以使用新的配置文件了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~