当前位置:首页 > 科技  > 软件

为啥有的ConfigMap要重启Pod才生效

来源: 责编: 时间:2023-10-20 10:02:20 408观看
导读在一般应用部署中,都是将程序和配置信息分离,这样可以保证程序可以被各个环境复用。在容器场景中,将应用打包成镜像后,可以通过环境变量或者文件挂载的方式,在创建容器时把配置注入进去。在Kubernetes场景中,则使用configMa

在一般应用部署中,都是将程序和配置信息分离,这样可以保证程序可以被各个环境复用。B2228资讯网——每日最新资讯28at.com

在容器场景中,将应用打包成镜像后,可以通过环境变量或者文件挂载的方式,在创建容器时把配置注入进去。B2228资讯网——每日最新资讯28at.com

在Kubernetes场景中,则使用configMap实现应用与配置分离。使用configMap的方式有多种,有的方式修改了configMap的配置,无需重启Pod即可生效,有的方式需要重启Pod才生效。看看你用的是哪一种吧。B2228资讯网——每日最新资讯28at.com

B2228资讯网——每日最新资讯28at.com

一、使用方式

使用configMap做程序和配置分离,那么首先就要定义configMap,然后部署configMap。B2228资讯网——每日最新资讯28at.com

1.定义configMap

apiVersion: v1kind: ConfigMapmetadata:  name: democm  namespace: demodata:  db_name: demodb  db_host: 172.19.132.23

configMap有3种使用方式:env方式 、envFrom方式 、volumes方式。B2228资讯网——每日最新资讯28at.com

2.env方式

这种方式是将configMap的key-value注入到容器的环境变量里,程序里使用时,使用env里定义的name即可获取到对应的值。使用方式如下:B2228资讯网——每日最新资讯28at.com

apiVersion: v1kind: Podmetadata:  name: pod-cm-1  namespace: demo  labels:    app: pod-cm-1spec:  containers:    - name: pod-cm-1      image: busybox      imagePullPolicy: IfNotPresent      tty: true      # 会出现在容器的环境变量里,程序里要使用env#name可以获取到对应的值      env:        - name: db_name_app          valueFrom:            configMapKeyRef:              name: democm              key: db_name        - name: db_host_app          valueFrom:            configMapKeyRef:              name: democm              key: db_host

3.envFrom方式

这种方式也是将configMap的key-value注入到容器的环境变量里,使用方法与env方式类似,只不过在程序使用时,是直接使用configMap定义的key,即可获取到对应的值。使用方式如下:B2228资讯网——每日最新资讯28at.com

apiVersion: v1kind: Podmetadata:  name: pod-cm-2  namespace: demo  labels:    app: pod-cm-2spec:  containers:    - name: pod-cm-2      image: busybox      imagePullPolicy: IfNotPresent      tty: true      # 程序里使用configmap的key      envFrom:        - configMapRef:            name: democm

4.volumes方式

这种方式是以卷挂载的方式,将configMap的key-value写入到文件里,key是文件名,value是文件内容。B2228资讯网——每日最新资讯28at.com

使用方式如下:B2228资讯网——每日最新资讯28at.com

apiVersion: v1kind: Podmetadata:  name: pod-cm-3  namespace: demo  labels:    app: pod-cm-3spec:  nodeName: k8s-worker-2  containers:    - name: pod-cm-3      image: nginx      imagePullPolicy: IfNotPresent      ports:        - containerPort: 80          hostPort: 8080      volumeMounts:        - name: workdir          mountPath: /usr/share/nginx/html  volumes:    - name: workdir      configMap:        name: democm        optional: true

观察volume卷下面的内容:B2228资讯网——每日最新资讯28at.com

进入到容器的/usr/share/nginx/html目录下,可以看到configMap定义的key-value会出现此目录下,并且会有一个类似时间的文件。进入到文件夹里,可以看到对应的db_host和db_name文件。B2228资讯网——每日最新资讯28at.com

B2228资讯网——每日最新资讯28at.com

B2228资讯网——每日最新资讯28at.com

如果configMap变化之后,对应的会生成新的文件:B2228资讯网——每日最新资讯28at.com

B2228资讯网——每日最新资讯28at.com

二、实践

1.编排部署configMap

编排部署configMap,查看部署后的configMap信息:B2228资讯网——每日最新资讯28at.com

[root@k8s-master configmap]# kubectl apply -f configmap.yamlconfigmap/democm created[root@k8s-master configmap]# kubectl get cm -n demoNAME     DATA   AGEdemocm   2      11s[root@k8s-master configmap]# kubectl describe cm democm -n demoName:         democmNamespace:    demoLabels:       <none>Annotations:  <none>Data====db_host:----172.19.132.23db_name:----demodbEvents:  <none>

