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

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

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

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

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

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

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

一、使用方式

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

2.env方式

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

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

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

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

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

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

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

二、实践

1.编排部署configMap

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

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

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

5.修改configMap值

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

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

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

三、总结

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top