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

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

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

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

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

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

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

一、使用方式

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

2.env方式

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

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

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

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

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

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

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

二、实践

1.编排部署configMap

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

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

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

5.修改configMap值

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

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

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

三、总结

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top