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

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

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

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

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

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

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

一、使用方式

使用configMap做程序和配置分离,那么首先就要定义configMap,然后部署configMap。K7j28资讯网——每日最新资讯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方式。K7j28资讯网——每日最新资讯28at.com

2.env方式

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

使用方式如下:K7j28资讯网——每日最新资讯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卷下面的内容:K7j28资讯网——每日最新资讯28at.com

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

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

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

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

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

二、实践

1.编排部署configMap

编排部署configMap,查看部署后的configMap信息:K7j28资讯网——每日最新资讯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里取的。K7j28资讯网——每日最新资讯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放入到容器的环境变量里的。K7j28资讯网——每日最新资讯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的值放入到环境变量。K7j28资讯网——每日最新资讯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被写入到了文件里。K7j28资讯网——每日最新资讯28at.com

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

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

5.修改configMap值

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

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

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

三、总结

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

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

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

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

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

上一篇: JDK21 性能提升20倍

下一篇: 忍不了了!JavaScript实在太烂了!

标签:
  • 热门焦点
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
Top