2.env方式

从这里可以看到env方式定义的yaml里的env已经被放入到容器的环境变量里的,只不过env里的值是从configMap里取的。B2228资讯网——每日最新资讯28at.com

[root@k8s-master configmap]# kubectl exec -it pod-cm-1 -n demo -- /bin/sh/ #/ # evn/bin/sh: evn: not found/ # envKUBERNETES_PORT=tcp://10.96.0.1:443KUBERNETES_SERVICE_PORT=443HOSTNAME=pod-cm-1SHLVL=1HOME=/rootTERM=xtermKUBERNETES_PORT_443_TCP_ADDR=10.96.0.1PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binKUBERNETES_PORT_443_TCP_PORT=443KUBERNETES_PORT_443_TCP_PROTO=tcpdb_host_app=172.19.132.23KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443KUBERNETES_SERVICE_PORT_HTTPS=443KUBERNETES_SERVICE_HOST=10.96.0.1PWD=/db_name_app=demodb

3.envFrom方式

从这里可以看到envFrom方式是直接把configMap的key-value放入到容器的环境变量里的。B2228资讯网——每日最新资讯28at.com

[root@k8s-master configmap]# kubectl apply -f pod_configmap_2.yamlpod/pod-cm-2 created[root@k8s-master configmap]# kubectl exec -it pod-cm-2 -n demo -- /bin/sh/ #/ # envKUBERNETES_SERVICE_PORT=443KUBERNETES_PORT=tcp://10.96.0.1:443HOSTNAME=pod-cm-2SHLVL=1HOME=/rootdb_name=demodbTERM=xtermKUBERNETES_PORT_443_TCP_ADDR=10.96.0.1PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binKUBERNETES_PORT_443_TCP_PORT=443KUBERNETES_PORT_443_TCP_PROTO=tcpKUBERNETES_SERVICE_PORT_HTTPS=443KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443KUBERNETES_SERVICE_HOST=10.96.0.1PWD=/db_host=172.19.132.23

4.volumes方式

这种方式可以看到,volumes方式并没有把configMap的值放入到环境变量。B2228资讯网——每日最新资讯28at.com

[root@k8s-master configmap]# kubectl apply -f pod_configmap_3.yamlpod/pod-cm-3 created[root@k8s-master configmap]# kubectl exec -it pod-cm-3 -n demo -- /bin/sh# envKUBERNETES_SERVICE_PORT=443KUBERNETES_PORT=tcp://10.96.0.1:443HOSTNAME=pod-cm-3HOME=/rootPKG_RELEASE=1~bookwormTERM=xtermKUBERNETES_PORT_443_TCP_ADDR=10.96.0.1NGINX_VERSION=1.25.2PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binKUBERNETES_PORT_443_TCP_PORT=443NJS_VERSION=0.8.0KUBERNETES_PORT_443_TCP_PROTO=tcpKUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443KUBERNETES_SERVICE_PORT_HTTPS=443KUBERNETES_SERVICE_HOST=10.96.0.1PWD=/

但是可以看到configMap的key-value被写入到了文件里。B2228资讯网——每日最新资讯28at.com

# cd /usr/share/nginx/html# lsdb_host  db_name# cat db_host172.19.132.23# cat db_namedemodb

B2228资讯网——每日最新资讯28at.com

5.修改configMap值

修改configMap值,然后重新部署configMap,继续观察这3种方式。B2228资讯网——每日最新资讯28at.com

用命令kubectl exec -it pod-cm-xxxxxx -n demo -- /bin/sh进入到容器后,可以观察到:B2228资讯网——每日最新资讯28at.com

  • env方式和envFrom方式方式对应的值没有变化,需要重启Pod后才生效。
  • volumes方式的值会自动变化。

三、总结

本文总结了configMap使用的3种方式:env方式、envFrom方式、volumes方式。B2228资讯网——每日最新资讯28at.com

env方式和envFrom方式方式说白了是往容器里注入了环境变量,在容器启动的时候,就已经注入了,无法修改。每次修改configMap的key-value,需要重启Pod才能生效。B2228资讯网——每日最新资讯28at.com

volumes方式的方式,实际上把configMap的key-value写入到了容器对应的volume卷下,而且每次configMap变更,都会把最新值写入到volume卷下,这样容器每次都能取到最新值。B2228资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14316-0.html为啥有的ConfigMap要重启Pod才生效

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 前端项目重构的深度思考和复盘

下一篇: 图形编辑器开发:实现自定义规则输入框组件

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top